【问题标题】:Plot Spectrum in real time?实时绘制频谱?
【发布时间】:2014-07-08 19:21:21
【问题描述】:

我想在 Qwt Oscillocope 的示例中添加和绘制信号频谱。我的想法是创建另一个 seriesData 类。 意甲数据。我想知道SeriesData的样本和Signaldata的样本之间是否不会冲突,或者我只需要修改signaldata? 任何帮助和建议将不胜感激。谢谢

【问题讨论】:

    标签: c++ qt plot real-time qwt


    【解决方案1】:

    输入信号通常是循环缓冲区的形式,输出缓冲区可以是静态的。这也适用于时域图。如果你不得不改变它们,如果你没有真正看到你的结构是不可能回答的我是这样做的:

    1. 为 FFT 制作一些缓冲区(数组)

      可以是静态的...不会发生任何变化。它的大小必须至少为slowest_timebase/fsampling 个样本。如果您的 FFT 具有复杂的域输入,则将大小加倍。如果要滚动/缩放/取消缩放,请相应放大尺寸

    2. 找到实际示波器视图的开始示例

      通过触发器或对于初学者来说只是最后 N 个样本(但它会因为相位而闪烁......),或者您以与采样相同的速度从头到尾按 N 个样本块预览所有样本。类似于您将数据发送到声卡以播放声音。你只是在一段时间后开始,所以你已经有足够的采样数据......

    3. 处理数据

      将数据从起点复制到 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

    4. 更新开始位置

      只需将已使用样本的大小 (N) 添加到开始位置,不要忘记在找到真正开始之前,触发器也会将此时间用作开始点...

    更多信息和演示见plotting real time Data on (qwt )Oscillocope

    【讨论】:

    • 现在我可以实时绘制信号和 FFT。现在我想在我的示波器中添加一些功能,例如触发器。如何使用 qt/c++ 实现触发功能
    • @TheMan 现在你很容易连续播放输入数据缓冲区,所以不要从当前缓冲区位置进行 FFT/绘制,而是从那里开始并搜索选定的触发条件。如果找到从该点开始 FFT/绘制。下一帧以相同的方式执行,但从下一个位置开始搜索,就像没有使用触发器一样。这就对了。为了使触发器正常工作,缓冲区应该足够大(屏幕+几个输入信号周期至少 2)
    • @TheMan 就像在示波器上一样,在应用 FFT 之前,您会找到正确的起始位置 ...
    猜你喜欢
    • 2013-05-07
    • 2013-03-12
    • 2015-11-23
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    相关资源
    最近更新 更多