我想绘制频谱(就像他们在Audacity中所做的那样)。因此,我想要在x轴上的赫兹频率和在y轴上的幅度。 我的输入是一个周期性的正弦波,振幅为0.7,频率为500HZ。我使用FFTW计算幅度和QWT。 我的问题是,我应该在setSamples中放入什么参数来获得500 HZ的图片? 任何帮助,将不胜感激 这是我的代码
答案 0 :(得分:0)
从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正弦波会产生混叠,如果您绘制信号[]数据(在不连续的步骤中),您可以看到它。