使用Intel Performance Primitives FFT函数ippsConjPack_64fc,为什么输出大小与输入大小相同?

问题描述

我正在使用ippsFFTFwd_RToPack_64f(pSrc.data(),pDst.data(),pSpec64,pBuffer)进行前向FFT,它将waveformlen元素写入pDstpSrc.size() == waveformlen)。

然后,我尝试使用pDstippsConjPack_64fc(pDst.data(),fftResIPP.data(),waveformlen)转换为复数。我不明白的是为什么输出向量fftResIPP必须与输入向量pDst大小相同。

根据format specification,Pack格式是前半部分加上一个FFT仓,列为实值和虚值交替显示,跳过了第一个和最后一个FFT仓的虚值。我知道这使得Pack格式的长度与FFT输入的长度相同。

但是,当将其转换为复数时,我认为结果向量将是Pack向量的(N-2)/2 + 2倍,因为它将每两个结合成一个复数,除了第一个和最后一个,虚数值为0。

据我了解:

input: [x,x,x] (4 values)
output complex: 0.1+0i,0.5+3i,1+2i,0.3+0i,-0.3-0i,-1-2i,-0.5-3i,-0.1-0i (8 values)
output pack: 0.1,0.3,3,1,2,-0.3 (8 values)

但是,当我尝试将示例包运行到复杂的转换功能,但是长度不同,(waveformlen - 2) / 2 + 2如此:ippsConjPack_64fc(pDst.data(),(waveformlen - 2) / 2 + 2 )时,程序崩溃。

ConjPack page上,将显示Pack格式的不同印象。这次看来Pack格式使用的压缩类型无法立即识别或无法使用(在IPP developer reference中看不到Pack的复杂功能)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)