32
課題解説(その3)

ディジタル信号処理の課題解説 その3

Embed Size (px)

Citation preview

課題解説(その3)

離散フーリエ変換

• 課題22 :離散フーリエ変換の基本定理Ⅱの証明

• 課題23 :離散フーリエ変換の行列表示

• 課題24 :画像データの格納方法

• 課題25 :フーリエ変換の手計算

• 課題26 :線形定理における信号の系列長

• 課題27 :離散畳み込みの証明

• 課題28 :離散畳み込みの手計算

課題22

任意の正定数Nに対して

𝑇 =𝑇𝑝

𝑁, 𝜔𝑠 =

2𝜋

𝑇, Ω =

𝜔𝑠

𝑁=

2𝜋

𝑁𝑇とすると

𝐹 𝑘Ω = 𝑇 𝑓 (𝑛𝑇)𝑊𝑁𝑘𝑛𝑁−1

𝑛=0 を証明しなさい.

ただし𝑊𝑁 = 𝑒−𝑗2𝜋

𝑁を表す.

課題22

• そもそも離散フーリエ変換の基本定理Ⅰ・Ⅱとは…

• 周期関数化されたf(t)とF(ω)の関係を示している

• 周期信号化すると離散フーリエ変換を有限で表現できる

基本定理Ⅰ

基本定理Ⅱ

切り出す

切り出す

課題22

基本定理Ⅰと証明方法はほぼ同じ

m

