Audio 用RealFFT改变频率振幅,闪烁的声音

Audio 用RealFFT改变频率振幅,闪烁的声音,audio,signal-processing,fft,frequency,Audio,Signal Processing,Fft,Frequency,我一直在尝试修改特定频率的振幅。以下是我所做的: 我将数据2048作为浮点数组获取,其值范围为[-1,1]。这是原始数据 我使用这个RealFFT算法 我将原始数据分为左通道和右通道(这非常有效) 我在左侧和右侧都执行RealFFT(前向启用),并使用这个等式来找到我想要的正确频率:freq/(samplerate/sizeOfBuffer/2.0) 我修改了我想要的频率 我执行RealFFT(前向禁用)返回频域 现在当我播放时,我听到了我对频率的改变,但是有一个闪烁的噪音(当你播放一首旧的乙烯

我一直在尝试修改特定频率的振幅。以下是我所做的:

我将数据2048作为浮点数组获取,其值范围为[-1,1]。这是原始数据

我使用这个RealFFT算法

我将原始数据分为左通道和右通道(这非常有效)

我在左侧和右侧都执行RealFFT(前向启用),并使用这个等式来找到我想要的正确频率:freq/(samplerate/sizeOfBuffer/2.0)

我修改了我想要的频率

我执行RealFFT(前向禁用)返回频域

现在当我播放时,我听到了我对频率的改变,但是有一个闪烁的噪音(当你播放一首旧的乙烯基歌曲时,有点像闪烁)

知道我会做错什么吗? 那是一段时间以前,我在大学里修了信号处理课程,所以我可能忘了什么


提前谢谢

这些评论可能令人困惑。这里有一些澄清

虚部不是相位。实部和虚部形成一个向量,想象一个二维图,其中实部在x轴上,虚部在y轴上。频率的振幅是从原点到点形成的线的长度。因此,相位是实部和虚部的弧长。大小是实部和虚部平方和的平方根

所以。第一步是要更改向量的大小,必须缩放实部和虚部

那很容易。第二部分要复杂得多。傅里叶变换对世界的“看法”是,它是无限周期的——也就是说,它看起来像是信号从末端,回到起点。如果你在算法中加入一个完美的正弦音调,并说正弦音调的周期是4096个采样。进入FFT的第一个样本为+1,然后进入FFT的最后一个样本为-1。如果你观察FFT中的频谱,就会发现好像有很多高频,这些高频是转换从-1跳变为1的信号的谐波。FFT越长,FFT显示信号“真实”视图的距离就越近

通过加窗和重叠FFT块,开发了平滑FFT块之间的过渡的技术,以便块之间的过渡不会如此“不连续”。一种相当常见的技术是使用Hann窗口并重叠4倍。也就是说,对于每2048个样本,实际上要进行4次FFT,并且每个FFT与上一个块重叠1536次。Hann窗口得到了mathy,但基本上它有很好的属性,因此可以像这样进行重叠,并且所有内容都可以很好地总结

我发现这个非常有趣的博客展示了你所经历的学习痛苦:


这项技术不同于另一位提到重叠保存的评论者。这是一种使用FFTs进行FIR滤波的方法。然而,FIR滤波器的设计通常是在Matlab/Octave等数学软件包中完成的。

这些注释可能会令人困惑。这里有一些澄清

虚部不是相位。实部和虚部形成一个向量,想象一个二维图,其中实部在x轴上,虚部在y轴上。频率的振幅是从原点到点形成的线的长度。因此,相位是实部和虚部的弧长。大小是实部和虚部平方和的平方根

所以。第一步是要更改向量的大小,必须缩放实部和虚部

那很容易。第二部分要复杂得多。傅里叶变换对世界的“看法”是,它是无限周期的——也就是说,它看起来像是信号从末端,回到起点。如果你在算法中加入一个完美的正弦音调,并说正弦音调的周期是4096个采样。进入FFT的第一个样本为+1,然后进入FFT的最后一个样本为-1。如果你观察FFT中的频谱,就会发现好像有很多高频,这些高频是转换从-1跳变为1的信号的谐波。FFT越长,FFT显示信号“真实”视图的距离就越近

通过加窗和重叠FFT块,开发了平滑FFT块之间的过渡的技术,以便块之间的过渡不会如此“不连续”。一种相当常见的技术是使用Hann窗口并重叠4倍。也就是说,对于每2048个样本,实际上要进行4次FFT,并且每个FFT与上一个块重叠1536次。Hann窗口得到了mathy,但基本上它有很好的属性,因此可以像这样进行重叠,并且所有内容都可以很好地总结

我发现这个非常有趣的博客展示了你所经历的学习痛苦:


这项技术不同于另一位提到重叠保存的评论者。这是一种使用FFTs进行FIR滤波的方法。然而,FIR滤波器的设计通常是在Matlab/Octave等数学软件包中完成的。

这些注释可能会令人困惑。这里有一些澄清

虚部不是相位。实部和虚部形成一个向量,想象一个二维图,其中实部在x轴上,虚部在y轴上。频率的振幅是从原点到点形成的线的长度。因此,相位是实部和虚部的弧长。大小是实部和虚部平方和的平方根

所以。第一步是要更改向量的大小,必须缩放实部和虚部