(1)「ディジタル信号処理技術」玉井徳みち、長島厚、藤田泰弘、若井修造著 日経BP社
(2)「ディジタル信号処理の基礎」三上直樹著 CQ出版
(3)「C言語によるディジタル信号処理入門」三上直樹著 CQ出版
(4)「アナログ&ディジタルフィルタ入門」小野浩司著 日刊工業
(5)「フーリエの冒険」ヒッポファミリークラブ
上記のような1次ローパスフィルタ(CR回路)は
(1)
(2)
(3)
ここで、 (4)
とすると
(5)
このを伝達関数と呼ぶ。
入力を
に印加したら出力
を得るという意味となる。
いま周波数を強調するために(5)式は、
(6)
とおかれる。
「周波数領域の掛け算」は、「時間領域の畳み込み」なので、
(7)
ここで、
は入力
は出力
はフィルタ係数(インパルス応答)である。
基本的にアナログ領域では、時間領域の処理は構成した回路
(この場合は、R,C素子で構成された回路)が行うので
周波数特性を知っていれば良い。
ディジタルフィルタは時間領域の畳み込みによって表現できる。
は入力
は出力
はインパルス応答(フィルタ係数)
(8)
=
とすると、
=
畳込みについてでも説明したが
畳み込みとは、「現在の状態を過去の積み重ね」で表現するということ。
x[n] は現在~ x[n-1]は現在からひとつ前の過去~ x[n-2]は現在からふたつ前の過去~
h[0]は現在の予想~ h[1]はひとつ先の予想~ h[2]はふたつ先の予想~
なので
は、
(現在@x[n]) x (現在の予想@h[0]) = "現在" + (ひとつ前の過去@x[n-1]) x (ひとつ過去からのひとつ未来の未来予想@h[1]) = ひとつ過去から予想される"現在" + (ふたつ前の過去@x[n-2]) x (ふたつ過去からのふたつ未来の未来予想@h[2]) = ふたつ過去から予想される"現在"
いま、
h(0)=0.8 h(1)=0.15 h(2)=0.05
とすると
y[n]=0.8*x[n] + 0.15*x[n-1] + 0.05*x[n-2]
サンプリング周期 1 [ms] サンプリング周波数 1 [kHz] データ総数 5001 基本周波数 0.2[Hz]
インパルス信号とは、
(9)
のような信号である。ディジタル信号では、
(10)
となる。
また
とかくとk遅れたインパルス信号を作ることができる。
上図はさまざまなインパルス信号
インパルス応答とは、
インパルスをフィルタへ入力したとき得られる出力信号
(11)
この がインパルス応答である。
ここで
インパルス信号が
で
のときの(1)を求める。
ゆえに
(12)
つまり、「インパルス応答とフィルタ係数は同じ」である。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % インパルス応答 % programming by embedded.samurai %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% echo off clear all close all %サンプリング周期 1[ms] dx=1e-3; dfs=1/dx % xの範囲は 0から0.001単位で5まで x=[-5:1:5]; %データ総数 [gyo N]=size(x) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% subplot(3,1,1); % インパルス信号を作る y1=[zeros(5,1);1;zeros(N-6,1)] stem(x,y1,'r-','linewidth',5); % 文字の大きさ、線の太さの設定 set(gca,'LineWidth',2,..., 'FontSize',15); xlabel('Time[s]','Fontsize',20,'FontName','Century'); ylabel('Amplitude','Fontsize',20,'FontName','Century'); title('\delta(n)','Fontsize',20,'FontName','Century'); % x-y範囲 axis([-5 5 -Inf Inf]); grid on hold on; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% subplot(3,1,2); % インパルス信号を作る y1=[zeros(8,1);1;zeros(N-9,1)] stem(x,y1,'r-','linewidth',5); % 文字の大きさ、線の太さの設定 set(gca,'LineWidth',2,..., 'FontSize',15); xlabel('Time[s]','Fontsize',20,'FontName','Century'); ylabel('Amplitude','Fontsize',20,'FontName','Century'); title('\delta(n-3)','Fontsize',20,'FontName','Century'); % x-y範囲 axis([-5 5 -Inf Inf]); grid on hold on; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% subplot(3,1,3); % インパルス信号を作る y1=[1;zeros(N-1,1)] stem(x,y1,'r-','linewidth',5); % 文字の大きさ、線の太さの設定 set(gca,'LineWidth',2,..., 'FontSize',15); xlabel('Time[s]','Fontsize',20,'FontName','Century'); ylabel('Amplitude','Fontsize',20,'FontName','Century'); title('\delta(n+5)','Fontsize',20,'FontName','Century'); % x-y範囲 axis([-5 5 -Inf Inf]); grid on hold on; print -djpeg impulsu_outou_kakei.jpg