m )()( ss を使うと、

)(*)()(~

sFF 関数のフーリエ級数展開

教科書p20の式(2.14)

m

m

T

mTtmTTf

mTttTf

ttf

tfF

s

s

)()(

)()(

)()(2

)}({)(2)}(~

{

1

-1-1 FF

m

jmT

meF )(~

m

m mTtF )()}(~

{ 1-F

両辺の

逆フーリエ変換

j

tj

et

e

)(

)(2 00 より

※課題5参照

m

jmT

m

jmT emTfTemTTfF )()()(~

課題22

m

jmTemTfTF )()(~

sT 2

):,10(,    rNnrNnmk 整数 を代入すると

kn

N

N

n

N

n r

N

knj

N

n r

krN

nj

N

n r

TkrNnj

WnTfT

eTrNnfT

eTrNnfT

eTrNnfTF

1

0

1

0

2

1

0

)(2

1

0

)(

)(~

))((

))((

))(()(~

NT

NT s 2

Nj

N

r

p

eW

rTnTfnTf

2

)()(~

【離散フーリエ変換の基本定理Ⅱ 証明終わり】

課題23

離散フーリエ変換の行列式はどのような行列であるか?

𝑋 0𝑋 1

𝑋 2⋮

𝑋 𝑘⋮

𝑋 𝑁 − 1

=

𝑊𝑁0 . . 𝑊𝑁

0 𝑁−1

𝑊𝑁0 . . 𝑊𝑁

1 𝑁−1

𝑊𝑁0 . . 𝑊𝑁

2 𝑁−1

. . . .

. 𝑊𝑁𝑘𝑛 . .

. . . .

𝑊𝑁0 . . 𝑊𝑁

𝑁−1 𝑁−1

𝑥 0𝑥 1

𝑥 2⋮

𝑥 𝑘⋮

𝑥 𝑁 − 1

ただし𝑊𝑁 = 𝑒−𝑗2𝜋

𝑁 Wとする

課題23

• i行j列目の要素とj行i列目の要素は𝑊𝑁𝑖𝑗= 𝑊𝑁

𝑗𝑖よりこの行列は対

称行列である

• また任意の二つの行について

𝑊𝑁𝑘𝑛1𝑊𝑁

𝑘𝑛2N−1𝑘=0 = 𝑊𝑁

𝑘(𝑛1+𝑛2)N−1𝑘=0 = 𝑒−𝑗

2𝜋

𝑁𝑘(𝑛1+𝑛2)𝑁−1

𝑘=0

• 𝑛1 = −𝑛2のとき

𝑒−𝑗2𝜋

𝑁𝑘(𝑛1+𝑛2)𝑁−1

𝑘=0 = 𝑁

• 𝑛1 ≠ −𝑛2のとき

𝑒−𝑗2𝜋

𝑁𝑘(𝑛1+𝑛2)𝑁−1

𝑘=0

=1−𝑒

−𝑗2𝜋 𝑛1+𝑛2 𝑁

𝑁

1−𝑒−𝑗

2𝜋 𝑛1+𝑛2𝑁

(等比数列の和)

課題24

𝑒−𝑗2𝜋 𝑛1+𝑛2 𝑁

𝑁 = 𝑒−𝑗2𝜋 𝑛1+𝑛2 = 1であるから

𝑒−𝑗2𝜋

𝑁𝑘(𝑛1+𝑛2)𝑁−1

𝑘=0 = 0 よって

𝑊𝑁𝑘𝑛1𝑊𝑁

𝑘𝑛2N−1𝑘=0 =

𝑁 𝑛1 + 𝑛2 ≡ 0(𝑚𝑜𝑑 𝑁)0 𝑒𝑙𝑠𝑒

よってこの行列と対称行列の積をとると対角成分がN,他が0となる

つまり 𝑊𝑇𝑊 =

𝑁 0 … 00 𝑁 ⋱ ⋮⋮ ⋱ ⋱ 00 … 0 𝑁

→Wを1/ 𝑁倍すればユニタリー行列になる

課題24

大きさが横N画素、縦 M画素の画像をラスター走査で画素を走査しながら処理を行うプログラムを考える。

ただし、

・1画素のデータは1バイトで記憶される

・N、Mは非常に大きい

・使用するコンピュータは、ページサイズがKバイトの 仮想記憶メモリ方式を用いている

とする。

この時、

CおよびFORTRANでプログラムを書く場合、画像を 表す配列はどのように定義すれば計算効率の低下を生じさせないか考えなさい。

課題24 言語によって行列の格納方法が異なる

(矢印の方向)

C言語

x[0][0] x[0][1] x[0][2]

x[1][0] x[1][1] x[1][2]

x[2][0] x[2][1] x[2][2]

FORTRAN

x(1,1) x(1,2) x(1,3)

x(2,1) x(2,2) x(2,3)

x(3,1) x(3,2) x(3,3)

この格納方法の順に読み込む方が効率が良い

良い例

悪い例

課題24

MATLABで実験してみた

巨大な画像の画素をfor文で回しR,G,Bの成分を入れ替える

縦走査と横走査で処理時間を計測する

課題24

10240x7680の画像で実験した結果

横走査→178.927 s

縦走査→172.965 s

(思ったより変わらなかったが…)MATLABはFORTRAN型なので縦走査の方が計算時間が速くなるのは妥当である.

課題25

以下の画像のフーリエ変換を計算し,そのパワースペクトルを求めなさい.なお,計算は手計算で行うこととし, 白画素,黒画素の値はそれぞれ1,0とし,画像の大きさは、2*2、4*4の2つの場合を 求めなさい.

課題25 2*2の場合

2次元離散フーリエ変換の行列式は

𝑋 0 𝑋[2]

𝑋 1 𝑋[3]=

𝑊20 𝑊2

0

𝑊20 𝑊2

1

𝑥 0 𝑥[2]

𝑥 1 𝑥[3]

𝑊20 𝑊2

0

𝑊20 𝑊2

1

=1 1

1 𝑒−𝑗2𝜋2

𝑥 0 𝑥[2]

𝑥 1 𝑥[3]

1 1

1 𝑒−𝑗2𝜋2

=1 11 −1

𝑥 0 𝑥[2]

𝑥 1 𝑥[3]1 11 −1

xは(a)-(e)で

を代入すればよい(あとは行列の代入だけなので省略)

1 1

1 1

0 0

0 0

0 0

1 1

0 1

0 1

0 1

1 0

課題25

4*4の場合

離散フーリエ変換の行列式は 𝑋 0 𝑋 4 𝑋[8] 𝑋[12]

𝑋 1 𝑋 5 𝑋[9] 𝑋[13]𝑋[2] 𝑋[6] 𝑋[10] 𝑋[14]

𝑋[3] 𝑋[7] 𝑋[11] 𝑋[15]

=

𝑊40 𝑊4

0 𝑊40 𝑊4

0

𝑊40 𝑊4

1 𝑊42 𝑊4

3

𝑊40 𝑊4

2 𝑊44 𝑊4

6

𝑊40 𝑊4

3 𝑊46 𝑊4

9

𝑥 0 𝑥 4 𝑥[8] 𝑥[12]

𝑥 1 𝑥 5 𝑥[9] 𝑥[13]𝑥[2] 𝑥[6] 𝑥[10] 𝑥[14]

𝑥[3] 𝑥[7] 𝑥[11] 𝑥[15]

𝑊40 𝑊4

0 𝑊40 𝑊4

0

𝑊40 𝑊4

1 𝑊42 𝑊4

3

𝑊40 𝑊4

2 𝑊44 𝑊4

6

𝑊40 𝑊4

3 𝑊46 𝑊4

9

=

1 1 1 11 −𝑗 −1 𝑗1 −1 1 −11 𝑗 −1 −𝑗

𝑥 0 𝑥 4 𝑥[8] 𝑥[12]

𝑥 1 𝑥 5 𝑥[9] 𝑥[13]𝑥[2] 𝑥[6] 𝑥[10] 𝑥[14]

𝑥[3] 𝑥[7] 𝑥[11] 𝑥[15]

1 1 1 11 −𝑗 −1 𝑗1 −1 1 −11 𝑗 −1 −𝑗

0 0 0 0

0 0 0 0

1 1 1 1

1 1 1 1 代入

課題26

解答…

2x2

4x4

課題26

離散フーリエ変換の線形定理において

max 𝑁1, 𝑁2 = 𝑁1 = 𝑁としたとき,𝑥2 𝑛 𝑁2 ≤ 𝑛 ≤ 𝑁 − 1 および𝑋2 𝑘 𝑁2 ≤ 𝑘 ≤ 𝑁 − 1 の値はどうするのか考えなさい.

課題26

長さが異なれば足し合わせることができないので短い方に0を補間する →パワースペクトルの波形が変わる

実際,短い方に値をどのように補間しても線形性を保つことができないので

x1 n :長さN1 ↔ 𝐹1[𝑘]

x2 n :長さN2 ↔ 𝐹2[𝑘](𝑁2 < 𝑁1)

において𝑥2 𝑛 に0を𝑁2 − 𝑁1個だけ追加した𝑥2’ 𝑛 を考える

この時𝑦 𝑛 = 𝑎𝑥1 𝑛 + 𝑏𝑥2’[𝑛]とすると

Y k = aX1 k + bX2′[k]というのが正しい表記である

課題27

𝑥𝑘 𝑛 = 𝑥 𝑛 (𝑘𝐿 ≤ 𝑘 + 1 𝐿 − 1, 𝑘 > 0)

0 (その他)

このときx[n]とy[n]の離散畳み込みw[n]は

𝑤 𝑛 = 𝑥 𝑛 ∗ 𝑦 𝑛 = 𝑥𝑘 𝑛 ∗ 𝑦[𝑛]∞𝑘=0 であることを証明しな

さい

課題27

𝑤 𝑛 = 𝑥 𝑛 ∗ 𝑦 𝑛

離散畳み込みの式より

= 𝑥 𝑙 𝑦[𝑛 − 𝑙]∞𝑘=0

x[n]を長さLの部分系列の和で表現して

= 𝑥𝑘 𝑙∞𝑘=0 𝑦[𝑛 − 𝑙]∞

𝑙=−∞

線形性より

= 𝑥𝑘 𝑙∞𝑘=0 𝑦[𝑛 − 𝑙]∞

𝑙=−∞

= 𝑥𝑘 𝑛 ∗ 𝑦[𝑛]∞𝑘=0

課題27

• 課題9の解釈1を思い出してみよう….

これはf(t)を長さ1に分割したものといえる

0 0 0 0 0 3 3 3 3 3 3

0 0 1 1 1 0 0 0

0だけ動かしたとき

f(t)

g(t)

f(0)

…0 0 3 3 3 0 0 0…

0 0 0 0 0 3 3 3 3 3 3

0 0 1 1 1 0 0 0

1だけ動かしたとき

f(t)

g(t)

f(1)

…0 0 3 3 3 0 0 0… + +… …+

すべて足し合わせると となる …0 0 3 6 9 9 9 9…

× ×

課題28

信号:𝑥 𝑛 = … , 0, 𝑥 −1 = 0, 𝑥 0 = 1, 𝑥 1 = 1,1,…

に対して,

フィルタ関数: 𝑦1 𝑛 = {… , 0, 𝑦 −1 = 1/3, 𝑥 0 = 1/3, 𝑥 1 = 1/3,0,… } 𝑦2 𝑛 = {… , 0, 𝑦 0 = 1/3, 𝑥 1 = 1/3, 𝑥 2 = 1/3,0,… }

を用いた離散畳み込みを計算し,両者の結果の関係がどのようになるかを考察しなさい.

課題28

x[n] y[n]

0 1 2 … … -1 0 1 … …

x[n]とy[n]の離散畳み込みz[n]を計算する 𝑧 𝑛 = 𝑥 𝑛 ∗ 𝑦[𝑛]

課題28

x[n]

y[n]

0 1 2 … …

-1 0 1 … …

1

1/3

𝑧 0 = 0 ×1

3+ 1 ×

1

3+ 1 ×

1

3=

2

3

z[n]

2/3

0 1 2 … …

y[n]をdだけ動かした時𝑧 𝑑 = 𝑥 𝑛 𝑦[𝑛 − 𝑑]𝑛=∞𝑛=−∞

d=0の時

課題28

x[n]

y[n]

0 1 2 … …

-1 0 1 … …

1

1/3

𝑧 1 = 1 ×1

3+ 1 ×

1

3+ 1 ×

1

3= 1

z[n]

1

0 1 2 … …

y[n]をdだけ動かした時𝑧 𝑑 = 𝑥 𝑛 𝑦[𝑛 − 𝑑]𝑛=∞𝑛=−∞

d=0の時

課題28

x[n]

y[n]

0 1 2 … …

-1 0 1 … …

1

1/3

𝑧 1 = 1 ×1

3+ 1 ×

1

3+ 1 ×

1

3= 1

z[n]

1

0 1 2 … …

y[n]をdだけ動かした時𝑧 𝑑 = 𝑥 𝑛 𝑦[𝑛 − 𝑑]𝑛=∞𝑛=−∞

d=0の時

課題28

x[n]

y[n]

0 1 2 … …

-1 0 1 … …

1

1/3

z[n]

1

0 1 2 … …

x[n]にy[n]を畳み込むことによって0と1の境界部分が滑らかに変化するようになる

課題28

x[n]

y[n]

0 1 2 … …

-1 0 1 … …

1

1/3

z[n]

1

-1 0 1 … …

𝑦2[𝑛]の場合も同様に計算して図のようになる.

課題28

∗ 1

9

1

9

1

9

1

9

1

9

1

9

1

9

1

9

1

9

=

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

画像のフィルタリング

課題28

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); %平滑化した画像の表示

課題28

−1 -1 −1

−1 9 −1

−1 −1 −1

1 0 −1

2 0 −2

1 0 −1

1

9

1

9

1

9

1

9

1

9

1

9

1

9

1

9

1

9

平滑化フィルタ

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

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