繁体   English   中英

FFT结果;幅相关系

[英]FFT result; amplitude-phase relation

我想放大特定频率的音频输入,我使用numpy.fft

所以我的问题是:当改变信号的幅度时,相位会发生什么?

例如,如果我在某个频率范围内乘以某个因子的幅度,假设为2,我是否需要更改相位,如果是,我该怎么办呢?

我已经完成了放大而没有改变相位,结果不是我想要的。 它几乎是相同的信号,有一些不必要的噪音。

你不应该为这样的事情改变阶段。 更有可能的问题是你需要更加温和地应用提升。 听起来你正在采用一些频率窗口并乘以一个常数,同时保持其他一切不变。 这将导致时域中的振铃具有非常长的尾部。 您需要平滑从gain = 1区域到gain = 2区域的转换,例如使用高斯波形,其代码如下所示:

x, t = get_waveform()
f0, df = get_parameters()     # Center frequency and bandwidth of gain region
f = np.fft.rfft(x)
freqs = np.fft.fftfreq(len(x), t[1]-t[0])
freqs = freqs[0:len(f)]       # rfft has only non-negative frequency components
gain_window = 1 + np.exp(-(freqs-f0)**2/(df)**2)
f = f * gain_window
x = np.fft.irfft(f)
return x

如果可行,您可以尝试更具侵略性的功能,这些功能具有更清晰的开启和更平坦的顶部。

FFT可能实际上并不是你想要的。 FFT通常不用于实时/流应用。 这是因为在天真的方法中,您必须在开始处理之前收集整个样本缓冲区。 对于简单的过滤应用程序,通常更容易在时域中直接进行过滤。 这就是FIR和IIR滤波器的功能。

为了实时过滤傅立叶变换,您需要做的是将数据流分解为固定长度的重叠块,FFT,滤波器,反向FFT,并将它们重新组合在一起,而不会引入毛刺。 这是可能的,但要做到这一点很棘手。 对于完整的多通道均衡器,它可能仍然是最佳选择,但您至少应该考虑时域滤波。

如果这不是实时应用程序,那么FFT就是最佳选择。 对于中等大小的数据集(高达几百兆字节),您可以只对整个数据集进行FFT。 对于更大的数据集,您仍然必须将数据分解为块,但它们可以是更大的块,您不必担心引入的延迟。

另外,请记住FFT将信号视为周期性信号,因此如果您的信号在开始和结束时没有变为零,则需要进行某种窗口化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM