“常用公式”在线计算,“设计手册”在线查询

        已知一个包含几个频率成分的原信号,现在我用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=[1,0];% 低通
fcuts=[34,39];% 边界频率
[N,Wn,beta,ftype]=kaiserord(fcuts,mags,[0.01 0.1],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),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)|');



yy7.rar (0 Bytes, 下载次数: 0)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 支持支持 反对反对

共 4 个关于本帖的回复 最后回复于 2014-5-7 15:26

沙发
杨希祥 十品草民 发表于 2014-5-6 15:40:42 | 只看该作者
研发埠培训中心
FDATOOL
板凳
王晓明 十品草民 发表于 2014-5-6 17:56:10 | 只看该作者
研发埠人才中心
谢谢~~~~
地板
李金梁 十品草民 发表于 2014-5-7 10:58:59 | 只看该作者
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。
5#
王晓明 十品草民 发表于 2014-5-7 15:26:24 | 只看该作者
谢谢您的细心解答~我再试着做一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注我们

360网站安全检测平台