首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FFT和IFFT的长度

FFT和IFFT的长度
EN

Stack Overflow用户
提问于 2015-04-30 11:40:51
回答 2查看 1.4K关注 0票数 4

我有一些信号,我把它们相加成一个更大的信号,每个信号都位于不同的频率区域。现在,我用FFTW对大信号进行FFT运算,并将具体的FFT桶(信号所在的位置)切出。

例如:大信号用1024点进行FFT变换,信号的采样率为fs=200000

我以下列方式计算给定的启动和停止频率的混凝土仓位置:

代码语言:javascript
运行
复制
tIndex.iStartPos = (int64_t) ((tFreqs.i64fstart) / (mSampleRate / uFFTLen));

例如,我得到的第一个信号被切断16个桶。现在,我再次使用FFTW进行IFFT转换,并将16个复杂值返回(因为我为16个桶保留了向量)。

但是,当我在MATLAB中比较提取的信号和原始的小信号时,我可以看到原始信号(是wav)有xxxxx数据,而我的信号(我保存为原始二进制文件)只有16个复杂值。

那么,如何获得要正确转换的IFFT操作的长度?这里怎么了?

编辑逻辑本身被分成3个程序,每一行都在多线程环境中。出于这个原因,我在这里发布了一些伪代码:

代码语言:javascript
运行
复制
ReadWavFile(); //returns the signal data and the RIFF/FMT header information
CalculateFFT_using_CUFFTW(); //calculates FFT with user given parameters, like FFT length, polyphase factor, and applies polyphased window to reduce leakage effect
GetFFTData(); //copy/get FFT data from CUDA device
SendDataToSignalDetector(); //detects signals and returns center frequency and bandwith for each sigal
Freq2Index(); // calculates positions with the returned data from the signal detector
CutConcreteBins(position);
AddPaddingZeroToConcreteBins(); // adds zeros till next power of 2
ApplyPolyphaseAndWindow(); //appends the signal itself polyphase-factor times and applies polyphased window
PerformIFFT_using_FFTW();
NormalizeFFTData();
Save2BinaryFile();

->然后用MATLAB分析数据(目前正在工作中)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-30 12:41:51

如果你有一个由1024个样本组成的真实信号,那么通过将频谱乘以一个矩形窗口,再取IFFT,就可以得到16个感兴趣的频率桶的贡献。这基本上相当于:

  1. 在感兴趣的频率桶之前和之后用零填充缓冲区
  2. 在缓冲区中的相同位置复制感兴趣的频率桶
  3. 如果使用全谱表示(如果使用fftw_plan_dft_1d(..., FFTW_BACKWARD,...进行逆变换),则计算谱的上半部分的Hermitian对称性(或简单地使用半频谱表示并通过fftw_plan_dft_c2r_1d执行逆变换)。

也就是说,使用特殊设计的滤波器,而不是仅仅使用频域的矩形窗口,可以得到更好的频率分解。

票数 2
EN

Stack Overflow用户

发布于 2015-04-30 12:23:46

FT的输出长度等于输入长度。我不知道你是怎么得到16个垃圾箱的,1024个输入的FT是1024个垃圾箱。现在,对于一个实际的输入(不是复杂的),1024个回收箱在512/513左右的镜像上是相同的,所以您的FFT库可能只返回较低的512桶作为实际输入。不过,那可不止16个垃圾箱。

在执行IFFT时,您可能需要填充所有1024个回收箱,因为它通常不会假设它的输出将成为真正的信号。但那只是一个镜像下512桶的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29966786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档