声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2454|回复: 7

[滤波] 求助关于FIR滤波器的一些问题

[复制链接]
发表于 2007-7-13 16:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我最近在做滤波问题,就是对一段语音信号进行滤波,出现了一些我觉得意料之外的问题,请大家帮忙看看。
      程序步骤如下:
      1.读取一段N点数据,对音乐信号做FFT得信号频谱yf。
      2.采用MATLAB中设计滤波器的函数fir1,如下:
      ln=fir1(N_lfilter-1,omiga_lc/pi,'low',hamming(N_lfilter));产生滤波器ln,并作FFT得到f_ln。
      3.f_low=yf.*f_ln';         低频信号频谱  
         y_low=ifft(f_low);      反变换后得低频信号
出来的结果不太满意,不论是低通还是高通后的信号,它们最后几十个样点出现了很大程度的振荡即肩峰,与原始信号不吻合,见附件不知大家有没有遇到过类似的情况。以我的认识和了解,我产生了三个疑问,请大家指点:
      1.产生振荡的原因可能是设计的滤波器过于突变,在全部主瓣在通带内时卷积出现了最大值,即很明显的肩峰。这个肩峰怎么缓减?
      2.滤波相当于一个响应,即应该是N点数据和L点滤波器响应的卷积,如此那么应该是有N+L-1个样点,而最后得到的是N个样点的数据,我想可能是N点圆周卷积后的结果,小于线性卷积点数,如果是这样的话不是会出现混叠了吗?
      3.FIR滤波器有固定相移,那么在滤波后的信号也是存在相移的,如何解决相移问题呢?
以前学数字信号处理也只停留在课本上,没有深入研究过,有过钻研的XDJM说说你们的看法吧,呵呵,不胜感激。:@)

滤波器问题(论坛).doc

70 KB, 下载次数: 37

回复
分享到:

使用道具 举报

发表于 2007-7-13 21:01 | 显示全部楼层
产生滤波器系数ln后,用
y_low=filter(ln,1,x)
x为N点数据。
而楼主用的方法是产生了循环(圆周)卷积的问题。
发表于 2007-7-14 10:52 | 显示全部楼层

回复 #1 Jamie.yan 的帖子

filter滤波以后,前n个点是不准确的.
 楼主| 发表于 2007-7-14 13:51 | 显示全部楼层

回复 #2 songzy41 的帖子

首先谢谢songzy41 w89986581 的回复,我自己又重新试了一下。
y_low=filter(ln,1,x)后,原来是用ln和x做线性卷积,但只取了N个样点。我用conv(ln,x)做了线性卷积,得到N+M-1个样点,M为ln的点数。考虑到FIR滤波器会产生相移,我选取了其中((N+1)/2:N-1+(N+1)/2)样点,结果感觉是对的。至于理论为什么是这样,我也不清楚了。
发表于 2007-7-14 15:49 | 显示全部楼层
从原理上来说,我觉得你上面的作法并没有什么错,而且我用一个简单的信号(包含一个低频和一个高频成分)来做仿真的话,也没有出现你所说的问题。
 楼主| 发表于 2007-7-14 20:13 | 显示全部楼层

回复 #5 yangzj 的帖子

是啊,我用一个简单的信号(低频和高频信号的组合)来做,也没有什么问题的。所以,呵呵,好不懂为何了。可能是我采的语音信号比较复杂吧。
发表于 2007-7-16 14:06 | 显示全部楼层
楼主把你的程序发上来嘛~~
我现在也在做这个,大家一起研究一下~~~
发表于 2007-7-16 16:18 | 显示全部楼层

回复 #7 vwta 的帖子

王济编,<MATLAB在振动信号处理中的应用>书里有相应的方法介绍和源程序
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-14 19:18 , Processed in 0.067022 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表