0

I am using the accelerate framework FFT functions to produce a spectrogram of a sound sample. This part works great. However, I want to (effectively) manipulate the spectrum directly (ie manipulate the real numbers), and then call the inverse again, how would I go about doing that? It looks like the INVERSE call expects an array of IMAGINARY numbers, but how can I produce that from my manipulated real numbers? I have tried making the realp array my reals, and the imagp part zero, but that doesn't seem to work.

The reason I ask this is because I wish to run an FFT on a voice audio sample, and then run the FFT again and then lifter the low part of the cepstrum (thus hopefully separating the vocal tract components from the pitch) and then run an inverse FFT again to produce a spectrogram showing the vocal tract (formant) information more clearly (ie, without the pitch information). However, I seem to be running into problems on the inverse FFT, into which I am passing in my real values (cepstrum) in the realp array and the imagp is zero. I think I am doing something wrong here and the results are unexpected.

4

1 回答 1

0

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

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

于 2012-04-07T21:00:26.273 回答