下降锯齿的FFT的疲劳值

时间:2017-04-27 22:54:34

标签: fft phase magnitude

我正在尝试获得(下降)锯齿信号的幅度和相位。 我的锯齿长度为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线性到最后一部分的零,我希望它们对于给定的信号都为零

我真的不知道我在这里做错了什么。

有没有人有想法?

1 个答案:

答案 0 :(得分:1)

您只打印一半FFT结果,只有一半的能量,因此您可以获得一半的大小。其余的是负频镜像复共轭半。

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