声音中正弦波的提取--sinusoidal model

来源:互联网 发布:淘宝标题规避品牌 编辑:程序博客网 时间:2024/06/03 13:19

        我们对一段声音分析,可以做STFT变换,对于“音调”类声音,可能只需要数量有限的正弦信号就可以模拟及还原原始声音,也大大简化了分析。对正弦信号的分析和提取,也有助于实现音调提取,声源分离,及对某一声源增强等。

        可是做了STFT不就是一个个正弦分量的提取吗?也许更准确地描述我们需要做的,是声音中主要正弦成分的提取。即对STFT或DFT的结果再进行进一步的提取。

        首先要注意一个分辨率的问题,即信号中有两个较为接近的正弦信号,如300hz和400hz,我们如何能有效的分辨出两个信号来?在STFT中,我们是用窗函数来截取一段信号进行分析的,而窗对单个正弦信号的效果就相当于将窗函数的频域谱平移到正弦波所代表频率处。所以当有两个接近的正弦信号时,我们需要窗函数的主瓣频率小于两正弦信号之差,这样两个平移的主瓣才不会重叠,导致无法分辨。

       而主瓣频率 = 特定窗的主瓣宽度 * 采样率 / 窗的大小,当采样率一定时,我们通过增大窗的大小到主瓣频率小于两正弦信号之差即可区分两正弦信号。

       接下来要做的是peak detection,即在DFT过后的频谱中找到正弦波,特点是它是频谱中局部最高点,即需要该点的幅度既大于前一个点,又大于后一个点。这是比较容易编程实现的。但是这样找出这个点还是不够的,这样的结果不过精确。要使精度提高,一种方法是zero-padding,即增加FFT点的数量,但这样耗费太大;另一种方法是采用抛物线拟合即可,因为窗函数的主瓣与抛物线形状很相似。

       上面说了提取的方法,那么如何合成呢?一种方法产生与找出来的正弦幅度与频率一致的一组正弦波,相加即可,但这样计算量很大;另一种方法是直接对找出来的一个个“主瓣”作IDFT,就直接得到合成信号了。

1 0