SlideShare uma empresa Scribd logo
1 de 73
Baixar para ler offline
MATLAB演習
• スタート画面から
全てのプログラム→専門ソフト→MATLAB→R2011b→MATLAB R2011b
でMATLABを起動してください

• ディジタル信号処理のホームページ
http://vision.kuee.kyoto-u.ac.jp/lecture/dsp/?menu=top
の講義情報からzipファイルをダウンロードしてください
• zipファイルを解凍しフォルダごとM:¥Documents¥MATLABに入れてください
アウトライン
• MATLABの基礎
• コンピュータ上での音,画像の扱い

• 標本化

第4回

• 離散フーリエ変換

第5,6回

• (フィルタリング,畳み込み)

第5回

難しい式がいろいろ出てきたが,MATLABなら関数一つ
で実行可能!!
MATLABの起動
起動画面
アウトライン
• MATLABの基礎
•
•
•
•
•

•
•
•
•

行列の計算
データ操作
関数
グラフのプロット
スクリプト

コンピュータ上での音,画像の扱い
標本化
離散フーリエ変換
(フィルタリング,畳み込み)
行列計算
復習
A=[1,2;3,4]
B=[1,2;3,4]
C=A.’*B

入力行列の
定義
行列計算

1.入力行列の定義
2.行列計算
行列計算
入力行列の定義
直接入力によるデータ定義
>>a=[1 ,2 ,3 ;4 ,5 ,6 ]
a=
123
456
1. 要素全体を[ ]で囲む
2. 各列をスペースまたはカ
ンマで区切る
3. 各行をセミコロンで区切
る

>>b=[1:10]
1 2 3 4 5 6 7 8 9 10

>>c=[0:2:10]
0 2 4 6 8 10
コロンを用いると等間隔ベ
クトルを定義できる
行列計算
入力行列の定義
関数によるデータの定義
>>e=zeros(2,3)
0 0 0
0 0 0
>>f=ones(3,4)
1111
1111
1111

他にもeye,magic,rand...な
どいろいろある

分からない関数などがあれ
ば
>>help ○○
などでいろいろ出てくる
行列計算
行列計算
算術演算子を用いる
要素ごとの演算をする際
は前にドット(.)をつける
和:+,差:- ,積:*
右除算 : / , 左除算 : ¥
べき乗: ^

複素共役転置 : ’
転置 : . ’

>>A=[1,4,7;2,5,8;3,6,9]
A=
1
4
7
2
5
8
3
6
9
>>B=A.'
B=
1
2
3
4
5
6
7
8
9
>>C=A*B
C=
66 78 90
78 93 108
90 108 126
データの操作
抜き出す,置き換える,結合する
データを抜き出す

データを置き換える

>>a=A(2,3)
a=
8

>>A(1:2,1)=10
A=
10 4 7
10 5 8
369

>>b=A(1,1:2)
b=
14

データを結合する
( , 横結合 : 縦結合)

>>c=A(2,:)
c=
258

>>D=[A,B]
D=
10 4 7 1 2 3
10 5 8 4 5 6
関数
組み込み関数
MATLABでは多くの組み込み関数が用意されており,そのほとんどが
ベクトルや行列のデータに対応している
引数の規則やオプションなどもhelpコマンドでわかる
• sin
• exp
• log

• sqrt
• min
• mean
• sum
• etc...

正弦
指数
対数(底がe)
平方根
最小値
平均値
要素の和
グラフの描画
グラフ描画の基本
2次元のグラフはplotで書ける
x=[-5:0.1:5];
y=sin(x);
plot(x,y)
plot関数は第一引数を横軸(ここ
ではx=
[−5.0 − 4.9 − 4.8 ⋯ 4.8 4.9 5.0])
第二引数を縦軸(ここではy=
[sin( −5.0) sin( −4.9) sin( −4.8)
⋯ sin( 4.8) sin( 4.9) sin( 5.0)])
でグラフを描ける
スクリプト
いちいちコマンドをコマンドウインドウでタイプするのは面倒
処理をひとまとめにしてスクリプトとして記述すれば楽
ホームタブの左上の新規スクリプトを開く(スクリプトはメモ帳など好きな
エディタで書いてもよい)

コメントアウトは「%」
保存はCtrl + s
実行:コマンドウィンドウでファイル名を呼ぶ(.mは不要)
パスを通していない場合、カレントディレクトリにある*.mファイルしか
実行出来ない
>> Hogehoge
( Hogehoge.mの例 )

ディレクトリはcdか左のファイルマネージャで移動
グラフの描画
講義の課題18
補間関数𝐶(𝑡)は𝑆𝑎(𝑡)の近似関数である
sin 𝜋𝑡
𝑆𝑎 𝑡 =
𝜋𝑡
1 − 2 𝑡 2 + 𝑡 3 (0 ≤ |𝑡| ≤ 1)
𝐶 𝑡 = 4 − 8 𝑡 + 5 𝑡 2 − 𝑡 3 (1 ≤ |𝑡| ≤ 2)
0(2 ≤ |𝑡|)
(1)関数𝑆𝑎(𝑡)を描画しなさい
(2)関数𝐶(𝑡)を描画しなさい
(3)両者の誤差関数を描きなさい
グラフの描画
例:課題18
(1)
Sa(t)の描画

