如何使用FFTW3/ QWT绘制频谱
How to plot spectrum using FFTW3/ QWT?
我想绘制频谱(就像他们在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正弦波会产生混叠,如果你绘制信号[]数据(以离散步骤),你可以看到它。
相关文章:
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- SFML 文本未绘制在窗口上
- 如何在快板的屏幕中显示子位图的绘制?
- 如何绘制自定义形状的元素?
- QPainter 将 QBrush 设置为 在 QT/C++ 中绘制文本
- 除非重新绘制大小,否则SDL_Texture在调整大小后呈现黑色
- 绘制文本问题
- 在 QT C++中绘制/操作多边形
- 如何将 Qwt 图绘制到图像中
- C++ Qwt - 从矢量绘制数据
- qwt:绘制一维数组
- 如何使用FFTW3/ QWT绘制频谱