henrygliet 发表于 2008-1-15 15:29

如何得到声音信号的包络??

我这里有一段声波信号数据,是.wav格式的,采样率是8000Hz,在matlab中用 = wavread('VOICE.wav')读入后,观察其波形如图1,可以看出大概有一个0.5Hz周期信号,我看了一些书,可以通过自相关的方法把这个0.5Hz周期信号的包络求出来,可是我调用matlab自带的xcorr函数得到的波形如图2,从中基本不能看出这个信号的周期性,难道是我的m程序有问题?小弟第一次来这个论坛,还请各位大侠多多指教,谢谢先。
附上我的M程序:
= wavread('VOICE.wav');
len = length(y);%获取声音文件数据长度
t = (0:len-1)/fs;%获取声音文件的时间序列
lag = 10000; %延迟样点数
= xcorr(y,lag,'unbiased');
subplot(211); plot(t,y); grid on;
subplot(212); plot(lags/fs,c); grid on;
我也说说我的一些解决思路吧:是不是先要做抽样处理?是不是要先滤波?看到原始信号中也有高频的周期信号存在。
如有需要,我可以将原始数据附上,还请各位大侠多多帮忙,再次谢谢先。

[ 本帖最后由 ChaChing 于 2010-5-9 16:51 编辑 ]

sigma665 发表于 2008-1-15 15:58

回复 楼主 的帖子

新人建议先去新人区,那有积分送

然后再搜索论坛,看有没有人做过

henrygliet 发表于 2008-1-15 16:04

楼上的大侠,我已经在论坛上搜索过了,没有搜到,其实我现在需要的就是个思路,没有思路我一点也做不下去,我不是来要代码的,还请大侠高抬贵手,谢谢先

sigma665 发表于 2008-1-15 16:38

回复 3楼 的帖子

不好意思,不是做你方面的

sogooda 发表于 2008-1-15 18:26

happy教授做过啊

一种有效的包络线算法
http://forum.vibunion.com/forum/viewthread.php?tid=32967

花如月 发表于 2008-1-16 13:58

用自相关确实可以检测信号中隐含的周期性,不过局限性也不较大。对单一周期信号效果较好

henrygliet 发表于 2008-1-16 14:22

请教楼上 花如月

我就是要得到与0.5Hz的周期信号的自相关,正如你所说的,自相关对单一周期信号效果好,那么我是不是先要对原始信号做滤波处理?还有就是既然自相关有局限性,那么针对我这样一段声音信号,其他还有什么方法能检测周期信号呢?
还有一个问题,我的声音文件比较大,都是大概1分钟左右的数据,采样率是8K,是不是也对算法有影响或者要求?还请楼上大侠一起论坛上其他大侠多多指教,谢谢先

花如月 发表于 2008-1-16 17:00

回复 7楼 的帖子

搜下期刊文章吧,应该有很多方法。采样率对算法的影响在信号版区有分析,太高和太低都不好。不要取太长的数据,3到5个周期即可。另外你是如何保证声音信号是周期的?在周期不明显的时候确实有些不可靠。还有啊,你到底是检测周期呢,还是求信号的包络?

http://forum.vibunion.com/forum/thread-49067-1-1.html

可以看看,里边也有相关的讨论。并且有个版友做了你和十分相似的工作

[ 本帖最后由 花如月 于 2008-1-16 17:02 编辑 ]

henrygliet 发表于 2008-1-16 17:40

再次请教楼上 花如月

我的声音信号是由一个周期震动的设备产生的,而这个设备是由信号源产生周期方波驱动的,所以声音信号的周期性可以保证。
我的实际工作是要检测周期,所以需要matlab上的自相关的算法,不过如果能把信号的包络画出来,那包络的周期也就是声音信号的周期了,这个只是我的一个想法,现在连最基本的自相关算法都没有办法实现,很是郁闷。
看过你推荐的帖子,非常感谢你对我的无私帮助,可是好像都是些互相关的例子,也没有实际的针对我这种信号的周期检测。
不过就像你说的,我也在考虑是否需要对采样率为8k的.wav文件再抽样,降低采样率,并且将数据量取小点,希望能有进展。

花如月 发表于 2008-1-16 17:46

回复 9楼 的帖子

希望有进展了来分享,另外降低取样率要保证信号不失真。:handshake

henrygliet 发表于 2008-1-18 05:39

还是想引起大家的关注,大家再帮我想想办法
页: [1]
查看完整版本: 如何得到声音信号的包络??