声音中正弦波的提取--sinusoidal model
2016-01-11 19:15
225 查看
我们对一段声音分析,可以做STFT变换,对于“音调”类声音,可能只需要数量有限的正弦信号就可以模拟及还原原始声音,也大大简化了分析。对正弦信号的分析和提取,也有助于实现音调提取,声源分离,及对某一声源增强等。
可是做了STFT不就是一个个正弦分量的提取吗?也许更准确地描述我们需要做的,是声音中主要正弦成分的提取。即对STFT或DFT的结果再进行进一步的提取。
首先要注意一个分辨率的问题,即信号中有两个较为接近的正弦信号,如300hz和400hz,我们如何能有效的分辨出两个信号来?在STFT中,我们是用窗函数来截取一段信号进行分析的,而窗对单个正弦信号的效果就相当于将窗函数的频域谱平移到正弦波所代表频率处。所以当有两个接近的正弦信号时,我们需要窗函数的主瓣频率小于两正弦信号之差,这样两个平移的主瓣才不会重叠,导致无法分辨。
而主瓣频率 = 特定窗的主瓣宽度 * 采样率 / 窗的大小,当采样率一定时,我们通过增大窗的大小到主瓣频率小于两正弦信号之差即可区分两正弦信号。
接下来要做的是peak detection,即在DFT过后的频谱中找到正弦波,特点是它是频谱中局部最高点,即需要该点的幅度既大于前一个点,又大于后一个点。这是比较容易编程实现的。但是这样找出这个点还是不够的,这样的结果不过精确。要使精度提高,一种方法是zero-padding,即增加FFT点的数量,但这样耗费太大;另一种方法是采用抛物线拟合即可,因为窗函数的主瓣与抛物线形状很相似。
上面说了提取的方法,那么如何合成呢?一种方法产生与找出来的正弦幅度与频率一致的一组正弦波,相加即可,但这样计算量很大;另一种方法是直接对找出来的一个个“主瓣”作IDFT,就直接得到合成信号了。
可是做了STFT不就是一个个正弦分量的提取吗?也许更准确地描述我们需要做的,是声音中主要正弦成分的提取。即对STFT或DFT的结果再进行进一步的提取。
首先要注意一个分辨率的问题,即信号中有两个较为接近的正弦信号,如300hz和400hz,我们如何能有效的分辨出两个信号来?在STFT中,我们是用窗函数来截取一段信号进行分析的,而窗对单个正弦信号的效果就相当于将窗函数的频域谱平移到正弦波所代表频率处。所以当有两个接近的正弦信号时,我们需要窗函数的主瓣频率小于两正弦信号之差,这样两个平移的主瓣才不会重叠,导致无法分辨。
而主瓣频率 = 特定窗的主瓣宽度 * 采样率 / 窗的大小,当采样率一定时,我们通过增大窗的大小到主瓣频率小于两正弦信号之差即可区分两正弦信号。
接下来要做的是peak detection,即在DFT过后的频谱中找到正弦波,特点是它是频谱中局部最高点,即需要该点的幅度既大于前一个点,又大于后一个点。这是比较容易编程实现的。但是这样找出这个点还是不够的,这样的结果不过精确。要使精度提高,一种方法是zero-padding,即增加FFT点的数量,但这样耗费太大;另一种方法是采用抛物线拟合即可,因为窗函数的主瓣与抛物线形状很相似。
上面说了提取的方法,那么如何合成呢?一种方法产生与找出来的正弦幅度与频率一致的一组正弦波,相加即可,但这样计算量很大;另一种方法是直接对找出来的一个个“主瓣”作IDFT,就直接得到合成信号了。
相关文章推荐
- C语言使用libZPlay录制声音并写到文件的方法
- 声音验证码制作方法
- Android实现直接播放麦克风采集到的声音
- ASP.NET中将声音文件添加到资源中并进行播放的方法
- python实现带声音的摩斯码翻译实现方法
- python使用PyGame模块播放声音的方法
- 在线播放视频时,IE浏览器只有声音没有图像的解决办法
- 听声音,判故障
- 10.电脑出现没有声音的问题:
- 看电影学英语最时尚法则:“加减乘除”
- archlinux没有声音
- ubuntu13.10 源码安装Mplayer,解决播放无声音问题
- Porteus基于Slackware发行版,系统声音问题的解决(通过万能的google解决的,在此记录一下)
- 测试你的耳朵年龄,能听到的频率越大,说明你的年龄越小
- 电脑主机箱前置耳机没声音(window7)
- android 声音播放,我这里是给软件配的音效
- 实现Android播放声音资源的一个简单的工具类
- VMware虚拟机中Ubuntu下没声音
- JavaScript控制视频关闭在IE下运行完美,无声音延续
- VC++中实现报警声音