Вычисление фазового спектра сигнала - PullRequest
1 голос
/ 25 марта 2019

Как рассчитать фазовый спектр, используя выходные данные из 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);
  }
}

1 Ответ

0 голосов
/ 26 марта 2019

Действительно, вы можете вычислить фазовый спектр в радианах с помощью такой же петли, как вы использовали для спектра амплитуды:

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...