为什么这个用matlab设计的高通滤波器设计出来了,滤波结果却是错的?这是我写的代码,我发现运行后前面4个图是正确的,后面两个图就不是我预想中的那样的,wp=2*pi/3;ws=pi/4;ap=3;as=80;M=256;fs=1;n=0:1/
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/24 09:38:48
为什么这个用matlab设计的高通滤波器设计出来了,滤波结果却是错的?这是我写的代码,我发现运行后前面4个图是正确的,后面两个图就不是我预想中的那样的,wp=2*pi/3;ws=pi/4;ap=3;as=80;M=256;fs=1;n=0:1/
为什么这个用matlab设计的高通滤波器设计出来了,滤波结果却是错的?
这是我写的代码,我发现运行后前面4个图是正确的,后面两个图就不是我预想中的那样的,
wp=2*pi/3;
ws=pi/4;
ap=3;
as=80;
M=256;
fs=1;
n=0:1/fs:M-1;
t=n*fs;
w=linspace(0,2*pi,1024);
w1=2*pi/M*n;
[N,wc]=buttord(wp,ws,ap,as,'s')
[B,A]=butter(N,wc,'high','s')%B为分子
Hf=freqs(B,A,w);
subplot(3,2,1);
plot(w(1:512)/pi,abs(Hf(1:512)));
xlabel('频率w/2*pi');
ylabel('|H(e^jw)|');
title('高通滤波器的频幅特性');
subplot(3,2,2);
plot(w(1:512)/pi,angle(Hf(1:512)));
xlabel('频率w/pi');
ylabel('相位');
title('高通滤波器的相频特性');
xn=1+cos(pi*n/4)+cos(2*pi*n/3);
subplot(3,2,3);
stem(n,xn,'.');
xlabel('时间n');
ylabel('x(n)');
title('序列x(n)');
X=fft(xn);
magX=abs(X);
subplot(3,2,4);
plot(w1/pi,magX/max(magX));
xlabel('频率w/pi');
ylabel('|X(e^jw)|');
title('序列x(n)的幅频特性');
x=1+cos(pi*n/4)+cos(2*pi*n/3);
y=filter(B,A,x);%B为分子,A为分母
Y=fft(y);
subplot(3,2,5);
stem(n,y,'.');
xlabel('序号n');
ylabel('y(n)');
title('滤波后的序列y(n)');
subplot(3,2,6);
plot(w1/pi,abs(Y)/max(abs(Y)));
xlabel('频率w/pi');
ylabel('|Y(e^jw)|');
title('序列y(n)的幅频特性');
为什么这个用matlab设计的高通滤波器设计出来了,滤波结果却是错的?这是我写的代码,我发现运行后前面4个图是正确的,后面两个图就不是我预想中的那样的,wp=2*pi/3;ws=pi/4;ap=3;as=80;M=256;fs=1;n=0:1/
你的buttord的输入参数搞错了.wp和ws是normalized之后的,取值范围只从0到1,1代表pi.
所以需要将代码改为
wp=2/3;
ws=1/4;
然后就好了