0

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

我认为自己有四个选择:

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

我想知道这里最好的方法是什么,和/或我是否刚刚错过了用于频移复杂信号的现成功能。

4

1 回答 1

0

如果您追求速度,请在频域中进行。

FFT -> circular shift by N bins -> IFFT

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

如果您真的打算在时域中执行此操作,则可以以如下方式使用 Intel 的 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) );
}

您当然需要填写空白。

于 2012-09-14T20:05:21.633 回答