我正在尝试获取(下降)锯齿信号的幅度和相位。我的锯齿长 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 到最后一个部分的零,我希望它们对于给定信号都为零
我真的不明白我在这里做错了什么。
有人有想法吗?