今天下了小雨,空气中泛起潮湿的味道,阴冷的感觉袭来,心情受到小小影响。
代码:
hp2lpfre子函数
function [wpLP, wsLP, alpha] = hp2lpfre(wphp, wshp) % Band-edge frequency conversion from highpass to lowpass digital filter % ------------------------------------------------------------------------- % [wpLP, wsLP, alpha] = hp2lpfre(wphp, wshp) % wpLP = passband edge for the lowpass digital prototype % wsLP = stopband edge for the lowpass digital prototype % alpha = lowpass to highpass transformation parameter % wphp = passband edge frequency for the highpass % wshp = stopband edge frequency for the highpass % % if wphp <= 0 error('Passband edge must be larger than 0.') end if wshp >= wphp error('Stopband edge must be smaller then Passband edge') end % Determine the digital lowpass cutoff frequencies: wpLP = 0.2*pi; alpha = -(cos((wpLP + wphp)/2))/(cos((wpLP - wphp)/2)); wsLP = angle(-(exp(-j*wshp)+alpha)/(1+alpha*exp(-j*wshp)));
dhpfd_bl子函数
function [b, a] = dhpfd_bl(type, wp, ws, Rp, As) % IIR Highpass Filter Design using bilinear transformation % ----------------------------------------------------------------------- % [b, a] = dhpfd_bl(type, wp, ws, Rp, As); % type = 'butter' or 'cheby1' or 'cheby2' or 'ellip' % b = numerator polynomial coefficients of highpass filter , Direct form % a = denominator polynomial coefficients of highpass filter, Direct form % wp = Passband edge frequency in radians; % ws = Stopband edge frequency in radians (wp < ws); % Rp = Passband ripple in +dB; Rp > 0 % As = Stopband attenuation in +dB; As > 0 % % if isempty(type) str = 'butter'; end switch type case 'butter' [b , a] = butthpf(wp, ws, Rp, As); break; case 'cheby1' [b , a] = cheb1hpf(wp, ws, Rp, As); break; case 'cheby2' [b , a] = cheb2hpf(wp, ws, Rp, As); break; case 'ellip' [b , a] = eliphpf(wp, ws, Rp, As); break; otherwise disp('Oh, input may be error! '); end
%% ------------------------------------------------------------------------ %% Output Info about this m-file fprintf(' *********************************************************** '); fprintf(' <DSP using MATLAB> Problem 8.34 '); banner(); %% ------------------------------------------------------------------------ % Digital Highpass Filter Specifications: wphp = 0.6*pi; % digital passband freq in rad wshp = 0.4586*pi; % digital stopband freq in rad Rp = 1; % passband ripple in dB As = 15; % stopband attenuation in dB %[bhp, ahp] = butthpf(wphp, wshp, Rp, As) [bhp, ahp] = cheb1hpf(wphp, wshp, Rp, As) %[bhp, ahp] = cheb2hpf(wphp, wshp, Rp, As) %[bhp, ahp] = eliphpf(wphp, wshp, Rp, As) [C, B, A] = dir2cas(bhp, ahp); % Calculation of Frequency Response: %[dblp, maglp, phalp, grdlp, wwlp] = freqz_m(blp, alp); [dbhp, maghp, phahp, grdhp, wwhp] = freqz_m(bhp, ahp); delta_w = 2*pi/1000; Rp_hp = -(min(dbhp(ceil(wphp/delta_w+1):1:501))); % Actual Passband Ripple fprintf(' Actual Passband Ripple is %.4f dB. ', Rp_hp); As_hp = -round(max(dbhp(1:1:ceil(wshp/delta_w)+1))); % Min Stopband attenuation fprintf(' Min Stopband attenuation is %.4f dB. ', As_hp); %% ----------------------------------------------------------------- %% Plot %% ----------------------------------------------------------------- figure('NumberTitle', 'off', 'Name', 'Problem 8.34 Chebyshev-1 Highpass') set(gcf,'Color','white'); M = 2; % Omega max subplot(2,2,1); plot(wwhp/pi, maghp); axis([0, M, 0, 1.2]); grid on; xlabel('Digital frequency in pi units'); ylabel('|H|'); title('Highpass Filter Magnitude Response'); set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.4586, 0.6, M]); set(gca, 'YTickMode', 'manual', 'YTick', [0, 0.8913, 1]); subplot(2,2,2); plot(wwhp/pi, dbhp); axis([0, M, -100, 2]); grid on; xlabel('Digital frequency in pi units'); ylabel('Decibels'); title('Highpass Filter Magnitude in dB'); set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.4586, 0.6, 1.4, 1.5414, M]); set(gca, 'YTickMode', 'manual', 'YTick', [-80, -23, -10, -1, 0]); set(gca,'YTickLabelMode','manual','YTickLabel',['80'; '23'; '10';' 1';' 0']); subplot(2,2,3); plot(wwhp/pi, phahp/pi); axis([0, M, -1.1, 1.1]); grid on; xlabel('Digital frequency in pi nuits'); ylabel('radians in pi units'); title('Highpass Filter Phase Response'); set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.4586, 0.6, M]); set(gca, 'YTickMode', 'manual', 'YTick', [-1:1:1]); subplot(2,2,4); plot(wwhp/pi, grdhp); axis([0, M, 0, 15]); grid on; xlabel('Digital frequency in pi units'); ylabel('Samples'); title('Highpass Filter Group Delay'); set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.4586, 0.6, M]); set(gca, 'YTickMode', 'manual', 'YTick', [0:5:15]); % ----------------------------------------------------- % method 2 % ----------------------------------------------------- % Digital lowpass Filter Specifications: [wpLP, wsLP, alpha] = hp2lpfre(wphp, wshp); prompt = 'Please input the type of digital lp filter: butter or cheby1 or cheby2 or ellip [butter]: '; type = input(prompt , 's'); [bhp, ahp] = dhpfd_bl(type, wphp, wshp, Rp, As) [C, B, A] = dir2cas(bhp, ahp)
运行结果:
cheb1hpf函数,得到Chebyshev-1型高通滤波器,系统函数直接形式的系数,阶数为4
直接形式转换成串联形式,系数
Chebyshev-1型高通滤波器,幅度谱、相位谱和群延迟响应
最小阻带衰减达到23dB,满足15dB的设计要求。