实时频域滤波怎样实现

只能将输入信号取一个小窗口每隔一段时间进行窗口傅里叶分析,频域滤波然后再转到时域了.由于要有一个等待信号写满小窗口的时间,所以输出信号和原信号相差一个 窗口长度-1 的延迟,也算是实时的了.输入信号,窗口尺寸取4: t=0:x输出:0t=1;xx输出:00..............t=3:xxxx -\u0026gt; 做4点DFT,滤波,反变换,用一个buffer存储:输出: 0 0 0 buft=5:xxxx | x输出:0 0 0 buf buft=6:xxxx | xxx输出:0 0 0 buf buf buf buf t=7:xxxx | xxxx -\u0026gt; 做4点DFT,滤波,反变换,用buffer存储(buffer中的老值已经全部使用完了,可以存新值了):...................==================以下更新答案===========================这么处理其实就是实时的短时傅里叶了,和短时傅里叶的区别只是未来的窗口还未知. 除了这一条以外其他的都和短时傅里叶一样,因此,如果想取大窗口尺寸,又要保证音窗口带来的延迟更小,则需要扩大窗口尺寸,缩小窗口间隔,例如窗口尺寸65536,而每64点取一次窗口,则可以使延迟变小,而可以处理低频了.例如,初始时间为0,此时65536的buffer全部为0.当t=64时,buffer扔掉最老的64个点,push进新的64个点,处理整个65536个点,DFT正变换,处理,DFT反变换,只取计算结果的最末尾64点输出,反复如此进行.也就是说,这样得到的是一堆冗余的窗口,处理起来计算量略大,但是如果有要频域又要实时,这是没有办法的办法了.有个降低计算量的方法是N个尺寸为X的频谱可以合并成一个N*X尺寸的大频谱,这样保存老的N-1个小窗口频谱,新到的小窗口求频谱,然后用数个小窗口的频谱组成需要尺寸的频谱,处理,反变换也有类似方法.因为我们只需要求最后一个小窗口的时域就好了.另外除了上文提到的,还可以使用相位声码器来做频域滤波,只是如果仅仅是滤波的话,相位声码器的数学形式和短时傅里叶没太大区别,计算量也差不多.=================另一种思考方式=============================不知道题主的频域滤波是什么样的形式,以及为何不能转换到时域,但我个人的经验,实时的需求能时域搞定最好时域搞定,哪怕降低点质量呢,例如曾经一次我们做个自适应滤波器,每一时刻滤波器的系数是与信号当前的频谱相关的,最开始就用的频域处理,但实时性,滤波器的性能,计算量之间总是无法平衡,最后把这个频域滤波当做带有包络的正交滤波器组,换算成带包络的IIR滤波器组形式,虽然音质不如原来,但是需求搞定了.
■网友
近似(non-causal的等)和延迟(加窗等)等。或者直接在时域derive滤波算法~
■网友
实时频谱也是时域变换过来的吧,这样从时延角度考虑的话还不如就在时域做实时处理,比如FIR滤波器。


    推荐阅读