java - 计算信号的相位谱

标签 java fft dft

使用 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);
  }
}

最佳答案

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

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));

关于java - 计算信号的相位谱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55345939/

相关文章:

java - jnetpcap java.lang.UnsatisfiedLinkError :/usr/lib/libjnetpcap. so : libpcap. so.0.9: 无法打开共享对象文件: 没有这样的文件或目录

java - Sortbyname 无法解析为 java 中的类型

java - 重新实例化 GUI (JFrame) 对象

matlab - 了解 Matlab FFT 示例

c - vDSP FFT2d Swift 结果的虚部错误

matlab - 当我进行FFT sinc(t)时有不同的结果

java - 代码可以编译但不能运行

opencv - 基于形状的对象类别识别的 SVM 实现的傅立叶描述符

matlab - 带 fft 的点积

matlab - fft(DFT) x 轴的单位