【基于树莓派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控件上,并作峰值检测和峰值统计。
正在学习电子电路设计与制作,资料有用,学习了,感谢您的分字。