我要绘制的频谱(就像他们在无畏例如做)。 因此,我想在x轴频率(赫兹)和在y轴的振幅。 我的输入是周期性正弦波0,7幅度和500HZ作为frequency.I使用FFTW计算幅度和QWT绘制。 我的问题,我应该把什么参数setSamples获得500 HZ事先知情同意? 任何帮助,将在这里感谢是我的代码
Answer 1:
从文档必须设置两个指针到构建曲线(在你的情况下,样本数)的尺寸数据。
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]元件的频率。
您也应该检查的奈奎斯特频率 。 在1000Hz的农产品折叠取样500Hz的正弦波,如果你绘制你的信号[]数据(在不连续的步骤),你可以看到它。
文章来源: How to plot spectrum using FFTW3/ QWT?