|
回复 #16 zhangnan3509
主要的错误是在滤波器的设计中。在 buttord(Wp,Ws,Rp,Rs)中,Wp是通带的频率、Ws是阻带的频率、Rp是通带内波纹系数需小于的值、Rs是阻带内衰减系数需大于的值。Rp和Rs都表示的分贝值,都为正值。若设计低通滤波器,有Wp<Ws。同时Wp和Ws都是归一化频率,设滤波器的实际通带频率为fp和实际阻带频率为fc,则Wp=fp/(fs/2)、Ws=fc/(fs/2)。
从版主的图来看是设计低通滤波器,但参数中Wp = 1500/2500; Ws = 1200/2500; Wp>Ws(?)设计高通可Wp>Ws。
又Wp=fp/(fs/2),应该除2000,怎么会除2500?
所以设计的滤波器完全不能满足要求,滤波器输出也就怪怪的。我把程序改成:
clear;
f1 = 1776;
f2 = 1000;
fs = 4000;
n = 1:4000;
x = sin(2*pi*f1*n/fs);
x(1400:2900) = 0;
y = x + sin(2*pi*f2*n/fs);
Wp = 1200/2000; Ws = 1500/2000;
[n,Wn] = buttord(Wp,Ws,0.05,3)
%n=5;
%Wn=0.47985;
[b,a]=butter(n,Wn);
[h,w]=freqz(b,a);
figure(9)
subplot(2,1,1)
plot(fs*w/2/pi,abs(h));
%添加横向座标轴的标注
xlabel('频率(HZ)');
%添加纵向座标轴的标注
ylabel('幅值');
grid on
%break
sf=filter(b,a,y); %叠加函数x经过低通滤波器以后的新函数
subplot(212);
plot(sf); %绘制叠加函数x经过低通滤波器以后的时域图形
xlabel('时间 (seconds)');
ylabel('幅度');
作出的图如下。 |
评分
-
1
查看全部评分
-
|