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

donatello1996   2022-10-23 21:13 楼主

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

 

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

void MainWindow::This_Thread_Line_Chart()
{
    static int count = 0 , count_reflash = 0;
    int ret;
    float pres;
    while(1)
    {
        if(count >= 1000000)
        {
            count = 0;
            Signal_Raw_data();
        }
        count_reflash++;
        count++;

    }
}
void MainWindow::Raw_data_CounterUpdate_Line_Chart()
{
    int i;
    static int count = 0;
    series_raw_data->clear();
    for(i = 0 ; i < N ; i ++)
    {
        //chart_raw_data_buf[i] = sin(i*0.1 + count * 0.3);
        chart_raw_data_buf[i] = 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->append(QPointF(i , chart_raw_data_buf[i]));

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

    int peakFs[30] = { 0 };
    int peakFs_len = 0;
    int peakFs2[30] = { 0 };
    int peakFs2_len = 0;
    Mag_Find_Peaks(chart_fft_data_buf , N / 2 , 2 , peakFs , &peakFs_len , peakFs2 , &peakFs2_len);
    series_fft_data->clear();
    for(i = 0 ; i < N / 2 ; i ++)
    {
        series_fft_data->append(QPointF(i , chart_fft_data_buf[i]));
    }

    count++;
    if(count >= 10000)count = 0;
}

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

7.jpg 8.jpg

173c7c0010a22b169e5cfb310877a67f

 

回复评论 (1)

正在学习电子电路设计与制作,资料有用,学习了,感谢您的分字。

点赞  2024-10-15 11:36
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复