ディジタル信号処理補講 matlab - mk.ecei.tohoku ... · 6 matlab講習会 36....
TRANSCRIPT
MATLAB講習会
MATLAB講習会 1
ディジタル信号処理補講
2019年5月7日 14:40-16:10阿部 正英2019年5月10日16:20-17:50川又 政征
内容0. ディジタル信号処理の単位認定の新しい試み
1. MATLAB とは?
2. MATLABの起動と終了
3. 電卓的な使い方(スカラー,ベクトル,行列,複素数の演算の基本)
4. プログラミングと実行
5. データの視覚化と印刷
6. 関連書籍とマニュアル
7. 参考ウェブページ
8. デモンストレーション
9. MATLABの入手方法
10. 参考: OctaveについてMATLAB講習会 2
ディジタル信号処理の単位認定の新しい試み
配点割合
* 定期試験 90 点* レポート提出(2回) 5+5 点* 「MATLAB入門」受講 5 点
(受講率に比例して 大5点を与える)
注: 高点は100点とする。
「MATLAB入門」はMATLAB Grader上の
対話型学習・演習システム
MATLAB講習会 3
1.MATLABとは?
MATLAB = Matrix Laboratory
科学技術計算ための計算機言語
信号処理,画像処理,通信,制御,数値計算の
実質的世界標準
スカラー,ベクトル,行列,複素数に対して,
数式に似た簡潔な記述が可能
数値計算と視覚化のための豊富な関数を準備
MATLAB講習会 4
MATLABはどれくらい簡単か?(1~10の和を求める場合)
C言語では#include <stdio.h>int sum(int num){
int sum = 0;int i;for(i = 0; i <= num; i++) {
sum = sum + i;}return sum;
}int main(void){
int result;int num;num = 10;result = sum(num);printf("%d¥n", result);return 0;
}
MATLABでは
N =10x = 1:Nresult = sum(x)
もっと簡単にすると
result = sum(1:10)
MATLAB講習会 5
2.MATLABの起動・終了・基本動作
起動(計算機大演習室の場合):
MATLAB講習会 6
クリック
MATLAB R2019aを起動する
終了 : MATLABのプロンプトに
exit または quitとタイプして、
enterキーを押す
>> exitまたは
>> quit
MATLAB講習会 7
MATLAB講習会 8
デスクトップ環境
ワークスペース(定義された変数の一覧)
コマンドウィンドウ(主にここを使う)
注意事項: 計算機大演習室のMATLABを利用してログアウトするとき,
すべてのMATLABのウィンドウを閉じてから, ログアウトすること
MATLAB講習会 9
基本的動作: MATLABは対話型システムである(命令を一つずつ解釈・実行する)
1. プロンプト(>>)を表示する.
2. 命令(あるいはM-ファイル)を一つ読みこむ.
3. 命令を解釈し,実行する.
4. 1.にもどる.
MATLAB講習会 10
3.コマンド入力(電卓的な使い方)
コマンドラインからの命令を一つずつ入力することで,計算やグラフの表示などの命令が実行される .
10+20/2-5×3 を計算したいとき
>> 10+20/2-5*3
と入力すると( はenterキー)
MATLAB講習会 11
ans =5
代入
>> x = 2x =
2>> y = 3; %表示しないときに ; をつける
>> x + y ans =
5(注: %以下はMATLABの注釈であるため,実行
のためにタイプする必要はない.enterキー については,以後省略)
MATLAB講習会 12
複素数
複素数も実数と同様に計算することができる.
虚数単位には i または j を用いる.
>> (3+1i)*(2-3i)ans =
9.0000 - 7.0000i>> x=1+2i; y=3+4i;>> z=x+yz =
4.0000 + 6.0000iMATLAB講習会 13
注意:
新のMATLABでは,入力時の虚数単位として「1i」を用いることになった.左の例では(3+1i)*(2-3i)と入力する.
ベクトル 変数の宣言をせずにベクトルを利用できる.
>> x = [1 3 5] % ベクトルxの定義
x =1 3 5
>> x(3) % xの3番目の要素
ans =5
>> size(x) % xのサイズ
ans =1 3
MATLAB講習会 14
ベクトルのインデックスについての注意
MATLABのベクトルのインデックスは
1から始まる.0から始まるのではない.
x(0), x(1), x(2), x(3), x(4), …
行列の場合も X(1,1) から始まる.
MATLAB講習会 15
関数
>> sqrt(9) % 平方根
ans =3
>> sin(pi / 6) % 正弦関数,ただし pi は円周率
ans = 0.5000
>> log10(5) % 常用対数
ans = 0.6990
MATLAB講習会 16
ベクトルの演算>> x = [1 3 5]; % xへ代入>> y = [2 4 6]; % yへ代入>> x + y % 加算ans =
3 7 11 >> y - x % 減算ans =
1 1 1 >> x .* y % 要素ごとの乗算ans =
2 12 30 MATLAB講習会 17
ベクトルの演算
>> x ./ y % 要素毎の除算
ans =0.5000 0.7500 0.8333
>> sqrt(x) % 平方根
ans = 1.0000 1.7321 2.2361
MATLAB講習会 18
ベクトルの代入
>> x = 1 : 5 %初期値: 終値(ただし増分1)
x =1 2 3 4 5
>> y = 0 : 0.5 : 3; %初期値:増分: 終値
>> z = 10 : -2 : 5; % -2 は負の増分MATLAB講習会 19
行列の代入
>> A = [7 8 9; 1 2 3; 4 5 6]A =
7 8 91 2 34 5 6
>> A(3,2) % Aの3行2列の要素
>> size(A) % Aのサイズ
MATLAB講習会 20
行列の要素ごとの演算
>> A = [7 8 9;1 2 3;4 5 6]; % 代入
>> sqrt(A) % Aの各要素の平方根
ans =2.6458 2.8284 3.00001.0000 1.4142 1.73212.0000 2.2361 2.4495
MATLAB講習会 21
行列の演算
A + B % 和A - B % 差A * B % 積A / B % AにBの逆行列をかける
A .* B % 要素ごとの積
A ./ B % 要素ごとの除算
A’ % 転置
inv(A) % Aの逆行列
MATLAB講習会 22
特別な行列
ones(M,N) % 要素がすべて1のM x N行列
zeros(M,N) % 要素がすべて0のM x N行列
eye(M,M) % 単位行列I(アイ)の意味
A(m,:) % 第m行の行ベクトル
A(:,n) % 第n列の列ベクトル
MATLAB講習会 23
関係演算子による要素の比較 関係演算子による実行結果は,0,1のロジカル
データとなる.つまり,要素が関係式を満たして
いれば1を,満たしてなければ0を出力する.
A == B % AとBは等しい
A ~= B % AとBは等しくない
A < B % AはBより小さい
A <= B % AはBより小さいか等しい
A > B % AはBより大きい
A >= B % AはBより大きいか等しいMATLAB講習会 24
関係演算子による要素の比較
>> n = [-2 -1 0 1 2 3];>> delta = n == 0 % nの要素中から0に等しい
% 要素を検出してdeltaに代入
delta =0 0 1 0 0 0 % 検出結果
>> u0 = n >= 0 % nの要素から0以上の要素を% 検出してu0に代入
u0 =0 0 1 1 1 1 % 検出結果
MATLAB講習会 25
文字列
変数とベクトル,行列に文字列も入れることができる.
>> x = 'Hello World'x =
'Hello World'>> A = ['Digital' 'Signal' 'Processing'];>> A(3)ans =
'g'>> A(5:7)ans =
'tal'MATLAB講習会 26
help 名前が既知の関数などの説明がほしいときは help>> help sin
sin - ラジアン単位の引数の正弦
この MATLAB 関数 は、X 要素の正弦を返します。
Y = sin(X)参考 asin, asind, sind, sinhsin のリファレンス ページ
sin という名前のその他の関数
MATLAB講習会 27
doc 名前が既知の関数の詳しい説明が知りたいとき
>> doc sin
MATLAB講習会 28
lookfor 未知の名前の関数をさがしたいときには lookfor>> lookfor fourier(下記のようにfourierという文字に関連する関数名が表示される)
fft - Discrete Fourier transform.fft2 - Two-dimensional discrete Fourier Transform.fftn - N-dimensional discrete Fourier Transform.ifft - Inverse discrete Fourier transform.(以下省略)
関数の名前が分かったら help でさらに調べる>> help fft
MATLAB講習会 29
4.プログラミングと実行
プログラミングのために,M-ファイルを用いる.
M-ファイルは,テキスト形式のファイル(拡張子は .m)である.コマンドや関数を実行したい順に記述する.MATLAB付属のエディタを使って作成する.
M-ファイルに,以下の2種類の形式がある. スクリプトM-ファイル: コマンド・関数をまとめて処理する.
ファンクションM-ファイル: 入力引数と出力引数を伴うユーザ定義の関数を作成する.入出力引数の関係を記述した function で始まる関数宣言の行が必要.
MATLAB講習会 30
エディタの起動方法
新規のM-ファイルを作成
する場合はeditコマンドを
実行し,エディタを起動す
る.
>> edit 指定したM-ファイルをエ
ディタで開くためには,次
の書式で実行する.
>> edit filenameMATLAB講習会 31
コマンドウィンドウの上部が上のようなエディターのウィンドウとなる
制御文
MATLABでは多くのプログラミング言語で使用される制
御文を使うことができる.
代表的な制御文
for 指定回数の繰り返しステートメント
while 不定回数の繰り返しステートメント
if , elseif, else 条件実行ステートメント
switch, case 式に基づき,case文で実行を切り替えMATLAB講習会 32
スクリプトM-ファイル(****.mという拡張子のテキストファイル)
スクリプトM-ファイルを使うことで,一連のコマン
ド・関数をまとめて処理することができる.
1~10までの和を求めるスクリプトM-ファイルの
例:ファイル名 keisan.mソースリスト
MATLAB講習会 33
clear allx=0;for k=1:10
x=x+k;endx
スクリプトM-ファイルの実行
スクリプトM-ファイルを実行するためには,
コマンドウィンドウで単に拡張子(.m)なしの
ファイル名を入力する.
スクリプトM-ファイル:keisan.mの実行
>> keisanx =
55
MATLAB講習会 34
ファンクションM-ファイル ファンクションM-ファイルを使うことで,入力引数と出力引数を伴う,ユーザ定義の関数を作成することができる.
三辺の長さ a, b, c が与えられた三角形の面積を求める関数 heronの例(ヘロンの公式による)
ファンクションM-ファイル: heron.mfunction x= heron(a,b,c)s = (a + b + c)/2;x = sqrt(s * (s - a) * (s - b) * (s - c));end MATLAB講習会 35
ファンクションM-ファイルの実行
ファンクションM-ファイルを実行するためには,
スクリプトM-ファイルあるいはコマンドウィンドウ
から呼び出す.
>> a = 5; b = 4; c = 3;>> menseki = heron(a, b, c)
menseki =6
MATLAB講習会 36
5.データの視覚化と印刷
MATLABはデータの視覚化のための豊富な関数を持っている.
plot y=f(x)の線形プロット
stem y=f(x)の棒状のプロット
semilogx 片対数プロット
semilogy 片対数プロット
loglog 両対数プロット
title グラフのタイトル
xlabel, ylabel 座標軸のラベル
axis 座標軸の範囲
grid グラフの格子
MATLAB講習会 37
プロットの例
t = 0 : 0.01: 2*pi;y = sin(t);plot(t, y)title('Example of Plot')xlabel('Time t')ylabel('y=sin(t)')axis([0 2*pi -1.5 1.5])grid
MATLAB講習会 38
印刷
印刷したいウィンドウを選択し,メニューのところで,プリンタアイコンをクリックする.
グラフの場合は,グラフの左上のプリンタアイコンをクリックする.
エディターの場合は,そのウィンドウを選択してから,左上のプリンタアイコンをクリックする.
コマンドウィンドウの場合は,印刷したい範囲を選択し,右クリックして「選択を印刷」を選ぶ.
MATLAB講習会 39
6.講義に関するウェブページ
川又・阿部(正)研究室のページhttp://www.mk.ecei.tohoku.ac.jp/dsptext/
教科書中のプログラムのソースリストが
ダウンロード可能.
ディジタル信号処理のレポートを作成するために
は,このページをみれば十分である.
MATLAB講習会 40
7. 関連する書籍とウェブページ
関連書籍工学部生協で様々なものが売っているので見て下さい.
MathWorks社(開発元)のホームページMATLABと関連製品の紹介,使い方,関連書籍などhttps://jp.mathworks.com/
MATLAB講習会 41
8.デモンストレーション
>> demo 上のようにタイプすると,
MATLABのデモを見ることができる.
デモには,MATLABの使い方,数値計算,グラフィックス,ゲームなどの多数の例があり,興味深い.
MATLAB講習会 42
9. 「MATLAB 入門」について
ブラウザ上で動作するMATLAB Grader を利用した対話型学習・演習システム
大学外(たとえば自宅)でも利用できる
コースへ招待するメールをDCメールに送付予定初回のみメールが届いたメールアドレスを使用して「MathWorks アカウント」を作成すること
指示に従い,期日までにコースを受講すること受講段階に応じて,定期試験の点数(100満点)にさら大5点を加点する
MATLAB講習会 43
9.MATLABの入手方法
MATLAB and Simulink Student Suiteが販売されている.本体価格9,990円(税別)
多数の重要なToolboxを含み,機能が豊富な製品(20万円相当のものがこの金額!)
https://jp.mathworks.com/academia/student_version.html?s_tid=acport_sv_sp_cta1
MATLAB講習会 44
10.関連情報(Octaveについて)
Octaveは,MATLABとほぼ同じ文法で数値計算が実行
できるフリーソフト
MATLABは高機能・高価格
Octaveは無料,しかしライブラリは少ない.
Octaveについては,以下のページを見てほしい.
川又・阿部研究室内のOctaveの紹介:
http://www.mk.ecei.tohoku.ac.jp/dsptext/octave/Octave公式ページ(英文):
http://www.gnu.org/software/octave/
MATLAB講習会 45
最後に:MATLABプログラミングの極意
見る前に跳べ.Leap Before You Look
W. H. Auden 考える前に探せ.
Find Before You ThinkM. Kawamata
探しても見つからないときには仕方がないので作ろう.
ループをできるだけ使うな.ベクトル化せよ.
右の例はどっちが簡単?MATLAB講習会 46
x = sum(1:10)
x=0;for k=1:10
x=x+k;endx
MATLAB講習会 47
Do you speak MATLAB?
http://www.mathworks.com/programs/ltc/ltcad.html?s_cid=ad_ltc_matlab