关于滤波器设计的问题
已知一个包含几个频率成分的原信号,现在我用DFT画出了它的频谱图,可以得出它是由3个不同频率的信号组成的(33Hz,40Hz,48Hz)。
请问怎么设计滤波器分别把它们滤出来啊,我已经设计了一个低通滤波器把33Hz的信号滤出来了,其他两个怎么也滤不出来,参数也不知道如何设置,哪位大神肯给指点下。
这是我低通滤波器的程序:
clear;fs=160;
load('yy7.mat');
x=yy7(1:160);
L=length(x);N=160;Hw=fft(x,N);
figure(1);subplot(2,1,1);plot(x);
grid on;title('滤波前信号x');xlabel('n');% 原始信号
subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw));% 查看信号频谱
grid on;title('滤波前信号频谱图');xlabel('频率');ylabel('振幅|H(e^jw)|');
%% x_1
Ap=1;As=60;% 定义通带及阻带衰减
%dev=[(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/20)];% 计算偏移量
mags=;% 低通
fcuts=;% 边界频率
=kaiserord(fcuts,mags,,fs);% 估算FIR滤波器阶数
hh1=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR滤波器设计
x_1=filter(hh1,1,x);% 滤波
x_1(1:ceil(N/2))=[];% 群延时N/2,删除无用信号部分
L=length(x_1);N=160;Hw_1=fft(x_1,N);
figure(2);subplot(2,1,1);plot((1:L),x_1);
grid on;title('x_1');xlabel('n');
subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw_1));% 查看信号频谱
grid on;title('滤波后信号x_1频谱图');xlabel('频率');ylabel('振幅|H(e^jw)|');
FDATOOL 谢谢~~~~ LZ可以设计成3个KAISER带通滤波器,分别提取3个信号。但LZ在程序中还有一些问题:1,LZ数据x长度和FFT变换长度N为160,而滤波器的阶数N(用N不太合适,FFT变换长度也取为N)为60,用filter函数不合适,用conv函数更好。2,滤波以后x_1长还为160,但LZ程序中:x_1(1:ceil(M/2))=[];% 群延时N/2,删除无用信号部分这样x_1长L为130。在计算频率刻度时就会有错误:plot((0:N-1)*fs/L,abs(Hw_1));如在LZ第1层第2图中看到的,信号的峰值似乎在40多HZ,而不是33HZ。 谢谢您的细心解答~我再试着做一下
页:
[1]