如何使用FFTW3/ QWT绘制频谱

How to plot spectrum using FFTW3/ QWT?

本文关键字:绘制 QWT 何使用 FFTW3      更新时间:2023-10-16

我想绘制频谱(就像他们在Audacity中所做的那样)。因此我想要x轴上以赫兹为单位的频率和y轴上的振幅。我的输入是一个周期性正弦波,振幅为0.7,频率为500HZ。我使用FFTW来计算幅度和QWT来绘图。我的问题是,我应该在setSamples中放入什么参数来获得500hz的图片?任何帮助都会很感激这是我的代码

在文档中,您必须设置两个指针指向构建曲线的数据和大小(在您的示例中为样本数)。

void QwtPlotCurve::setSamples(const double *xData, const double *yData, int size)

在您的例子中,yData是来自FFT的数据,xData是一个数组,它从最小到最大/2 FFT的频率值扫描,当信号是实信号时丢弃另一半:

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]元素的频率。

您还应该检查奈奎斯特频率。以1000Hz采样500Hz正弦波会产生混叠,如果你绘制信号[]数据(以离散步骤),你可以看到它。