clear; close all; N = 61; A = 0; b = 0; syms w; M = (N-1)/2; c = [w];%dummy for n=1:M c(end+1) = 2*cos(w*n); end c(1) = 1; c = fliplr(c); c = transpose(c); omega = linspace(0, pi, N+1); %遮断周波数の定義 delta_w = 0.1*pi;%転移域の幅 wc = 0.5*pi;%遮断周波数 wd = wc+delta_w; %重み関数Wの作成 W = zeros(size(omega)); Wconst = 0.9;%任意の値 W(find(omega<wc)) = 1; W(find(omega>=wc & omega<wd)) = 0; W(find(omega>wd))=Wconst; %ディジタルLPFの理想特性 D = zeros(size(omega)); D(find(omega<wc))=1; D(find(omega>wc))=0; A = zeros(length(c),length(c)); b = zeros(size(c)); K = N;%Kは任意の値(十分に大きく取る) for k=0:K-1 k ck_quad = subs(c,w,omega(k+1))*transpose(subs(c,w,omega(k+1))); A = A + eval(W(k+1)*ck_quad); b = b + eval(W(k+1)*D(k+1)*subs(c,w,omega(k+1))); end h = A\b; Hw = transpose(c)*h; Hw_val = eval(subs(Hw,w,omega)); Hw_abs_normal = abs(Hw_val)/max(abs(Hw_val)); figure(); plot(omega, Hw_abs_normal); title('最小二乗法による直線位相FIRフィルタの振幅特性'); figure(); plot(omega, 20*log10(Hw_abs_normal)); title('最小二乗法による直線位相FIRフィルタ振幅特性(dB表示)'); big;
N=61の場合