关于speex中KISS_FFT的用法

关于speex中KISS_FFT的用法:
KISS_FFT可以支持FLOATING_POINT或FIXED_POINT。
1)void kiss_fftr2(kiss_fftr_cfg st,const kiss_fft_scalar in,kiss_fft_scalar out)

其中输入
st: st是专门的初始化缓存地址,需要调用初始化函数kiss_fftr_alloc(NFFT, 0, NULL, NULL)来初始化;
in: 是输入的时域数值序列,长度为NFFT
out:是输出的频域数据,总长度为NFFT。
数据结果的排列如下:

[En]

The arrangement of the data results is described as follows:

假设x是个时域实数序列,计为
x=x[0]~x[NFFT-1];
对x求傅里叶变换,得
X=fft(x,NFFT),则X=X[0]~X[NFFT-1],
其中X每个点都包含实部和虚部,如X[0]=real(X[0]) + imag(X[0])*j

由于实数的fft具有对称性,即关于NFFT/2位置共轭对称,可以节省内存空间,只保存前半段的fft结果(由于fft
第一个点和第NFFT/2个点都只有real部分也称为DC component和Nyquist component,所以这两个点只存real部分即可)。

令in = x;
那么out=(1/NFFT)*[real(X[0]) [real(X[1]) imag(X[1]] … [real(X[NFFT/2-1]) imag(X[NFFT/2-1]] real(X[NFFT/2]))
即:
out[0]=real(X[0]);
out[NFFT-1]=real(X[NFFT/2]);
out[1:2:NFFT-3]=real(X[1:NFFT/2-1]);
out[2:2:NFFT-2]=imag(X[1:NFFT/2-1]);
out=out/NFFT.

2)void kiss_fftri2(kiss_fftr_cfg st,const kiss_fft_scalar in,kiss_fft_scalar out)

其中输入
st: st是专门的初始化缓存地址,需要调用初始化函数kiss_fftr_alloc(NFFT, 1, NULL, NULL)来初始化;
in: 是输入的频域数值序列,长度为NFFT数值序列,长度为NFFT
out:是输出的时域数据,长度为NFFT。
数据结果的排列如下:

[En]

The arrangement of the data results is described as follows:

假设x是个时域实数序列,计为
x=x[0]~x[NFFT-1];
对x求傅里叶变换,得
X=fft(x,NFFT),则X=X[0]~X[NFFT-1],
其中X每个点都包含实部和虚部,如X[0]=real(X[0]) + imag(X[0])*j

由于实数的fft具有对称性,即关于NFFT/2位置共轭对称,可以节省内存空间,只保存前半段的fft结果(由于fft
第一个点和第NFFT/2个点都只有real部分也称为DC component和Nyquist component,所以这两个点只存real部分即可)。

对于ifft,则有
in=(1/NFFT)*[real(X[0]) [real(X[1]) imag(X[1]] … [real(X[NFFT/2-1]) imag(X[NFFT/2-1]] real(X[NFFT/2]))
即:
in[0]=real(X[0]);
in[NFFT-1]=real(X[NFFT/2]);
in[1:2:NFFT-3]=real(X[1:NFFT/2-1]);
in[2:2:NFFT-2]=imag(X[1:NFFT/2-1]);
in=in/NFFT.

out=x;

Original: https://blog.csdn.net/jianghuzhijian/article/details/121614339
Author: jianghuzhijian
Title: 关于speex中KISS_FFT的用法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/525467/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球