为什么这个用matlab设计的高通滤波器设计出来了,滤波结果却是错的?这是我写的代码,我发现运行后前面4个图是正确的,后面两个图就不是我预想中的那样的,wp=2*pi/3;ws=pi/4;ap=3;as=80;M=256;fs=1;n=0:1/
来源:学生作业帮助网 编辑:作业帮 时间:2024/08/26 01:06:23
![为什么这个用matlab设计的高通滤波器设计出来了,滤波结果却是错的?这是我写的代码,我发现运行后前面4个图是正确的,后面两个图就不是我预想中的那样的,wp=2*pi/3;ws=pi/4;ap=3;as=80;M=256;fs=1;n=0:1/](/uploads/image/z/9773598-30-8.jpg?t=%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%99%E4%B8%AA%E7%94%A8matlab%E8%AE%BE%E8%AE%A1%E7%9A%84%E9%AB%98%E9%80%9A%E6%BB%A4%E6%B3%A2%E5%99%A8%E8%AE%BE%E8%AE%A1%E5%87%BA%E6%9D%A5%E4%BA%86%2C%E6%BB%A4%E6%B3%A2%E7%BB%93%E6%9E%9C%E5%8D%B4%E6%98%AF%E9%94%99%E7%9A%84%3F%E8%BF%99%E6%98%AF%E6%88%91%E5%86%99%E7%9A%84%E4%BB%A3%E7%A0%81%2C%E6%88%91%E5%8F%91%E7%8E%B0%E8%BF%90%E8%A1%8C%E5%90%8E%E5%89%8D%E9%9D%A24%E4%B8%AA%E5%9B%BE%E6%98%AF%E6%AD%A3%E7%A1%AE%E7%9A%84%2C%E5%90%8E%E9%9D%A2%E4%B8%A4%E4%B8%AA%E5%9B%BE%E5%B0%B1%E4%B8%8D%E6%98%AF%E6%88%91%E9%A2%84%E6%83%B3%E4%B8%AD%E7%9A%84%E9%82%A3%E6%A0%B7%E7%9A%84%2Cwp%3D2%2Api%2F3%3Bws%3Dpi%2F4%3Bap%3D3%3Bas%3D80%3BM%3D256%3Bfs%3D1%3Bn%3D0%3A1%2F)
为什么这个用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;
然后就好了