(2)
C(t)の描画

(3)
誤差関数の
描画

•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•

t= -10:0.1:10;
y1=sin(pi*t)./(pi*t);
subplot(3,1,1);
plot(t,y1);

補間関数𝐶(𝑡)は𝑆𝑎(𝑡)の近似関数である
sin 𝜋𝑡
𝑆𝑎 𝑡 =
𝜋𝑡

1 − 2 𝑡 2 + 𝑡 3 (0 ≤ |𝑡| ≤ 1)
𝐶 𝑡 = 4 − 8 𝑡 + 5 𝑡 2 − 𝑡 3 (1 ≤ |𝑡| ≤ 2)
for ii=1:length(t)
0(2 ≤ |𝑡|)
if 0<=abs(t(ii))&&abs(t(ii))<1
(1)関数𝑆𝑎(𝑡)を描画しなさい
y2(ii)=1-2*abs(t(ii)).^2+abs(t(ii)).^3;
elseif 1<=abs(t(ii))&&abs(t(ii))<2
(2)関数𝐶(𝑡)を描画しなさい
y2(ii)=4-8*abs(t(ii))+5*abs(t(ii)).^2-abs(t(ii)).^3; (3)両者の誤差関数を描きなさい
else
y2(ii)=0;
end
end
subplot(3,1,2);
plot(t,y2);

y3=abs(y1-y2);
subplot(3,1,3);
plot(t,y3);
グラフの描画
例:課題18
•
•
•
•
•
•

%横軸のベクトルを用意
t= -10:0.1:10;
%_/_/_/_/_/_/_/
%Sa(t)の描画
%_/_/_/_/_/_/_/

• %対応する縦軸の値を用意
• y1=sin(pi*t)./(pi*t);
• %subplotは図を並べたいときに使う
• subplot(3,1,1);

• %グラフのプロット
• plot(t,y1);

subplot(3,1,1);ならば
3行1列に図を並べる
1

2
3

3つ目の引数が1ならば
上図の1の部分に図が入
る
グラフの描画
例:課題18
• %_/_/_/_/_/_/_/
• %Sa(t)の描画
• %_/_/_/_/_/_/_/
• %tの値についてifで場合分け
• for ii=1:length(t)
•
•
•
•
•
•
•
•
•
•
•
•
•

% 0 ≤ |𝑡| ≤ 1の時
if 0<=abs(t(ii))&&abs(t(ii))<1
y2(ii)=1-2*abs(t(ii)).^2+abs(t(ii)).^3;
%1 ≤ |𝑡| ≤ 2 の時
elseif 1<=abs(t(ii))&&abs(t(ii))<2
y2(ii)=4-8*abs(t(ii))+5*abs(t(ii)).^2-abs(t(ii)).^3;
%その他
else
y2(ii)=0;
end
end
subplot(3,1,2);
plot(t,y2);

tが1行10列の行列なら
length(t)=10である

