1

我正在尝试获取(下降)锯齿信号的幅度和相位。我的锯齿长 1024 个样本,生成为

int numSamples = 1024;
for (int i = 0; i < numSamples; i++)
{
    samples[i] = -((float)i / (float)(numSamples - 1) * 2.0f - 1.0f);
}

我将实数和虚数数组设置为

for (int i = 0; i < numSamples; i++)
{
    double sample = samples[i];
    re[i] = sample;
    im[i] = 0.0;
}

然后将其传递给 FFT 函数。我将结果读出为

int numPartials = numSamples / 2;
for (int i = 1; i < numPartials; i++)
{
    outMagnitudes[i] = (float)sqrt(re[i] * re[i] + im[i] * im[i]);
    outPhases[i] = (float)atan2(im[i], re[i]);
}

出现2个问题:

  • 幅度只有应有的一半
  • 相位线性范围从第一个部分的 -PI/2 到最后一个部分的零,我希望它们对于给定信号都为零

我真的不明白我在这里做错了什么。

有人有想法吗?

4

1 回答 1

1

您只打印 FFT 结果的一半,其中只包含一半的能量,因此您得到一半大小的量级。其余的是负频率镜像复共轭一半。

您的锯齿不是以 sample[0] 为中心的圆形,因此存在相移。

于 2017-04-28T01:39:37.160 回答