donatello1996 发表于 2022-10-23 21:13

【基于树莓派400的图像识别归类&运动检测&模拟信号处理系统第三帖】使用QT程序内...

<p><span style="font-size:20px;">【基于树莓派400的图像识别归类&amp;运动检测&amp;模拟信号处理系统第三帖】使用QT程序内建的QTcharts库做信号处理/分析/统计</span></p>

<p>&nbsp;</p>

<p><span style="font-size:20px;">&nbsp; &nbsp; &nbsp; &nbsp;要做信号处理分析,一个显示界面是必不可少的,大多数GUI开发工具都有自己的折线图显示界面,QT也不例外,QT的折线图显示控件叫QT charts,QT charts有虚函数,属于QT内部常用的子类,需要从QWidget父类中继承升级而来,我这次就用QT charts做了两个信号显示界面,一个是使用math库构建的三角函数叠加函数,另一个则是采集自真实数据,先看看怎么显示模拟出来的信号:</span></p>

<pre>
<code class="language-cpp">void MainWindow::This_Thread_Line_Chart()
{
    static int count = 0 , count_reflash = 0;
    int ret;
    float pres;
    while(1)
    {
      if(count &gt;= 1000000)
      {
            count = 0;
            Signal_Raw_data();
      }
      count_reflash++;
      count++;

    }
}</code></pre>

<pre>
<code class="language-cpp">void MainWindow::Raw_data_CounterUpdate_Line_Chart()
{
    int i;
    static int count = 0;
    series_raw_data-&gt;clear();
    for(i = 0 ; i &lt; N ; i ++)
    {
      //chart_raw_data_buf = sin(i*0.1 + count * 0.3);
      chart_raw_data_buf = sin(i*0.1 + count * 0.3) + 2 * sin(i*0.2 + count * 0.3)+ 3 * sin(i*0.3 + count * 0.3);
      series_raw_data-&gt;append(QPointF(i , chart_raw_data_buf));

    }
    FFTW_Mag_Test(chart_raw_data_buf , chart_fft_data_buf , 0 , N);

    int peakFs = { 0 };
    int peakFs_len = 0;
    int peakFs2 = { 0 };
    int peakFs2_len = 0;
    Mag_Find_Peaks(chart_fft_data_buf , N / 2 , 2 , peakFs , &amp;peakFs_len , peakFs2 , &amp;peakFs2_len);
    series_fft_data-&gt;clear();
    for(i = 0 ; i &lt; N / 2 ; i ++)
    {
      series_fft_data-&gt;append(QPointF(i , chart_fft_data_buf));
    }

    count++;
    if(count &gt;= 10000)count = 0;
}</code></pre>

<p><span style="font-size:20px;">使用信号槽的方式实现该功能,信号的发出方式可以是定时器溢出,也可以是线程内部的计时器/计数器等。将结果导出,并做FFT(快速傅里叶变换),将傅里叶变换结果也显示到另一QT chart控件上,并作峰值检测和峰值统计。</span></p>

<p>f071d1592b7d05c79f25374ec8bc2ccf<br />
&nbsp;</p>

zxcvbnm751120 发表于 2024-10-15 11:36

页: [1]
查看完整版本: 【基于树莓派400的图像识别归类&运动检测&模拟信号处理系统第三帖】使用QT程序内...