abs(t)でtの絶対値をとる
グラフの描画
例:課題18
t= -10:0.1:10;
y1=sinc(t);
subplot(3,1,1);
plot(t,y1);
I = find((0<=abs(t)&abs(t)<1));
J = find(1<=abs(t)&abs(t)<2);
y2=zeros(size(t));
y2(I)=1-2*abs(t(I)).^2+abs(t(I)).^3;
y2(J)=4-8*abs(t(J))+5*abs(t(J)).^2-abs(t(J)).^3;
subplot(3,1,2);
plot(t,y2);
y3=abs(y1-y2);
subplot(3,1,3);
plot(t,y3

このようなスクリプトを
for文なしで書けることも
MATLABの魅力
→計算速度を上げるため
には必須
グラフの描画
例:課題18
𝑆𝑎(𝑡)

𝐶(𝑡)

誤差関数
補足
MATLABの扱うデータ
MATLAB(に限らずコンピュータ上)ではデータは全て離散信
号として扱っている
• MATLABでフーリエ変換はできない(できるのは離散フーリエ
変換)
• plotも離散化したデータをつなげてるだけ

x=0:1/50:4;
y=cos(n*x);
plot(x,y);

nを増やしていくと…?
補足
MATLABの扱うデータ
n = 100πの時に直線に戻った
実際にcos(100𝜋 ∗

sin 100𝜋 ∗

1
50

1
50

∗ 0) = 1 ,cos 100𝜋 ∗

∗ 2 = 1…

となりすべて1となる
→離散特有の性質

1
50

∗ 1 = 1,
アウトライン
• MATLABの基礎
• コンピュータ上での音声,画像の扱い
• 音声
• 画像
• 標本化
• 離散フーリエ変換
• (フィルタリング,畳み込み)
音声のデータ配列
ディジタル化された音声も行列で表
すことができる
サンプル数をNとして,モノラルの
場合はNx1,ステレオの場合はNx2
の行列となる

標本化

それぞれの値が行列
の一要素となる

0.0677
0.0775
0.0915
0.1000
-0.1116
0.1263
0.1373
-0.1461
-0.1574
⋮
音声の読み込みと再生
読み込みと再生
音声データの読み込み
(カレントディレクトリに音声ファイルを入れておく)
[y,Fs] = wavread(‘en/aiueo.wav’)
y…音声の行列
Fs…サンプリング周波数(1秒間に何個のサンプルをとるか)
音声データの再生
wavplay(y, Fs);
画像処理
画像も音声と同様に行列で表現できる
• 音声は一次元,画像は二次元
• 白黒画像なら値は輝度値を示す
• 黒:0→→→白:255
231 223 230 215
13

15

20

170

15

10

98

150

20

145 150 147
画像処理

200 180 165 150
235 195 155

70

220 209

98

50

202

85

69

47

131

35

38

40

113

47

50

17

115 110

9

15

120

14

15

14

113

23

30

25

121

34

30

8

150 110

11

12

126

10

17

R

カラー画像なら値は各画素に
R,G,Bの3つの成分を持つ
→3次元配列

G

B

15
画像の読み込みと表示

画像の読み込み
(音声の時と同様,カレントディレクトリに画像ファイルを入
れておく)
img=imread(‘en/lena.jpg’);

画像の表示
imshow(img);
アウトライン
• MATLABの基礎
• コンピュータ上での音声,画像の扱い
• 標本化
• 補間
• 離散フーリエ変換
• (フィルタリング,畳み込み)
標本化
∞

𝑥 𝑠 𝑡 = 𝑥(𝑡)

𝛿(𝑡 − 𝑛𝑇)
𝑛=−∞

標本化

1/サンプリング周波数
とびとびのデルタ関数で表す

→

間のデータはどうするのか?
講義の課題19
ホームページにある音データに対して、1/2の
downsamplingおよび2倍のupsamplingを行ったものをそ
のまま音として聞くとどのようになるかを調べなさい.
(音再生ソフトは再生する音データのサンプリング周波数が
固定あるいは可変になっている.)
講義の課題19
元波形

アップサンプリング

ダウンサンプリング

間に0を補間する

値を間引く
講義の課題19
clear all
close all
[in,Fs] = wavread(‘sample.wav’)
l_in = length(in);
l_out1 = floor(l_in/2);
out1 = zeros(1,l_out1);
for i= 1:l_out1
out1(i) = in(2*i);
end
wavwrite(out1,Fs/2,'down.wav');

l_out2 = l_in*2;
out2 = zeros(1,l_out2);
for i= 1:l_in
out2(i*2) = in(i);
end
h1=fir1(40,(Fs/2)/Fs,'low');
out2=conv(out2,h1);
out2=out2(1:l_out2);
wavwrite(out2,Fs*2,'up.wav');
講義の課題19
clear all
close all
[in,Fs] = wavread(‘sample.wav’)
l_in = length(in);
%_/_/_/_/_/_/_/_/_/_/
%ダウンサンプリング
%_/_/_/_/_/_/_/_/_/_/
%あらかじめ入力の半分の長さを持った行列を作成する(値は全て0)
l_out1 = floor(l_in/2);
out1 = zeros(1,l_out1);
%入力のサンプルを一個おきに出力に代入する
for i= 1:l_out1
out1(i) = in(2*i);
end
%音声の書き出し サンプリング周波数は2分の1
wavwrite(out1,Fs/2,'down.wav');
講義の課題19
%_/_/_/_/_/_/_/_/_/_/
%アップサンプリング
%_/_/_/_/_/_/_/_/_/_/
%あらかじめ入力の2倍の長さを持った行列を作成する(値は全て0)
l_out2 = l_in*2;
out2 = zeros(1,l_out2);
%入力のサンプルを出力に一個おきに代入する
for i= 1:l_in
out2(i*2) = in(i);
end
%折り返しノイズを拾ったままであるのでLPFをかける
%LPFを用意
h1=fir1(40,(Fs/2)/Fs,'low');
%畳み込み
out2=conv(out2,h1);
out2=out2(1:l_out2);
wavwrite(out2,Fs*2,'up.wav');
講義の課題19
スペクトログラムの違い

元波形

ダウンサンプリング

アップサンプリング
画像における補間
画像を3倍に拡大する→赤い部分の画素値はどうやって決める?
画像における補間
最近傍補間→とりあえず近くの画素値を使う
画像における補間
線形補間,双3次補間→中間値をうまくとっていく
画像の補間
%画像の読み込み
img=imread('en/lenasmall.jpg');
%グレースケール化
img=rgb2gray(img);
%最近傍補間
imgA=imresize(img,3,'nearest');
%線形補間
imgB=imresize(img,3,'bilinear');
%双3次補間
imgC=imresize(img,3,'bicubic');
%画像の表示
subplot(1,3,1);
imshow(imgA);
subplot(1,3,2);
imshow(imgB);
subplot(1,3,3);
imshow(imgC);

imresize(img,3,'nearest');
画像の行列,拡大率,補間方法
を引数に取る

subplot(1,3,1);ならば
1行3列に図を並べる
1

2

3

3つ目の引数が1ならば
上図の1の部分に図が入
る
画像の補間

最近傍補間

線形補間

双三次補間
アウトライン
• MATLABの基礎
• コンピュータ上での音声,画像の扱い
• 標本化

• 離散フーリエ変換
• (フィルタリング,畳み込み)
離散フーリエ変換
時間領域の離散信号を周波数領域の離散スペクトルへ変換す
るもの
clear all
close all
[y1,fs]=wavread('en/aiueo.wav');
x1=1:length(y1);
x1=x1/fs;
subplot(2,1,1);
plot(x1,y1);

時間波形

fftsize=2^ceil(log2(length(y1)));
y2=20*log10(abs(fft(y1,fftsize)));
x2=linspace(0,fs,fftsize);
subplot(2,1,2)
plot(x2(1:fftsize/2),y2(1:fftsize/2));
パワースペクトル
離散フーリエ変換
以前までの変数を削除し表示して
ある図を消去する
スクリプトの前に書いておくと意
図しないバグが生じなくてよい
%前処理
clear all
close all
%音声の読み込み
[y1,fs]=wavread('aiueo.wav');
x1=1:length(y1);
x1=x1/fs;
subplot(2,1,1);
plot(x1,y1);

y1が1行10列の行列なら
length(y1)=10である

このままだと横軸が1,2,…のまま
なので時間に変換する
サンプリング周波数fsは一秒間の
サンプル数であるのでnサンプル
目の時間はn/fsである
離散フーリエ変換

%高速離散フーリエ変換
fftsize=2^ceil(log2(length(y1)));
y2=20*log10(abs(fft(y1,fftsize)));
x2=linspace(0,fs,fftsize);
subplot(2,1,2)
plot(x2(1:fftsize/2),y2(1:fftsize/2));

使える周波数はfs/2である
仮にすべて表示させると左右対称
なグラフが描かれる

• fftは高速フーリエ変換
• fftsizeは変換後のサンプル数(下の行
列のN) fftsizeは2の累乗にすると
最も高速になる
• 結果は複素数で出てくるので絶対値
をとってパワースペクトルとする
• y軸はデシベルで表現することが多
い

サンプルを周波数に変換
x2=linspace(0,fs,fftsize);
は0からfsまでの値をfftsize分割す
るという意味
離散フーリエ変換
音声を細かく分割→それぞれの領域でフーリエ変換すること
により音声の様々な性質がわかる
(短時間フーリエ変換の知識が必要)
→例:スペクトログラム

周波数(kHz)

強い

弱い
スペクトログラム
clear all
close all
[x,fs]=wavread('aiueo.wav');
frameMs=30;
periodMs=10;
frame=round(fs*frameMs/1000);
period=round(fs*periodMs/1000);
fftlength=2^ceil(log2(frame));
range=1:period:(length(x)-frame);
spec=zeros(fftlength/2,length(range));
for ii=1:length(range)
temp=20*log10(abs(fft(x([1:frame]+(ii-1)*period).*blackman(frame),fftlength))+eps);
spec(:,ii)=temp(1:fftlength/2+1);
end
xx=linspace(0,length(x)/fs,size(spec,2));
yy=linspace(0,fs/2,size(spec,1));
surface(xx,yy,spec);shading flat;
スペクトログラム
• frame…切り出すフレームの大きさ.
ここでは30ms秒分のフレームを切り
出している
clear all
close all
[x,fs]=wavread('aiueo.wav');
frameMs=30;
periodMs=10;
frame=round(fs*frameMs/1000);
period=round(fs*periodMs/1000);
fftlength=2^ceil(log2(frame));
range=1:period:(length(x)-frame);
spec=zeros(fftlength/2,length(range));

• period…for文一回あたりに動かすフ
レーム.ここでは10ms分のフレーム
を動かす
• fftlength…変換後のサンプル数.こ
の時サンプル数は2の累乗が最も高速
である
• range…切り出しの開始フレームのベ
クトル
• spec…出力されたスペクトログラム
を格納するための変数
スペクトログラム
• 以上のことを図にすると…

for ii=1:length(range)
temp=20*log10(abs(fft(x([1:frame]+…
(ii-1)*period).*blackman(frame),fftlength))+eps);
spec(:,ii)=temp(1:fftlength/2+1);
end
xx=linspace(0,length(x)/fs,size(spec,2));
yy=linspace(0,fs/2,size(spec,1));
surface(xx,yy,spec);shading flat;

…
30ms
10ms

0 10 20…

range

• 窓関数は今後の講義で(おそらく)出てくる
(ここではblackman windowが使われている)
スペクトログラム
調波構造

あ

い う え お

フォルマント

スペクトログラムを見
ると「あいうえお」の
どの音が発声されたの
かが分かる
基本周波数
画像のパワースペクトル
講義でもレンガの横方向の線を消去するというものがあった
が…
画像のパワースペクトル
clear all
close all
img = imread('en/renga.bmp');
img=rgb2gray(img);
subplot(2,2,1);
imshow(img);
%2次元フーリエ変換
im=fft2(img);
%パワースペクトルの表示
[h, w]=size(im);
nw=floor(w/2);
nh=floor(h/2);
imout=[im(nh+1:h,nw+1:w),im(nh+1:h,1:nw);…
[im(1:nh,nw+1:w),im(1:nh,1:nw)]];
subplot(2,2,2);
imshow(20*log10(abs(imout)),[0 255]);

%縦方向の周波数をゼロに置き換える
im_arranged=im;
im_arranged(:,w-5:w)=0;
im_arranged(:,1:5)=0;
im_arranged(1,1)=im(1,1);
%置き換えたものを表示
imout2=[im_arranged(nh+1:h,nw+1:w),…
im_arranged(nh+1:h,1:nw);…
[im_arranged(1:nh,nw+1:w),…
im_arranged(1:nh,1:nw)]];
subplot(2,2,4);
imshow(20*log10(abs(imout2)),[0 255]);
%逆2次元フーリエ変換
img2 = abs(ifft2(im_arranged));
%逆フーリエ変換したものを表示
subplot(2,2,3)
imshow(uint8(img2));
画像のパワースペクトル
clear all
close all
img = imread('en/renga.bmp');
img=rgb2gray(img);
subplot(2,2,1);
imshow(img);
%2次元フーリエ変換
im=fft2(img);
%パワースペクトルの表示
[h, w]=size(im);
nw=floor(w/2);
nh=floor(h/2);
imout=[im(nh+1:h,nw+1:w),im(nh+1:h,1:nw);…
[im(1:nh,nw+1:w),im(1:nh,1:nw)]];
subplot(2,2,2);
imshow(20*log10(abs(imout)),[0 255]);

• fft2で二次元高速フーリエ変換
• fftsizeを特に指定しなければ入力
と出力のサンプル数は同じになる

• パワースペクトルを見やすいものに
するために直流成分を画像中央に
持っていく この時対称性より行列
を図のように入れ替えればよい
• つまりできた画像をA,B,C,Dに分割
し[D,C;B,A]のようにする
元画像

入れ替えた画像

A

B

D

C

C

D

B

A
画像のパワースペクトル
%縦方向の周波数をゼロに置き換える
im_arranged=im;
im_arranged(:,w-5:w)=0;
im_arranged(:,1:5)=0;
im_arranged(1,1)=im(1,1);
%置き換えたものを表示
imout2=[im_arranged(nh+1:h,nw+1:w),…
im_arranged(nh+1:h,1:nw);…
[im_arranged(1:nh,nw+1:w),…
im_arranged(1:nh,1:nw)]];
subplot(2,2,4);
imshow(20*log10(abs(imout2)),[0 255]);
%逆2次元フーリエ変換
img2 = abs(ifft2(im_arranged));
%逆フーリエ変換したものを表示
subplot(2,2,3)
imshow(uint8(img2));

• 再び並べ替え前の画像を用いる
• ここでは横方向の波を消すためにy軸
に近い点を0とする
• ただし直流成分も0にすると画像が全
体的に暗くなるのでその部分は残す

• 逆二次元高速フーリエ変換はifft2
パワースペクトル

元画像

パワースペクトル

最終結果

縦方向の周波数をゼロにする
アウトライン
•
•
•
•

MATLABの基礎
コンピュータ上での音声,画像の扱い
標本化
離散フーリエ変換

• フィルタリング,畳み込み
フィルタリング

x[n]

…0 1

y[n]

2 …

… -1 0

1 …

x[n]とy[n]の離散畳み込みz[n]を計算する
𝑧 𝑛 = 𝑥 𝑛 ∗ 𝑦[𝑛]
フィルタリング
y[n]をdだけ動かした時𝑧 𝑑 =
d=0の時

𝑛=∞
𝑛=−∞

𝑥 𝑛 𝑦[𝑛 − 𝑑]
1
x[n]

…0 1

2 …
1/3

… -1 0

y[n]

1 …

2/3
z[n]

…0 1 2 …
1
1
1 2
𝑧 0 =0× +1× +1× =
3
3
3 3
フィルタリング
y[n]をdだけ動かした時𝑧 𝑑 =
d=1の時

𝑛=∞
𝑛=−∞

𝑥 𝑛 𝑦[𝑛 − 𝑑]
1
x[n]

…0 1

2 …
1/3

… -1 0

y[n]

1 …

1
z[n]

…0 1 2 …
1
1
1
𝑧 1 =1× +1× +1× =1
3
3
3
フィルタリング
y[n]をdだけ動かした時𝑧 𝑑 =
d=2の時

𝑛=∞
𝑛=−∞

𝑥 𝑛 𝑦[𝑛 − 𝑑]
1
x[n]

…0 1

2 …
1/3

… -1 0

y[n]

1 …

1
z[n]

…0 1 2 …
1
1
1
𝑧 1 =1× +1× +1× =1
3
3
3
フィルタリング
1
x[n]

…0 1

2 …
1/3

… -1 0

y[n]

1 …
1
z[n]

…0 1

2 …

x[n]にy[n]を畳み込むことによって0と1の境界部分が滑らかに変化するようになる
ローパスフィルタ
𝑧 𝑛 = 𝑥 𝑛 ∗ 𝑦 𝑛 ⇔ 𝑍 𝑘 = 𝑋 𝑘 𝑌[𝑘]

×

=

周波数領域では畳み込みは1対1で掛け合わす
ローパスフィルタ
• clear all

• xx=linspace(0,fs/1000,length(x));

• close all

•

•

• plot(xx(1:fftlength),in(1:fftlength),'b','linewidth',2);

• [x,fs] = audioread('akstn.wav');

• hold on;

• fftlength=length(x)/2;

• plot(xx(1:fftlength),out1(1:fftlength),'g','linewidth',2);

• filterSize=40;

• plot(xx(1:fftlength),out2(1:fftlength),'r','linewidth',2);

• in=20*log10(abs(fft(x)));
•
• h1=fir1(filterSize,500/(fs/2),'low');
• y1=conv(x,h1);
• y1=y1(1:length(x));
• out1=20*log10(abs(fft(y1)));
•
ローパスフィルタ

• clear all
• close all
•

• [x,fs] wavread('aiueo.wav');
• fftlength=length(x)/2;
• filterSize=40;
• in=20*log10(abs(fft(x)));

•
• h1=fir1(filterSize,500/(fs/2),'low');
• y1=conv(x,h1);
• y1=y1(1:length(x));

• out1=20*log10(abs(fft(y1)));
•

• fir1でフィルタ作成
一つ目の引数にフィルタサイズ(40く
らい)
二つ目の引数にカットオフ周波数
ここで設定する周波数は(カットオフ周
波数)/(ナイキスト周波数)であるこ
とに注意(ナイキスト周波数はサンプリ
ング周波数の2分の1)
三つ目の引数にフィルター タイプ
ここでハイパスやローパスを決める
• convで畳み込み
ローパスフィルタ

• xx=linspace(0,fs/1000,length(x));
•
• plot(xx(1:fftlength),in(1:fftlength),'b','linewidth',2);
• hold on;
• plot(xx(1:fftlength),out1(1:fftlength),'g','linewidth',2);
• plot(xx(1:fftlength),out2(1:fftlength),'r','linewidth',2);

• plotの後に設定を追加する
ことで色を付けたり実線を
点線にしたりすることがで
きる 詳しくはhelpコマ
ンドなどで

• 一つ目のplotの後にhold
on と打つことによりもと
もと書いてあったグラフに
上書きできる
ローパスフィルタ
フィルタリング

∗

1
9
1
9
1
9

1
9
1
9
1
9

1
9
1
9
1
9

ここを変えることにより
様々な処理ができる

=
平滑化フィルタ
clear all
close all
im=imread('lena.jpg');
im= rgb2gray(im);
subplot(1,2,1);
imshow(im);

%前処理
%画像の読み込み
%グレ-スケール化
%元画像の表示

im=double(im);
%uint8→double型へ
f=[1,1,1;1,1,1;1,1,1]/9; %フィルタの作成
imout=filter2(f,im,'same');%元画像とフィルタの畳み込み
imout=uint8(imout);
%double→uint型へ

subplot(1,2,2);
imshow(imout);

%平滑化した画像の表示
フィルタの中身を変えると…?
平滑化フィルタ
1
9
1
9
1
9

1
9
1
9
1
9

1
9
1
9
1
9

ソーベルフィルタ
(エッジ抽出)

ラプラシアンフィルタ
(エッジ強調)

1

0

−1

−1

-1

−1

2

0

−2

−1

9

−1

1

0

−1

−1

−1

−1
メディアンフィルタ
n×nマスの中で中間の濃度値を出力

10

34

78

10

34

78

13

99

89

13

36

89

45

36

16

45

36

16

5番目の数値をとる

10,13,16,34,36,45,78,89,99
メディアンフィルタ
エッジは保存したまま平滑化できる
2

5

200

178

2

5

200

178

4

2

189

211

4

2

189

211

4

8

196 190

4

8

196 190

3

9

203 216

3

9

203 216

2

5

200

178

2

5

200

178

2

5

200

178

2

5

200

178

4

68

189

211

4

5

189

211

4

2

129

211

4

2

189

211

4

8

196 190

4

8

196 190

4

8

196 190

4

8

196 190

3

9

203 216

3

9

203 216

3

9

203 216

3

9

203 216

平滑化フィルタ
メディアンフィルタ
平滑化フィルタと違いエッジが残る

元画像

平滑化フィルタ

メディアンフィルタ
メディアンフィルタ
孤立点ノイズを消去できる
182

175

200

178

194

2

189

211

204

8

196 190

173

189

203 216

182

画素値の小さい部分
に引っ張られる

175

200

178

182

175

200

178

194

150

189

211

194

189

189

211

204

8

196 190

204

8

196 190

173

189

203 216

173

189

203 216

画素値の小さい部分
に影響しない
メディアンフィルタ
ノイズ除去

im=imread('lena.jpg');
im=rgb2gray(im);
subplot(1,2,1);
imshow(im);

元画像

imout=medfilt2(im,[5,5]);
subplot(1,2,2);
imshow(imout);
メディアンフィルタ
まとめ
• MATLABの基礎
• 講義でやった部分の実装

講義で出てくる難しい話は基本MATLABの関数を用
いれば簡単に書ける
今回話せなかったことやこれから出てくる内容はホー
ムページを活用して何とかします…
(課題の回答はtwitterでこっそりあげてるよ)

Mais conteúdo relacionado

Mais procurados

パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化
Miyoshi Yuya
 

Mais procurados (20)

PRML勉強会 #4 @筑波大学 発表スライド
PRML勉強会 #4 @筑波大学 発表スライドPRML勉強会 #4 @筑波大学 発表スライド
PRML勉強会 #4 @筑波大学 発表スライド
 
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
 
パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化
 
PRMLの線形回帰モデル(線形基底関数モデル)
PRMLの線形回帰モデル(線形基底関数モデル)PRMLの線形回帰モデル(線形基底関数モデル)
PRMLの線形回帰モデル(線形基底関数モデル)
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
 
【解説】 一般逆行列
【解説】 一般逆行列【解説】 一般逆行列
【解説】 一般逆行列
 
TSPを山登り法と焼きなまし法で解く
TSPを山登り法と焼きなまし法で解くTSPを山登り法と焼きなまし法で解く
TSPを山登り法と焼きなまし法で解く
 
ピンホールカメラモデル
ピンホールカメラモデルピンホールカメラモデル
ピンホールカメラモデル
 
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
 
【ECCV 2018】Implicit 3D Orientation Learning for 6D Object Detection from RGB ...
【ECCV 2018】Implicit 3D Orientation Learning for 6D Object Detection from RGB ...【ECCV 2018】Implicit 3D Orientation Learning for 6D Object Detection from RGB ...
【ECCV 2018】Implicit 3D Orientation Learning for 6D Object Detection from RGB ...
 
猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder
 
低ランク性および平滑性を用いたテンソル補完 (Tensor Completion based on Low-rank and Smooth Structu...
低ランク性および平滑性を用いたテンソル補完 (Tensor Completion based on Low-rank and Smooth Structu...低ランク性および平滑性を用いたテンソル補完 (Tensor Completion based on Low-rank and Smooth Structu...
低ランク性および平滑性を用いたテンソル補完 (Tensor Completion based on Low-rank and Smooth Structu...
 
MIRU2020長尾賞受賞論文解説:Attention Branch Networkの展開
MIRU2020長尾賞受賞論文解説:Attention Branch Networkの展開MIRU2020長尾賞受賞論文解説:Attention Branch Networkの展開
MIRU2020長尾賞受賞論文解説:Attention Branch Networkの展開
 
線形カルマンフィルタの導出
線形カルマンフィルタの導出線形カルマンフィルタの導出
線形カルマンフィルタの導出
 
ラスタ図形詰込み問題に対する局所探索法の特徴点抽出を用いた効率化
ラスタ図形詰込み問題に対する局所探索法の特徴点抽出を用いた効率化ラスタ図形詰込み問題に対する局所探索法の特徴点抽出を用いた効率化
ラスタ図形詰込み問題に対する局所探索法の特徴点抽出を用いた効率化
 
Semantic Segmentation Review
Semantic Segmentation ReviewSemantic Segmentation Review
Semantic Segmentation Review
 
信号処理・画像処理における凸最適化
信号処理・画像処理における凸最適化信号処理・画像処理における凸最適化
信号処理・画像処理における凸最適化
 
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部
 
ブラックボックス最適化とその応用
ブラックボックス最適化とその応用ブラックボックス最適化とその応用
ブラックボックス最適化とその応用
 

Semelhante a Matlab演習

K010 appstat201201
K010 appstat201201K010 appstat201201
K010 appstat201201
t2tarumi
 
Android + Runtime Environment
Android + Runtime EnvironmentAndroid + Runtime Environment
Android + Runtime Environment
三七男 山本
 
Or seminar2011final
Or seminar2011finalOr seminar2011final
Or seminar2011final
Mikio Kubo
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
Takeshi Komiya
 

Semelhante a Matlab演習 (20)

イチからはじめるLuarida-マイコン
イチからはじめるLuarida-マイコンイチからはじめるLuarida-マイコン
イチからはじめるLuarida-マイコン
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
Gurobi python
Gurobi pythonGurobi python
Gurobi python
 
第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016
 
K010 appstat201201
K010 appstat201201K010 appstat201201
K010 appstat201201
 
Android + Runtime Environment
Android + Runtime EnvironmentAndroid + Runtime Environment
Android + Runtime Environment
 
Or seminar2011final
Or seminar2011finalOr seminar2011final
Or seminar2011final
 
HiRoshimaR3_IntroR
HiRoshimaR3_IntroRHiRoshimaR3_IntroR
HiRoshimaR3_IntroR
 
HPC Phys-20201203
HPC Phys-20201203HPC Phys-20201203
HPC Phys-20201203
 
ゆるバグ
ゆるバグゆるバグ
ゆるバグ
 
Lisp講義1
Lisp講義1Lisp講義1
Lisp講義1
 
関数プログラミングことはじめ
関数プログラミングことはじめ関数プログラミングことはじめ
関数プログラミングことはじめ
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
 
[奈良県生駒市]中学校向け2030年へのインターンシップ: (1) AIとは何か?
[奈良県生駒市]中学校向け2030年へのインターンシップ: (1) AIとは何か?[奈良県生駒市]中学校向け2030年へのインターンシップ: (1) AIとは何か?
[奈良県生駒市]中学校向け2030年へのインターンシップ: (1) AIとは何か?
 
Spmv9forpublic
Spmv9forpublicSpmv9forpublic
Spmv9forpublic
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
 
自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -
自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -
自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -
 
Bluespec @waseda(PDF)
Bluespec @waseda(PDF)Bluespec @waseda(PDF)
Bluespec @waseda(PDF)
 
㉑CSSでアニメーション!その2
㉑CSSでアニメーション!その2㉑CSSでアニメーション!その2
㉑CSSでアニメーション!その2
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 

Mais de noname409

ディジタル信号処理 課題解説 その8
ディジタル信号処理 課題解説 その8ディジタル信号処理 課題解説 その8
ディジタル信号処理 課題解説 その8
noname409
 
ディジタル信号処理 課題解説 その9
ディジタル信号処理 課題解説 その9ディジタル信号処理 課題解説 その9
ディジタル信号処理 課題解説 その9
noname409
 
ディジタル信号処理 課題解説 その6
ディジタル信号処理 課題解説 その6ディジタル信号処理 課題解説 その6
ディジタル信号処理 課題解説 その6
noname409
 
ディジタル信号処理 課題解説 その7
ディジタル信号処理 課題解説 その7ディジタル信号処理 課題解説 その7
ディジタル信号処理 課題解説 その7
noname409
 
ディジタル信号処理 課題解説 その5
ディジタル信号処理 課題解説 その5ディジタル信号処理 課題解説 その5
ディジタル信号処理 課題解説 その5
noname409
 
ディジタル信号処理 課題解説 その4
ディジタル信号処理 課題解説 その4ディジタル信号処理 課題解説 その4
ディジタル信号処理 課題解説 その4
noname409
 
ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3
noname409
 
ディジタル信号処理の課題解説 その2
ディジタル信号処理の課題解説 その2ディジタル信号処理の課題解説 その2
ディジタル信号処理の課題解説 その2
noname409
 
ディジタル信号処理の課題解説
ディジタル信号処理の課題解説ディジタル信号処理の課題解説
ディジタル信号処理の課題解説
noname409
 

Mais de noname409 (9)

ディジタル信号処理 課題解説 その8
ディジタル信号処理 課題解説 その8ディジタル信号処理 課題解説 その8
ディジタル信号処理 課題解説 その8
 
ディジタル信号処理 課題解説 その9
ディジタル信号処理 課題解説 その9ディジタル信号処理 課題解説 その9
ディジタル信号処理 課題解説 その9
 
ディジタル信号処理 課題解説 その6
ディジタル信号処理 課題解説 その6ディジタル信号処理 課題解説 その6
ディジタル信号処理 課題解説 その6
 
ディジタル信号処理 課題解説 その7
ディジタル信号処理 課題解説 その7ディジタル信号処理 課題解説 その7
ディジタル信号処理 課題解説 その7
 
ディジタル信号処理 課題解説 その5
ディジタル信号処理 課題解説 その5ディジタル信号処理 課題解説 その5
ディジタル信号処理 課題解説 その5
 
ディジタル信号処理 課題解説 その4
ディジタル信号処理 課題解説 その4ディジタル信号処理 課題解説 その4
ディジタル信号処理 課題解説 その4
 
ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3ディジタル信号処理の課題解説 その3
ディジタル信号処理の課題解説 その3
 
ディジタル信号処理の課題解説 その2
ディジタル信号処理の課題解説 その2ディジタル信号処理の課題解説 その2
ディジタル信号処理の課題解説 その2
 
ディジタル信号処理の課題解説
ディジタル信号処理の課題解説ディジタル信号処理の課題解説
ディジタル信号処理の課題解説
 

Último

TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
YukiTerazawa
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
koheioishi1
 

Último (8)

世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
 
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
 
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 

Matlab演習