使用IPP的无中间缓冲器的频移

时间:2012-02-08 13:57:57

标签: math signal-processing intel-ipp

我有一个充满信号的实/虚样本缓冲区的缓冲区,并希望通过乘以正弦曲线来移动频域中的信号。

我认为自己有四种选择:

  • 一些IPP功能(我找不到一个)
  • 手动计算结果(可能比IPP慢)
  • 在单独的缓冲区中生成正弦曲线(可能需要大量内存)
  • 在单独的缓冲区中生成部分正弦曲线(需要重新计算音调缓冲区)

我想知道这里最好的方法是什么,和/或我是否错过了现有的复频信号频率变换函数。

1 个答案:

答案 0 :(得分:0)

如果你想要速度,请在频域中进行。

FFT -> circular shift by N bins -> IFFT

我发现ffw ++包装器非常方便。

如果你真的开始在时域中做这件事,你可以用某种方式使用英特尔的VML功能:

// Create a single period of frequency offset wave
vector<complex<float> > cxWave(period);
for(int i = 0; i < period; ++i)
  cxWave = i * 2 * M_PI / period;
vcExp( period, &cxWave.at(0), &cxWave.at(0) );

// Multiply entire signal by the complex sinusoid
for(int frame=0; frame < numFrames; ++frame)
{
  vcMul( period, &input.at(frame*period), &cxWave.at(0), &cxWave.at(0) );
}

你当然需要填补空白。