【发布时间】:2014-06-22 17:27:15
【问题描述】:
我想绘制频谱(就像他们在 Audacity 中所做的那样)。因此,我想要 x 轴上的赫兹频率和 y 轴上的幅度。 我的输入是一个周期性的正弦波,幅度为 0,7,频率为 500HZ。我使用 FFTW 计算幅度并使用 QWT 进行绘图。 我的问题,我应该在 setSamples 中输入什么参数来获得 500 HZ 的图片? 任何帮助,将不胜感激 这是我的代码
【问题讨论】:
我想绘制频谱(就像他们在 Audacity 中所做的那样)。因此,我想要 x 轴上的赫兹频率和 y 轴上的幅度。 我的输入是一个周期性的正弦波,幅度为 0,7,频率为 500HZ。我使用 FFTW 计算幅度并使用 QWT 进行绘图。 我的问题,我应该在 setSamples 中输入什么参数来获得 500 HZ 的图片? 任何帮助,将不胜感激 这是我的代码
【问题讨论】:
从documentation 开始,您必须设置两个指针,指向构建曲线的数据和大小(在您的情况下为样本数)。
void QwtPlotCurve::setSamples(const double *xData, const double *yData, int size)
在您的情况下,yData 是来自 FFT 的数据,xData 是一个从 FFT 的最小到最大/2 频率值扫描的数组,当信号是真实信号时丢弃另一半:
curve->setSamples(signalx, magnitude, N/2);
如果我是正确的,这应该可以工作。
编辑
也改变:
signalx[i]=i;
magnitude[i]=sqrt(reout[i]*reout[i] + imgout[i]*imgout[i]); //calculate magnitude
到:
signalx[i]=(double)(Fs * i) / (double)N;
magnitude[i]=sqrt(reout[i]*reout[i] + imgout[i]*imgout[i]) / ((double)N / 2.0);
表示图中幅度[i] 元素的频率。
您还应该检查nyquist frequency。以 1000Hz 采样 500Hz 正弦波会产生混叠,如果您绘制 signal[] 数据(以离散步骤),您可以看到它。
【讨论】: