声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3005|回复: 14

[滤波] 求助:怎样对声音信号进行滤波

[复制链接]
发表于 2007-6-29 10:23 | 显示全部楼层 |阅读模式

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

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

x
我现在做一个研究,需要对录入的人声做低通滤波,保留3000hz以下的频率
用matlab怎么弄?我是matlab菜鸟,各位能不能详细解答一下?
回复
分享到:

使用道具 举报

发表于 2007-6-29 10:29 | 显示全部楼层

回复 #1 huban 的帖子

可以先看看本版有关滤波的帖子
发表于 2007-6-29 11:40 | 显示全部楼层
建议你可以试一下小波包方法.看了一篇文章不错,名字好象是<基于小波包分析的声信号能量特征提取方法>.

评分

1

查看全部评分

 楼主| 发表于 2007-6-29 16:05 | 显示全部楼层
什么叫小波包?
发表于 2007-6-29 16:08 | 显示全部楼层

回复 #4 huban 的帖子

这个三言两语很难说清楚,楼主可以先看看小波方面的资料。
 楼主| 发表于 2007-6-29 18:25 | 显示全部楼层
好吧,我问个很简单的问题:
我的人声录音文件的采样频率是44100,怎样用fft得到其频率图?
我看了书上的示例,大概是这样:
y=fft(x,512);
>> pyy=y.*conj(y)/512;
>> f=1000*(0:256)/512;
>> plot(f,pyy(1:257))
我用这个试了下,得到的图好象不对啊?
 楼主| 发表于 2007-6-29 19:19 | 显示全部楼层
再弱问个问题:进行fft之后就可以得到波形的频率信息,那么还有必要进行低通滤波吗?比如我想过滤掉3000hz以上的频率,那么直接在fft转换后的那张频率图中看0到3000的部分不就可以了吗?为什么还要搞低通滤波呢?
发表于 2007-6-29 19:43 | 显示全部楼层
这么高的采样频率你用这么少的采样点当然效果不好了.:@L 增大采样点数,提高频率分辨率试试.:@(
发表于 2007-6-29 19:58 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-7 15:42 编辑
原帖由 huban 于 2007-6-29 18:25 发表
好吧,我问个很简单的问题:
我的人声录音文件的采样频率是44100,怎样用fft得到其频率图?
我看了书上的示例,大概是这样:
y=fft(x,512);
>> pyy=y.*conj(y)/512;
>> f=1000*(0:256)/512;
>> plot(f,pyy(1:2 ...

1000应该换成你的采样频率44100
发表于 2007-6-29 20:00 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-7 15:42 编辑
原帖由 huban 于 2007-6-29 18:25 发表
好吧,我问个很简单的问题:
我的人声录音文件的采样频率是44100,怎样用fft得到其频率图?
我看了书上的示例,大概是这样:
y=fft(x,512);
>> pyy=y.*conj(y)/512;
>> f=1000*(0:256)/512;
>> plot(f,pyy(1:2 ...
原帖由 wy558558558 于 2007-6-29 19:43 发表
这么高的采样频率你用这么少的采样点当然效果不好了.:@L 增大采样点数,提高频率分辨率试试.:@(

楼主还要注意wy558558558的意见。
发表于 2007-7-1 08:03 | 显示全部楼层

my approach

1. Use Matab  'fdatool' command
2. Select 'Lowpass', 'EquiRippe'
3. Filter order = 'Minimum'
4. Fs =44100, Fpass =3000, Fstop = 4500
6. Unit = 'dB', Apass = 1, Astop = 30
7. Press ' Design Filter' Button, then you got it
8. File\Export  Export to 'Workspace' , Export as 'Coefficients',  Name Numerator as 'ftest'
9. Go back to Matlab command window, and check the worksapce, you got a variable named 'ftest'
10. Suppose your data name = x
11. y = filter(x,ftest,1);  % this is the filtered data you need
fda.gif

评分

1

查看全部评分

发表于 2007-7-1 09:35 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-7 15:42 编辑
原帖由 huban 于 2007-6-29 18:25 发表
好吧,我问个很简单的问题:
我的人声录音文件的采样频率是44100,怎样用fft得到其频率图?
我看了书上的示例,大概是这样:
y=fft(x,512);
>> pyy=y.*conj(y)/512;
>> f=1000*(0:256)/512;
>> plot(f,pyy(1:2 ...

完全同意wy558558558和zhlong的意见。采样频率是44100,一个语音少说也要100ms,即有4410个样点,所以用512点做语音分析太短了一些。同时在一个语音中音调往往有变化,共振峰也会有变化,所以对语音分析最好用STFT方法。
再弱问个问题:进行fft之后就可以得到波形的频率信息,那么还有必要进行低通滤波吗?比如我想过滤掉3000hz以上的频率,那么直接在fft转换后的那张频率图中看0到3000的部分不就可以了吗?为什么还要搞低通滤波呢?

这完全取决楼主是否作进一步的处理。如果进一步在频率域上处理,这可以只对0到3000的部分作处理;如果谱分析后还要在时间域上处理,又要去除3000以上的分量,则还需进行低通滤波(不论用频域或时域的方法)。

评分

1

查看全部评分

发表于 2007-7-1 13:56 | 显示全部楼层

回复 #12 songzy41 的帖子

songzy41 老师,我想楼主是不是想问“直接对频谱上的0~3000HZ部分做IFFT得到的时域信号,和利用通频带为0~3000HZ的低通滤波器得到的时域信号,这两者有什么区别?”。

[ 本帖最后由 zhlong 于 2007-7-1 15:26 编辑 ]
发表于 2007-7-1 17:37 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-7 15:42 编辑
原帖由 zhlong 于 2007-7-1 13:56 发表
直接对频谱上的0~3000HZ部分做IFFT得到的时域信号,和利用通频带为0~3000HZ的低通滤波器得到的时域信号,这两者有什么区别?

直接对频谱上的0~3000HZ部分做IFFT得到的时域信号,相当于时频域上加了一个矩形窗,将产生吉布斯(Gibbs)现象(同矩形窗加在时域上一样,在频域中产生泄漏);而不论在通过低通滤波器就不会产生这种情况。

评分

1

查看全部评分

发表于 2007-9-8 17:48 | 显示全部楼层

回复 #6 huban 的帖子

应该是Pyy=2*sqrt(y.*conj(y))/512
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-30 09:07 , Processed in 0.116104 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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