早教吧 育儿知识 作业答案 考试题库 百科 知识分享

基于汉宁窗的FIR滤波器wp1=0.3*pi;ws1=0.4*pi;ws2=0.6*pi;wp2=0.7*pi;wdelta=ws1-wp1;N=ceil(8*pi/wdelta);wc=[(ws1+wp1)/2,(ws2+wp2)/2];n=0:N-1;b=fir1(N,wc/pi,'stop',hanning(N+1));[H,f]=freqz(b,1,512,100);figure(1);plot(f,20*log10(abs(H)));xlabel('

题目详情
基于汉宁窗的FIR滤波器
wp1=0.3*pi;ws1=0.4*pi;ws2=0.6*pi;wp2=0.7*pi;
wdelta=ws1-wp1;
N=ceil(8*pi/wdelta);
wc=[(ws1+wp1)/2,(ws2+wp2)/2];
n=0:N-1;
b=fir1(N,wc/pi,'stop',hanning(N+1));
[H,f]=freqz(b,1,512,100);
figure(1);
plot(f,20*log10(abs(H)));
xlabel('频率/Hz');ylabel('振幅/dB');grid on;
title('频响特性');
f1=10;f2=25;f3=40;
dt=0.02;t=0:dt:3;
x=sin(2*pi*f1*t)+cos(2*pi*f2*t)+cos(2*pi*f3*t);
y=fftfilt(b,x);
figure(2)
subplot(2,1,1),plot(t,x),title('输入信号')
xlabel('时间/s')
subplot(2,1,2),plot(t,y),title('输出信号')
xlabel('时间/s')
figure(3)
N=2048;
fx=abs(fft(x,N));
fy=abs(fft(y,N));
fs=1/dt;
f=(0:length(fx)-1)'*fs/length(fx);
subplot(2,1,1),plot(f,fx),title('输入信号频谱')
xlabel('频率/Hz')
subplot(2,1,2),plot(f,fy),title('输出信号频谱')
xlabel('频率/Hz')
我设计的是带阻滤波器,作图做出来的频响特性曲线也是带阻的,但是输入一个三个频率分量的信号之后出来的却显示带通特性.谁帮我看看为什么?
▼优质解答
答案和解析

程序的错误有两点

设计滤波器的采样频率与信号采样频率不同.在用数字信号处理时,要求参与运算的序列采样频率相同.

对于f1 f2 f3三个频率来讲,采样频率fs太低了,fs至少是f3的4倍以上,因为正弦信号按照2f3采样肯定失真

因此可以考虑将dt=0.02删掉,在程序开头写fs=500(是按照10f3算的),dt=1/fs,并将[H,f]=freqz(b,1,512,100)中的100改写为fs.而后试试,应该是你要的结果