function [ b1,a1 ] = ButtordFilter( Wp,Ws,Rp,Rs,PlotFlag)
%% 编 写 人:Chernic
%% 学 校:广州大学
%% 联系邮箱:[email protected]
%% 函数:ButtordFilter
% 巴特沃斯直接数字滤波器设计实例函数
%% 调用函数
% 系统函数:buttord()
% 系统函数:butter()
%% 函数示例
% Wp = 0.2*pi; % 低通滤波器通带边界频率
% Ws = 0.3*pi; % 低通滤波器阻带边界频率
% Rp = 1; % 低通滤波器通带最大衰减
% Rs = 40; % 低通滤波器阻带最少衰减
% PlotFlag = 1; % 绘图标志
% [b1, a1]ButtordFilter( Wp,Ws,Rp,Rs,PlotFlag);
%% 求数字滤波器的归一化频率
wp=Wp/pi;
ws=Ws/pi;
%% 设计巴特沃斯数字滤波器;
[N,wc]=buttord(wp,ws,Rp,Rs); %计算巴特沃斯数字滤波器阶数N及3dB截止频率
[b1,a1]=butter(N,wc); %设计巴特沃斯数字滤波器
B = b1;
A = a1;
%% 5. 画出输入信号的图像
if PlotFlag >= 1
Y0 = x;
X0 = 0:length(x)-1;
% 画出输入信号的图像
subplot(3,2,1);
stem(X0,Y0,'.');
grid on
axis normal
xlabel('频率f');
ylabel('幅度x(n)');
title('原信号的图像');
% 画出输入信号的频谱
subplot(3,2,2)
Y1 = fft(x,256);
X1 = 0:length(Y1)-1;
plot(2*X1/256,abs(Y1))
xlabel('k');
ylabel('X(k)');
title('原信号256点采样的频谱');
end
%% 6. 画出该数字滤波器的幅度特性曲线;
if PlotFlag >= 2
subplot(3,1,2);
[H,w]=freqz(B,A,100); % 对应采样间隔为0.02*pi
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
plot(w/pi,db);
axis([0,0.6,-50,10]);
grid on
axis normal
xlabel('频率f');
ylabel('幅度x(n)');
title('双线性变换法设计巴特沃斯滤波器的幅频响应曲线');
end
%% 7. 用设计滤波器对输入信号进行滤波
if PlotFlag >= 3
X2 = 0:length(x)-1;
Y2 = filter(B,A,x);
% 画出滤波后的信号
subplot(3,2,5);
stem(X2,Y2,'.');
hold on;
X2 = 0:length(x)-1;
Y2 = zeros(length(X2));
plot(X2,Y2);
xlabel('采样点n');
ylabel('幅度x(n)');
grid on
axis normal
title('滤波后信号');
% 画出滤波后的信号的频谱
subplot(3,2,6)
Y3 = fft(Y2,256);
X3 = 0:length(Y3)-1;
plot(2*X3/256,abs(Y3))
grid on
axis normal
xlabel('采样点k');
ylabel('幅度X(k)');
title('滤波后信号256点采样的频谱');
end
end
评论0