实时绘制频谱?
Posted
技术标签:
【中文标题】实时绘制频谱?【英文标题】:Plot Spectrum in real time? 【发布时间】:2014-07-08 19:21:21 【问题描述】:我想在 Qwt Oscillocope 的示例中添加和绘制信号频谱。我的想法是创建另一个 seriesData 类。 意甲数据。我想知道SeriesData的样本和Signaldata的样本之间是否不会冲突,或者我只需要修改signaldata? 任何帮助和建议将不胜感激。谢谢
【问题讨论】:
【参考方案1】:输入信号通常是循环缓冲区的形式,输出缓冲区可以是静态的。这也适用于时域图。如果你不得不改变它们,如果你没有真正看到你的结构是不可能回答的我是这样做的:
为 FFT 制作一些缓冲区(数组)
可以是静态的...不会发生任何变化。它的大小必须至少为slowest_timebase/fsampling
个样本。如果您的 FFT 具有复杂的域输入,则将大小加倍。如果要滚动/缩放/取消缩放,请相应放大尺寸
找到实际示波器视图的开始示例
通过触发器或对于初学者来说只是最后 N 个样本(但它会因为相位而闪烁......),或者您以与采样相同的速度从头到尾按 N 个样本块预览所有样本。类似于您将数据发送到声卡以播放声音。你只是在一段时间后开始,所以你已经有足够的采样数据......
处理数据
将数据从起点复制到 FFT 缓冲区,如果需要,添加样本的虚部 (Im=0.0
) 并处理 FFT。然后绘制输出的前半部分,例如sqrt(Re^2+Im^2)
。
i
-th 样本的频率(在N
之外)是f=i*samplerate/N [Hz]
,其中i= 1,...,(N/2)-1
跳过代表DC 分量的i=0
。
您还可以将对数轴添加到频率。在这种情况下,不要忘记更改 plot 中的 x
值
更新开始位置
只需将已使用样本的大小 (N
) 添加到开始位置,不要忘记在找到真正开始之前,触发器也会将此时间用作开始点...
更多信息和演示见plotting real time Data on (qwt )Oscillocope
【讨论】:
现在我可以实时绘制信号和 FFT。现在我想在我的示波器中添加一些功能,例如触发器。如何使用 qt/c++ 实现触发功能 @TheMan 现在你很容易连续播放输入数据缓冲区,所以不要从当前缓冲区位置进行 FFT/绘制,而是从那里开始并搜索选定的触发条件。如果找到从该点开始 FFT/绘制。下一帧以相同的方式执行,但从下一个位置开始搜索,就像没有使用触发器一样。这就对了。为了使触发器正常工作,缓冲区应该足够大(屏幕+几个输入信号周期至少 2) @TheMan 就像在示波器上一样,在应用 FFT 之前,您会找到正确的起始位置 ...以上是关于实时绘制频谱?的主要内容,如果未能解决你的问题,请参考以下文章