鉴于所有103个数据点都一次,这对我来说很有意义。但是,如何流式传输较大的音频WAV文件呢(例如$ N = 10 ^ 5 $)。如果要过滤高频,那么我刚才在$ 10 ^ 5 $的整个数据上描述的方法在逻辑上是有意义的。但这在流式播放WAV文件时不合理。如何高频过滤音频文件的流播放?
#1 楼
FFT->调零系数-> IFFT不是正确的滤波方法-这样做实现的实际滤波器具有较差的特性。正确的信号滤波方法是计算数字系数过滤器,一个称为过滤器设计的过程,针对该过程,可以使用大量的软件工具/文档,并将其应用于输入序列。简而言之,这包括为每个样本评估过去输入样本和过去输出样本的线性组合。根据滤波器在阻带抑制/纹波方面的要求,可能仅需要几个系数,使其比FFT效率更高。由于计算输出样本所需的唯一信息是过去的几个输入/输出样本,因此将其应用于流音频没有问题。
仅当您决定使用FFT时,才需要使用FFT。使用FIR滤波器,并且如果您的滤波器要求导致它们具有大量的系数。在这种特殊情况下,通过FFT和重叠叠加将滤波器应用于输入数据的连续块将非常有效。
#2 楼
对信号流应用频域滤波的最佳方法是重叠添加(或相关的样式重叠保存或块卷积等)。您基本上一次拍摄一帧(例如1024个样本) )。零填充至两倍长度(2048),进行FFT,乘以滤波器的传递函数(也为零填充),进行逆FFT。将最后1024个样本保存为下一帧的重叠,将前一帧的重叠与前1024个样本相加,这就是您的输出。对于每1024个输入样本,您将获得1024个输出样本,然后只需对下一帧重复此操作,直到完成流。
由于频域中的乘法实现,因此需要填充和重叠为零的整个业务循环卷积,您真的需要在大多数应用中进行线性卷积。
这些方法有一些变体,它们使用不同的窗口函数和重叠部分,但原理都是相同的:将其切成小块并在其中处理一个块时间。
评论
$ \ begingroup $
是否有一本书详细介绍了此内容?
$ \ endgroup $
–user782220
2012年7月29日在5:46
$ \ begingroup $
@ user782220:dsp.stackexchange.com/questions/427/…
$ \ endgroup $
–马丁·汤普森(Martin Thompson)
2012年7月30日在11:01