Transcript PPT版
デジタル信号処理②
2002.5.21
前回の内容
1. デジタル信号処理の概論
•
目的:周波数分析、波形合成、デジタルフィルタ、相
関の調査
2. サンプリング定理
•
AD/DA変換の際、連続信号の持つ最大周波数の2
倍以上でサンプリングを行う必要がある
3. フーリエ級数展開
•
•
•
三角関数の直交性
フーリエ級数展開
周波数分析とその応用例の紹介
前回の内容(復習)
• 周期 2 の周期関数f(x)は以下のように
フーリエ級数展開が可能
f ( x 2) f ( x) 周期関数
a0
f ( x) an cos(nx) bn sin(nx)
2 n1
1 2
an f ( x) cos(nx)dx
0
1 2
bn f ( x) sin(nx)dx
0
今回の内容
1. フーリエ級数(つづき)
•
•
フーリエ級数展開により得られる情報
パワースペクトルの物理的意味(パーシバルの関係式)
2. フーリエ級数の拡張
1. 拡張①:複素フーリエ級数
•
実フーリエ級数から複素フーリエ級数
2. 拡張②:フーリエ変換
•
•
フーリエ変換・フーリエ逆変換
離散フーリエ変換 (discrete Fourier transform:DFT)
3. FFTを使った実際のフーリエ変換
1. FFT処理の留意点
2. Matlab(数値演算処理ソフト)
計測されたデータから必要な情報を取り出す(フィルタリング)
ができるようになる。
フーリエ級数⑨
フーリエ級数展開によって得られる情報
a0
f ( x) an cos(nx) bn sin(nx)
2 n1
a0
an2 bn2 cos(nx n )
2 n1
bn
n tan 振幅情報
位相情報
an
1 2
an 0 f ( x) cos(nx)dx
bn 1 2 f ( x) sin(nx)dx
0
1
フーリエ級数展開により、
1)振幅の情報 an2 bn2
2)位相の情報 n
を取り出すことが可能
an2 bn2 「振幅スペクトル」
と呼ばれている。
an2 bn2 「パワースペクトル」
フーリエ級数⑩
f (t ) 0.3sin(2 1000 t )
0.4 sin(2 2000 t )
0.2 sin(2 3000 t )
noise
FFT
振幅スペクトル
振幅スペクトルの物理的意味
2kHz
0.4
0.3
1kHz
0.2
an2 bn2
振幅スペクトルを計算
周波数[Hz]
3kHz
フーリエ級数⑪
パワースペクトルの物理的意味
フーリエ級数展開により電圧v[V]が
以下のように表現可能。
1Ω
v
a0
v(t ) an cos(nt) bn sin(nt)
2 n1
1 2
a
0 0 v(t )dt
1 2
a
v(t ) cos(nt)dt, (n 1,2,3,)
n
0
1 2
b
n 0 v(t ) sin(nt)dt, (n 1,2,3,)
このとき、
消費される平均電力P[W]を計算する。
1 2
1 2 2
P i(t ) v(t )dt v (t )dt
2 0
2 0
フーリエ級数⑫
パワースペクトルの物理的意味
a0
v (t ) an cos(nt) bn sin(nt)v(t ) より、
2 n1
2
a
2 2
0
a0 2
0
v (t )dt v(t )dt
2 0
n
n
2
2
a
v
(
t
)
cos(
nt
)
dt
b
v
(
t
)
sin(
nt
)
dt
n 0
n 0
n1
a
b
a02 2 2
an bn
2 n1
パワースペクトルの
積分が電力に相当
1 2 2
1 a02 2 2
v (t )dt an bn
平均電力 P
2 0
2 2 n1
フーリエ級数⑬
f (t ) 0.3sin(2 1000 t )
0.4 sin(2 2000 t )
0.2 sin(2 3000 t )
noise
FFT
パワースペクトル
パワースペクトルの物理的意味
an2 bn2
パワースペクトルを計算
2kHz
面積が
消費電力
に比例する量
1kHz
3kHz
周波数[Hz]
フーリエ級数⑭
振幅スペクトル
パワースペクトル
振幅スペクトルとパワースペクトルの比較
周波数[Hz]
周波数[Hz]
パワースペクトルでは、振幅スペクトルよりも周波数分布
が強調される。
フーリエ級数⑮
パーシバル(Parseval)の等式
パーシバル(Parseval)の等式
a
2
2
2
f
(
x
)
dx
a
b
n
n
2 n1
2
0
さきほど、電力とパワースペクトルの関係のところで、導いた
上の式は、パーシバルの等式と呼ばれている。
複素フーリエ級数①
• フーリエ級数を、複素関数を使って書き表すと、
式の表現や変形が簡単になることが多い。
• ラプラス変換・Z変換への拡張の基礎
a
f ( x) 0 an cos(nx) bn sin(nx)
2 n1
1 2
an f ( x) cos(nx)dx
0
1 2
bn f ( x) sin(nx)dx
0
f ( x)
jnx
c
e
n
n
j
1
1
cn f ( x)e jnxdx
2
f ( x)
( jn) c e
n
jnx
n
例えば、「微分」は、「jnをかける」
という簡単な操作に置き変わる。
複素フーリエ級数②
e jx cos x j sin x (オイラーの公式)
e jnx e jnx
cos nx
(ド・モアブルの公式)
2
e jnx e jnx
sin nx
2j
ド・モアブルの公式をフーリエ級数の式に代入する
a0
f ( x) an cos nx bn sin nx
2 n1
a0 1
1
jnx
an jbn e an jbn e jnx
2 n1 2
2
複素フーリエ級数③
a0
an jbn
an jbn
c0 , cn
, cn
, (n 1,2,3,, )
2
2
2
とおくと、
n1
n1
f ( x) c0 cne jnx cne jnx
一方、
jnx
c
e
n
n
と変形できる。
an jbn 1 2
cn
f ( x)cos nx j sin nxdx
2
2 0
1 2
1
jnx
f ( x)e dx f ( x)e jnxdx
と変形できる。
2 0
2
複素フーリエ級数④
ーまとめー
フーリエ級数
フーリエ級数展開
a
f ( x) 0 an cos(nx) bn sin(nx)
2 n1
1 2
an f ( x) cos(nx)dx
bn
0
1
2
0
複素フーリエ級数
複素フーリエ級数展開
f ( x)
cn :「複素フーリエ係数」
「スペクトル」
と呼ばれる
jnx
c
e
n
n
1
cn f ( x)e jnxdx
2
f ( x) sin(nx)dx
an , bn :「実フーリエ係数」
cn
を求めることを、
「関数f(x)のスペクトルを調べる」
「関数f(x)をスペクトル分解する」
(光のスペクトル分光の類似から)
フーリエ変換①
扱える関数を周期関数から、非周期関数へ拡張する
(周期Tが∞であると考える)
下の複素フーリエ級数の式を
f ( x)
jnx
c
e
n
n
1
cn f ( y)e jnydy
2
1
f ( x) f ( y)e jnydye jnx
n 2
周期を変数Tを使って表現する。
f(x)を周期Tの関数f(t)と考える。
2
x t で変数をtに変える。
T
2 n
2 n
j
u
j
t
1 T2
T
T
f (t ) T f (u)e
due
n T
2
1
f
T
とおくと
n
f f n
T
T
j 2ft
j 2fu
2
f (t ) T f (u)e
due f
n 2
となる。
フーリエ変換②
T2
j 2ft
j 2fu
f (t ) T f (u)e
due f
n 2
非周期関数(Tが∞)を考えるために、f(x)の極限をとる。
T f 0
T2
j 2ft
j 2 fu
f (t ) lim T f (u)e
due f
f 0
n 2
f (u)e j 2fu due j 2ft df
周波数fの関数F(f)とおくと
フーリエ変換③
フーリエ変換とフーリエ逆変換
F ( f ) f (t )e
j 2 ft
f (t ) F ( f )e
j 2 ft
F () f (t )e
jt
dt
df
dt
フーリエ変換
(Fourier Transform)
フーリエ逆変換
(Fourier Inverse Transform)
フーリエ変換
(Fourier Transform)
1
jt
f (t ) F ()e d フーリエ逆変換
(Fourier Inverse Transform)
2
離散フーリエ変換①
フーリエ変換の式を離散化
F ( f ) f (t )e
j 2 ft
f (t ) F ( f )e
j 2 ft
dt
df
フーリエ変換
(Fourier Transform)
フーリエ逆変換
(Fourier Inverse Transform)
1)実際に使う場合、無限の長さを持った時系列データを使う
ことはない
2)サンプリングされた時系列データは、連続信号ではなく、
離散化された信号
実用上は、
コンピュータで処理できる離散フーリエ変換を用いる。
離散フーリエ変換②
離散フーリエ変換と離散フーリエ逆変換
ある時系列データf(k) (k=0,…,N-1)があったとき
N 1
F (n) f (k )e
k 0
j
2 nk
N
離散フーリエ変換
(Discrete Fourier Transform)
2nk
2nk
f (k )cos
j sin
N
k 0
N
N 1
2 nk
j
1 N 1
f (k ) F (n)e N 離散フーリエ逆変換
(Discrete Fourier Inverse Transform)
N n 0
2nk
1 N 1
2nk
F (n)cos
j sin
N n 0
N
N
離散フーリエ変換③
離散フーリエ変換の出力の解釈
計測時間・サンプリング周波数・計測点とフーリエ係数との関係
N 1
F (n) f (k )e
j
2 nk
N
k 0
2nk
2nk
f (k )cos
j sin
N
k 0
N
N 1
f(k) (k=0,1,2,….,N-1)が
Fs: サンプリング周波数
T: 計測時間
により得られた時系列データの時、
時間変数や周波数変数を含んで
いないため、
時間、周波数の解釈は、計測条件
から行う必要がある。
1
f
とおくと、F(n)は、周波数 f n の成分の強さを
T
示している。
離散フーリエ変換④
スペクトルの計算法
離散フーリエ変換の結果からどのようにスペクトルを計算するか?
N 1
F (n) f (k )e
j
2 nk
N
k 0
2nk
2nk
f (k )cos
j sin
N
k 0
N
N 1
N 1
F ( N n) f (k )e
j
より、
2 ( N n ) k
N
k 0
2nk
2nk
f (k )cos 2k
j sin 2k
N
N
k 0
F * (n)
*
N 1
F ( N n) F (n)
離散フーリエ変換⑤
スペクトルの計算法
F ( N n) F * (n) より
F ( N 1) F * (1)
F ( N 2) F * (2)
N
* N
F ( 1) F ( 1)
2
2
F(n)は、N/2で折り返して、大きさが同じ
であることが分かる。
F(N/2)は、サンプリング周波数の1/2の
周波数成分を示すため、F(0)~F(N/2)
までをスペクトルの計算のために使用
する。
具体的に、どのように計算すると
「振幅スペクトル」が計算できるか
導出してみる。
離散フーリエ変換⑥
スペクトルの計算
2nk
j
1 N 1
N
f (k ) Re F (n)e
N n 0
N
N
1
1
2
nk
2nk
2
2
j
j
1
N
N
Re F (0) F ( ) cosk F (n)e
F ( N n)e N
N
2
n1
n1
N
N
1
1
2nk
2nk
2
2
j
j
1
N
k
*
N
Re F (0) F ( )(1) F (n)e
F (n)e N
N
2
n1
n1
F (n) A(n) jB(n)
とすると、
N / 21
F (0) F ( N / 2)
2nk 2 B(n)
2nk
2 A(n)
k
(1)
cos(
)
sin(
)
N
N
N
N
N
N
n1
離散フーリエ変換⑦
スペクトルの計算
N / 21
F (0) F ( N / 2)
2nk 2 B(n)
2nk
2 A(n)
k
f ( x)
(1)
cos(
)
sin(
)
N
N
N
N
N
N
n1
f(x)が実数であるときは、半分のフーリエ係数から復元可能
n=0,N/2以外では、
振幅スペクトル=
2
2
2
2
A (n) B (n) F (n)
N
N
FFTを使った実際のフーリエ変換①
データ数が2のべき乗であるとき、高速に離散フーリエ変換
を行うアルゴリズム「高速フーリエ変換」(Fast Fourier Transform: FFT)
が知られている。多くの数値処理ソフトウェア(Matlabなど)で提供
されている。
実際に、Mablabを使って、
1)適当な波形をサンプリングし、
2)振幅スペクトルを計算する
3)簡単なフィルタ処理を行ってみる
不要な箇所のフーリエ係数を0にして、
逆フーリエ変換する。
FFTを使った実際のフーリエ変換②
スペクトルの計算
サンプリング周波数 8192[Hz]
1[s]計測(8192点計測)
f (t ) 0.3sin(2 1000 t )
0.4 sin(2 2000 t )
0.2 sin(2 3000 t )
の信号を計測する。
FFTをかけ振幅スペクトルを計算してみる。
FFTを使った実際のフーリエ変換③
Matlabプログラム例
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Ts=5;
% 5秒
Fs=8192;
% サンプリング周波数 8192[Hz]
t=linspace(0,Ts,Ts*Fs); %サンプリングする時間のデータ 0[s]~5[s]
hz1=1000;
音を聞くために5[s]分のデータ
hz2=2000;
hz3=3000;
を作成するが、FFTに使用する
y1=0.3*sin(2 *pi *hz1*t); % 1k[Hz]
のは、1[s](8192点)であることに
y2=0.4*sin(2 *pi hz2*t); % 2k[Hz]
注意。
y3=0.2*sin(2 *pi *hz3*t); % 3k[Hz]
all=y1+y2+y3;
%合成波形を作る。
sound(all,Fs);
% 合成波形を鳴らす
f 1[Hz]
f=linspace(0,Fs,8192);
%グラフを書くときに使う周波数のデータ
fft_y=fft(all,8192);
% 最初から8192点目までのデータをFFTにかける
plot(f,abs(fft_y)/4096,'LineWidth',2.0);axis([0 4096 0 1.0]);
振幅スペクトル
周波数[Hz]
FFTを使った実際のフーリエ変換④
Matlabプログラム例
filterを定義する。
•
•
•
•
•
•
hz_l = floor(500/Fs*8192);
hz_h = floor(1500/Fs*8192);
filter=zeros(1,8192);
filter(hz_l:hz_h);
filter(hz_l:hz_h)=1;
plot(f,filter,'LineWidth',2.0);axis([0 4000 0 2.0]);
周波数 [Hz]
この部分だけを残す
FFTを使った実際のフーリエ変換⑤
Matlabプログラム例
不要なフーリエ係数を0にする。
•
•
fft_y2=fft_y.*filter;
plot(f,abs(fft_y2)/4096,'LineWidth',2.0);axis([0 4000 0 2.0]);
1k[Hz]の部分だけが
残る。2k[Hz],3k[Hz]の
周波数成分は、0になる。
FFTを使った実際のフーリエ変換⑥
Matlabプログラム例
逆フーリエ変換する
• fft_y2=fft_y.*filter;
• plot(f,abs(fft_y2)/4096,'LineWidth',2.0);axis([0 4000 0 2.0]);
• y4=real(ifft(fft_y2));
• sound(y4,Fs);
今回の内容
1. フーリエ級数(つづき)
•
•
フーリエ級数展開により得られる情報
パワースペクトルの物理的意味(パーシバルの関係式)
2. フーリエ級数の拡張
1. 拡張①:複素フーリエ級数
•
実フーリエ級数から複素フーリエ級数
2. 拡張②:フーリエ変換
•
•
フーリエ変換・フーリエ逆変換
離散フーリエ変換 (discrete Fourier transform:DFT)
3. FFTを使った実際のフーリエ変換
1. Matlab(数値演算処理ソフト)を使ったノイズ除去
次回の内容
1. 線形システム
2. Z変換, ラプラス変換
3. デジタルフィルタ