2012-04-07 99 views
0

我正在使用加速框架FFT函数来生成声音样本的谱图。这部分工作很好。但是,我想直接(有效)操纵频谱(即操纵实数),然后再次调用反函数,那么我该如何去做呢?它看起来像INVERSE调用需要一个IMAGINARY数字的数组,但是我怎么能从我操纵的实数中产生这个数字?我试图让realp数组成为我的实数,而imagp部分为零,但这似乎不起作用。Apple FFT加速框架实数阵列逆FFT

我问这个问题的原因是因为我希望对语音音频样本运行FFT,然后再次运行FFT,然后提升倒谱的低部分(从而希望将音道分量从音高中分离出来)然后再次运行逆FFT以产生更清楚地显示声道(共振峰)信息的谱图(即没有音高信息)。然而,我似乎遇到了逆FFT的问题,其中我在realp数组中传递了真实值(倒谱),并且imagp为零。我认为我在这里做错了事,结果是意外的。

回答

0

您需要处理复杂的正向FFT结果,而不是实际的幅度,否则IFFT结果谱的形状将失真。不要考虑它们的虚数,认为它们是包含所需角相位信息的2D矢量的一部分。

如果您的倒谱提升器/滤波器只改变实际幅度,那么您可以尝试使用实际幅度的变化量作为比例因子来在执行复杂IFFT之前改变您的前向复数FFT结果。

+0

谢谢您的回复。我是否会缩放realp和imagp部分,还是只需要缩放一个?那么,没有办法扭转从幅度转变回“阶段信息”的转变? – raeldor 2012-04-08 14:24:39

+0

东西的长度与指向的角度无关。查看atan2()。 – hotpaw2 2012-04-08 17:58:30

+0

明白了。谢谢你用外行的话说清楚。 :) – raeldor 2012-04-08 21:05:52