1

使用 JTransform 或 JWave 的输出,应该如何计算相位谱?

我是否只是简单地编写一个类似的方法,而是使用以下方法计算相位: Math.atan2(im / re) * Math.PI * 180

我使用以下方法计算幅度谱:

@Override
public void computeSpectrum()
{
    // The spectrum into which we store the data
    super.spectrum = new double[signal.getSampledAmplitudes().length >> 1];

  // Compute the magnitude spectrum of the signal
  double re = 0, im = 0;
  for (int bin = 0; bin < spectrum.length - 1; ++bin) {
       re = super.frequencyDomain[2 * bin];
       im = super.frequencyDomain[2 * bin + 1];
       super.spectrum[bin] = Math.sqrt(re * re + im * im);
  }
}
4

1 回答 1

0

实际上,您可以使用与用于幅度谱类似的循环来计算以弧度为单位的相位谱:

double re = 0, im = 0;
for (int bin = 0; bin < spectrum.length - 1; ++bin) {
   re = super.frequencyDomain[2 * bin];
   im = super.frequencyDomain[2 * bin + 1];
   super.spectrum[bin] = Math.atan2(im, re);

}

如果您更喜欢以度为单位的结果,只需将相位转换为toDegrees()

...
   super.spectrum[bin] = Math.toDegrees(Math.atan2(im, re));
于 2019-03-26T00:57:29.403 回答