From ce5f541fb4d07f91dfe0368c943ab84df04ccfe1 Mon Sep 17 00:00:00 2001 From: Zhang0626 Date: Tue, 2 Aug 2022 10:19:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=A7=AF=E5=88=86=E3=80=81?= =?UTF-8?q?=E5=BE=AE=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ChaosDataPlayer/Calculation.cpp | 45 +++++++++++ ChaosDataPlayer/Calculation.hpp | 5 +- ChaosDataPlayer/ChildForm.cpp | 129 +++++++++++++++----------------- ChaosDataPlayer/ChildForm.h | 1 + ChaosDataPlayer/MainWidget.cpp | 14 +++- ChaosDataPlayer/global.h | 1 + 6 files changed, 122 insertions(+), 73 deletions(-) diff --git a/ChaosDataPlayer/Calculation.cpp b/ChaosDataPlayer/Calculation.cpp index a37e25e..3db04ba 100644 --- a/ChaosDataPlayer/Calculation.cpp +++ b/ChaosDataPlayer/Calculation.cpp @@ -422,6 +422,51 @@ double Calculation::Phase(QVector & vecData) return Phase2 - Phase1; } +void Calculation::_Integration(QVector & vecData,QVector& retData,double& RMS) +{ + QVector realshiftfft; + QVector imageshiftfft; + QVector realvalue,imagevalue; + _FFT(vecData,realshiftfft,imageshiftfft); + + for (int i = 0; i < 10; i++) { + realshiftfft[i] = 0; + imageshiftfft[i] = 0; + } + for (int i = 1000; i < realshiftfft.size(); i++) { + realshiftfft[i] = 0; + imageshiftfft[i] = 0; + } + qDebug()<< realshiftfft.size() << endl; + qDebug()<< imageshiftfft.size() << endl; + + for(int k = 1; k < realshiftfft.size()+1;k++){ + realvalue.push_back((realshiftfft.at(k-1)/(k*2*3.14))*1000 * 2);//单位转换mm/s,*1000 *2 精度损失 + imagevalue.push_back((imageshiftfft.at(k-1)/(k*2*3.14))*1000 * 2);//单位转换mm/s,*1000 + } + + _iFFT(realvalue,imagevalue,retData); + + float Sum = 0.0; + for(int j = 0; j < retData.size();j++){ + float fData = retData[j]*retData[j]; + Sum += fData; + } + + RMS = sqrt(Sum/(float)retData.size()); //有效值 + +} + +void Calculation::_Differentiation(QVector & vecData,QVector& retData) +{ + retData.push_back(vecData[0]); + for(int j = 1; j < vecData.size()-3;j++) + { + retData.push_back((vecData.at(j+1)-vecData.at(j-1))/(double)(2*1/(double)vecData.size())); + } + retData.push_back(vecData.at(vecData.size()-1)); +} + QVector Calculation::ComputeDenCoeffs(int FilterOrder, double Lcutoff, double Ucutoff) { int k; // loop variables diff --git a/ChaosDataPlayer/Calculation.hpp b/ChaosDataPlayer/Calculation.hpp index b803604..b7f306b 100644 --- a/ChaosDataPlayer/Calculation.hpp +++ b/ChaosDataPlayer/Calculation.hpp @@ -71,7 +71,10 @@ public: void _fft(QVector & vecData, QVector & vecFFTrealData,QVector & vecFFTimageData); void _iFFT(QVector & vecData, QVector & vecFFTSpecData,QVector & veciFFTData); - + //积分 + void _Integration(QVector & vecData,QVector& retData,double& RMS); + //微分 + void _Differentiation(QVector & vecData,QVector& retData); //包络图谱数据 void envSpec(QVector & vecData, QVector & vecEnvSpecData,int StartFrequency,int EndFrequency,bool PolarPlot=false); diff --git a/ChaosDataPlayer/ChildForm.cpp b/ChaosDataPlayer/ChildForm.cpp index 51bd014..517ed59 100644 --- a/ChaosDataPlayer/ChildForm.cpp +++ b/ChaosDataPlayer/ChildForm.cpp @@ -53,7 +53,7 @@ ChildForm::ChildForm(FormType iType,QString m_strName,DEVICE_INFO* DeviceInfo,QW m_isconnect(false), m_bRealTime(false), m_isPause(false), - m_isStop(false) + m_isStop(true) { m_position = 0; m_nStart = 0; @@ -224,6 +224,10 @@ ChildForm::ChildForm(FormType iType,QString m_strName,DEVICE_INFO* DeviceInfo,QW ChildForm::~ChildForm() { + qDebug() << "~ChildForm" << endl; + if(!m_isStop){ + emit InitWaveSig(); + } free(tracer); free(tracer2); free(tracerLabel); @@ -273,7 +277,13 @@ void ChildForm::InitRpmDisPaly() } m_bRpm = false; } - +void ChildForm::InitIntegration() +{ + m_bIntegration = false; + m_bDifferentiation = false; + m_bDoubleIntegration = false; + m_bDoubleDifferentiation = false; +} void ChildForm::InitWidget() { QMenu *ZoomMenu = new QMenu(); @@ -590,6 +600,14 @@ void ChildForm::SecondData(const QString& strID,WAVE_DATA& waveData,WAVE_DISPALY waveShowData.Key.push_back(f); waveShowData.wavedata_DC.push_back(waveData.waveDataRealTime.at(j)); } + if(m_bIntegration){ + QVector retValue; + double RMS = 0.0; + pCalculation->_Integration(waveShowData.wavedata,retValue,RMS); + QVector().swap(waveShowData.wavedata); + waveShowData.wavedata = retValue; + waveShowData.RMS = RMS; + } qDebug() << "waveShowData.wavedata_DC" << waveShowData.wavedata_DC.size()<< endl; }else{ QVector vecOutData; @@ -1890,7 +1908,7 @@ void ChildForm::RemoveSeries(QString strID) qDebug()<<"::ChildForm::waveGraph" <widget->yAxis->setLabel("Velocity(mm/s)"); + ui->widget->xAxis->setLabel(strRMS); + } + graph->rescaleValueAxis(); graph->setName(waveShowData.channleName); QPen pen; @@ -2888,70 +2913,32 @@ void ChildForm::CalculateIntegration(bool isDoubleIntegration) { ui->widget->clearGraphs(); QMap().swap(waveGraph); - QVector x,y,y1,realvalue,imagevalue; + QVector x,y; QVector temDCWave; - QVector temHanning; - QVector AddHanning; - QVector realshiftfft; - QVector imageshiftfft; - QVector ifft; QMap::Iterator iter = mapWaveDisplayData.begin(); for (int i = 0; i < listChannelID.size(); ++i){ for(;iter != mapWaveDisplayData.end();iter++){ if(listChannelID.at(i) == iter.key()){ QVector().swap(x); QVector().swap(y); - QVector().swap(realvalue); - QVector().swap(imagevalue); QVector().swap(temDCWave); - QVector().swap(realshiftfft); - QVector().swap(imageshiftfft); for(int j = 0; j < iter.value().SamleRate;j++){ temDCWave.push_back(iter.value().wavedata.at(j) - iter.value().mean); } - pCalculation->_FFT(temDCWave,realshiftfft,imageshiftfft); - - for (int i = 0; i < 10; i++) { - realshiftfft[i] = 0; - imageshiftfft[i] = 0; - } - for (int i = 1000; i < realshiftfft.size(); i++) { - realshiftfft[i] = 0; - imageshiftfft[i] = 0; - } - qDebug()<< realshiftfft.size() << endl; - qDebug()<< imageshiftfft.size() << endl; - - for(int k = 1; k < realshiftfft.size()+1;k++){ - //qDebug()<< k << endl; - //x.push_back(k - 1); - realvalue.push_back((realshiftfft.at(k-1)/(k*2*3.14))*1000);//单位转换mm/s,*1000 - imagevalue.push_back((imageshiftfft.at(k-1)/(k*2*3.14))*1000);//单位转换mm/s,*1000 - } + double rms = 0.0; double f = 0.0; + pCalculation->_Integration(temDCWave,y,rms); - pCalculation->_iFFT(realvalue,imagevalue,y); if(isDoubleIntegration){ m_bDoubleIntegration = true; - qDebug() << "DoubleIntegration" << endl; - QVector realshiftfft2; - QVector imageshiftfft2; - QVector key,Proximeter,realvalue2,imagevalue2; - pCalculation->_FFT(y,realshiftfft2,imageshiftfft2); - qDebug()<< "imageshiftfft2" <_iFFT(realvalue2,imagevalue2,Proximeter); - qDebug()<< "Proximeter" << Proximeter.size() << endl; + QVector key,Proximeter; + pCalculation->_Integration(y,Proximeter,rms); double gap = (double)1/(double)Proximeter.size(); for(int ii = 0; ii < Proximeter.size();ii++){ - f += gap; - key.push_back(f); + f += gap; + key.push_back(f); } - qDebug()<< "key" <widget->xAxis->setRange(0, 1); QCPGraph* graph = ui->widget->addGraph(); ui->widget->graph(i)->setData(key, Proximeter); @@ -2970,6 +2957,7 @@ void ChildForm::CalculateIntegration(bool isDoubleIntegration) waveGraph.insert(listChannelID.at(i), graph); }else{ + double gap = (double)1/(double)y.size(); for(int ii = 0; ii < y.size();ii++){ f += gap; @@ -2986,6 +2974,8 @@ void ChildForm::CalculateIntegration(bool isDoubleIntegration) pen.setWidth(0); ui->widget->graph(i)->setPen(pen); // give the axes some labels: + // QString strRMS = QString("Time(s) %1: %2").arg( "RMS" ).arg(rms); + ui->widget->xAxis->setLabel("Time(s)"); if(iter.value().channelType =="VELOCITY"){ ui->widget->yAxis->setLabel("PROXIMETER(um)"); @@ -3005,23 +2995,23 @@ void ChildForm::CalculateIntegration(bool isDoubleIntegration) void ChildForm::CalculateDifferentiation(bool isDoubleDifferentiation) { QVector key,value,yValue,key2,yValue2; + QVector temDCWave,diffValue,diffValue2; QMap::Iterator iter = mapWaveDisplayData.begin(); for (int i = 0; i < listChannelID.size(); ++i){ for(;iter != mapWaveDisplayData.end();iter++){ if(listChannelID.at(i) == iter.key()){ double gap,f; - f= 0; + f= 0.0; + QVector().swap(temDCWave); + QVector().swap(diffValue); gap = (double)1/(double)iter.value().SamleRate; - - value.push_back(iter.value().wavedata.at(0) - iter.value().mean); - for(int j = 1; j < iter.value().SamleRate-3;j++) - { - value.push_back((iter.value().wavedata.at(j+1)-iter.value().wavedata.at(j-1))/(double)(2*1/(double)iter.value().SamleRate)); + for(int j = 0; j < iter.value().SamleRate;j++){ + temDCWave.push_back(iter.value().wavedata.at(j) - iter.value().mean); } - value.push_back(iter.value().wavedata.at(iter.value().SamleRate-1) - iter.value().mean); + pCalculation->_Differentiation(temDCWave,diffValue); - for(int i = 0 ; i < value.size();i++){ - yValue.push_back(value[i]/(double)10000); + for(int i = 0 ; i < diffValue.size();i++){ + yValue.push_back(diffValue[i]/(double)10000); f += gap; key.push_back(f); } @@ -3030,17 +3020,12 @@ void ChildForm::CalculateDifferentiation(bool isDoubleDifferentiation) if(isDoubleDifferentiation){//二次微分 m_bDoubleDifferentiation = true; - QVector().swap(value); - f = 0; - value.push_back(yValue[0]); - for(int jj = 1; jj < yValue.size()-3;jj++) - { - value.push_back((yValue.at(jj+1)-yValue.at(jj-1))/(double)(2*1/(double)iter.value().SamleRate)); - } - value.push_back(yValue[yValue.size()-1]); + QVector().swap(diffValue2); + f = 0.0; + pCalculation->_Differentiation(yValue,diffValue2); - for(int i = 0 ; i < value.size();i++){ - yValue2.push_back(value[i]/(double)10000); + for(int i = 0 ; i < diffValue2.size();i++){ + yValue2.push_back(diffValue2[i]/(double)10000); f += gap; key2.push_back(f); } @@ -3050,7 +3035,11 @@ void ChildForm::CalculateDifferentiation(bool isDoubleDifferentiation) }else{ ui->widget->xAxis->setRange(0, 1); ui->widget->graph(i)->setData(key, yValue); - ui->widget->yAxis->setLabel("Velocity(mm/s)"); + if(iter.value().channelType == "VELOCITY") + ui->widget->yAxis->setLabel("ACCELEROMETER(mm/s)"); + else if(iter.value().channelType == "THRUST" || + iter.value().channelType == "PROXIMETER") + ui->widget->yAxis->setLabel("Velocity(mm/s)"); } waveGraph.insert(listChannelID.at(i), graph); @@ -3062,7 +3051,7 @@ void ChildForm::CalculateDifferentiation(bool isDoubleDifferentiation) pen.setWidth(0); ui->widget->graph(i)->setPen(pen); // give the axes some labels: - ui->widget->xAxis->setLabel("Frequency(Hz)"); + ui->widget->xAxis->setLabel("Time(s)"); ui->widget->replot(QCustomPlot::rpImmediateRefresh); } diff --git a/ChaosDataPlayer/ChildForm.h b/ChaosDataPlayer/ChildForm.h index 68234a4..43bfc85 100644 --- a/ChaosDataPlayer/ChildForm.h +++ b/ChaosDataPlayer/ChildForm.h @@ -102,6 +102,7 @@ public: void CalculateDifferentiation(bool isDoubleDifferentiation = false); void EnableBtn(); void UpdateDiffMenu(); + void InitIntegration(); QVector childWave; QVector OrbitXWave,OrbitYWave; QVector vecKeyPhasor; diff --git a/ChaosDataPlayer/MainWidget.cpp b/ChaosDataPlayer/MainWidget.cpp index 7fcb377..901314e 100644 --- a/ChaosDataPlayer/MainWidget.cpp +++ b/ChaosDataPlayer/MainWidget.cpp @@ -683,7 +683,11 @@ void MainWidget::addChildItem(QTreeWidgetItem *pDataItem,QTreeWidgetItem *pNoIte filename = datpath + sfileName; QFileInfo file(filename); if(file.exists()){ - + qDebug() << datpath << endl; + QIcon icon(":/images/images/imgTreeIcon/remove6.png"); + pNewItem->setIcon(0, icon); + pNewItem->setData(0,FILE_ROLE,0); + pSizeItem->addChild(pNewItem); }else{ QIcon icon(":/images/images/imgTreeIcon/remove2.png"); pNewItem->setIcon(0, icon); @@ -698,7 +702,10 @@ void MainWidget::addChildItem(QTreeWidgetItem *pDataItem,QTreeWidgetItem *pNoIte filename = datpath + sfileName; QFileInfo file(filename); if(file.exists()){ - + QIcon icon(":/images/images/imgTreeIcon/remove6.png"); + pNewItem->setIcon(0, icon); + pNewItem->setData(0,FILE_ROLE,0); + pSizeItem->addChild(pNewItem); }else{ QIcon icon(":/images/images/imgTreeIcon/remove2.png"); pNewItem->setIcon(0, icon); @@ -713,6 +720,9 @@ void MainWidget::addChildItem(QTreeWidgetItem *pDataItem,QTreeWidgetItem *pNoIte filename = datpath + sfileName; QFileInfo file(filename); if(file.exists()){ + QIcon icon(":/images/images/imgTreeIcon/remove6.png"); + pNewItem->setIcon(0, icon); + pNewItem->setData(0,FILE_ROLE,0); pSizeItem->addChild(pNewItem); }else{ QIcon icon(":/images/images/imgTreeIcon/remove2.png"); diff --git a/ChaosDataPlayer/global.h b/ChaosDataPlayer/global.h index 199b73b..25e5b63 100644 --- a/ChaosDataPlayer/global.h +++ b/ChaosDataPlayer/global.h @@ -102,6 +102,7 @@ typedef struct { float iTriggerValue; float iHysteresis; bool tachAutoTach; + double RMS; } WAVE_DISPALYDATA; typedef struct{