リファレンスとなる理想アナログフィルタの伝達関数Gを定義
→理想アナログフィルタを逆フーリエ変換して理想アナログフィルタの時系列信号g(t)が求まる
→欲しいディジタルフィルタHのインパルス応答hkが求まる(hk=T•g(kT)の関係式より)
→hkとZ変換の関係式より、ディジタルフィルタHの伝達関数H(z)が求まる
→伝達関数H(z)にz=exp(jωT)=exp(jω)(∵T=1)を代入し、周波数応答関数H(e^(jω))を求める
→周波数応答関数H(e^(jω))の絶対値を取ることで(Matlabのabs()関数)、振幅特性が得られる。
clear; close all; wc = pi/2; T = 1; N=61; l = (N-1)/2; h1 = []; h2 = []; h3 = []; h4 = []; w0 = pi/8; ks = 1:N; for kprime = ks k = kprime-1; hk1 = wc*T/pi*sin((k-l)*wc*T)/(k-l)/wc/T; h1(end+1) = hk1; hk2 = -wc*T/pi*sin((k-l)*wc*T)/(k-l)/wc/T; h2(end+1) = hk2; hk3 = 2*wc*T/pi*sin((k-l)*wc*T)/(k-l)/wc/T*cos(k-l)*w0*T; h3(end+1) = hk3; hk4 = -2*wc*T/pi*sin((k-l)*wc*T)/(k-l)/wc/T*cos(k-l)*w0*T; h4(end+1) = hk4; end h1(l+1) = wc*T/pi; h2(l+1) = 1-wc*T/pi; h4(l+1) = 1-2*wc*T/pi; % subplot(231); % stem(ks, h1 ,'o-','DisplayName','Low pass filter'); % legend(); % subplot(232); % stem(ks, h2 ,'o-','DisplayName','High pass filter'); % legend(); % subplot(233); % stem(ks, h1+h2 ,'o-','DisplayName','LPF+HPF'); % legend(); % % subplot(234); % stem(ks, h3 ,'o-','DisplayName','Band pass filter'); % legend(); % subplot(235); % stem(ks, h4 ,'o-', 'DisplayName','Band eliminate filter'); % legend(); % subplot(236); % stem(ks, h3+h4 ,'o-', 'DisplayName','BPF+BEF'); % legend(); % big; Z61 = 0; syms z; for n = 0:(length(h1) - 1) Z61 = Z61 + h1(n+1) * z^(-n); end Z61 = vpa(simplify(Z61)) syms w; H61 = subs(Z61, z, exp(i*w*T)); %%%%%%%%%%%%%%%%%%%%%%%%%%%% N=121; ks121 = 1:N; l = (N-1)/2; h121 = []; for kprime = ks121 k = kprime-1; hk1 = wc*T/pi*sin((k-l)*wc*T)/(k-l)/wc/T; h121(end+1) = hk1; end h121(l+1) = wc*T/pi; Z121 = 0; syms z; for n = 0:(length(h121) - 1) Z121 = Z121 + h121(n+1) * z^(-n); end Z121 = vpa(simplify(Z121)) syms w; H121 = subs(Z121, z, exp(i*w*T)); %%%%%%%%%%%%%%%%%%%%%%%%%%%% N=241; ks241 = 1:N; h241 = []; l = (N-1)/2; for kprime = ks241 k = kprime-1; hk1 = wc*T/pi*sin((k-l)*wc*T)/(k-l)/wc/T; h241(end+1) = hk1; end h241(l+1) = wc*T/pi; Z241 = 0; syms z; for n = 0:(length(h241) - 1) Z241 = Z241 + h241(n+1) * z^(-n); end Z241 = vpa(simplify(Z241)) syms w; H241 = subs(Z241, z, exp(i*w*T)); %%%%%%%%%%%%%%%%%%%%%%%%%%%% figure(); omegas = linspace(0,pi,100); subplot(321); plot(omegas, abs(subs(H61, w, omegas)),'DisplayName','N=61'); legend(); title('振幅特性'); subplot(322); stem(ks, h1 ,'o-','DisplayName','N=61'); legend(); title('インパルス応答'); subplot(323); plot(omegas, abs(subs(H121, w, omegas)),'DisplayName','N=121'); legend(); title('振幅特性'); subplot(324); stem(ks121, h121 ,'o-','DisplayName','N=121'); legend(); title('インパルス応答'); subplot(325); plot(omegas, abs(subs(H241, w, omegas)),'DisplayName','N=241'); legend(); title('振幅特性'); subplot(326); stem(ks241, h241 ,'o-','DisplayName','N=241'); legend(); title('インパルス応答'); big;
・フィルタの次数Nを高めるとリプルは抑えられるが、遅延時間L=(N-1)/2*Tが増大する
・ギブス現象による遮断周波数ω=ωcでの不連続性は解消できない