优化频域计算方法,取完整原始数据计算

This commit is contained in:
CHINAMI-TV221UM\Administrator 2024-08-17 10:22:46 +08:00
parent 8fa77c8f91
commit 8fc887fc58
3 changed files with 54 additions and 34 deletions

BIN
Cidn-SH

Binary file not shown.

View File

@ -368,7 +368,6 @@ void Calculation::FFTSpec(std::vector<float> & vecData, std::vector<float> & vec
fftw_complex *inFFt, *outFFt; fftw_complex *inFFt, *outFFt;
inFFt = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * vecData.size()); inFFt = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * vecData.size());
outFFt = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * vecData.size()); outFFt = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * vecData.size());
printf("1---------------------------------------------->%d\n",vecData.size());
for (int j = 0; j < vecData.size(); j++) { for (int j = 0; j < vecData.size(); j++) {
inFFt[j][0] = (double)vecData[j]; inFFt[j][0] = (double)vecData[j];
@ -455,7 +454,7 @@ void Calculation::Integration(std::vector<float> & vecData,std::vector<float>& r
std::vector<float> realvalue,imagevalue; std::vector<float> realvalue,imagevalue;
_FFT(vecData,realshiftfft,imageshiftfft); _FFT(vecData,realshiftfft,imageshiftfft);
for (int i = 0; i < 5 / resolution; i++) { for (int i = 0; i <= 5 / resolution; i++) {
realshiftfft[i] = 0; realshiftfft[i] = 0;
imageshiftfft[i] = 0; imageshiftfft[i] = 0;
} }

View File

@ -1745,31 +1745,33 @@ std::string JsonData::JsonCmd_Cgi_30(Param_30 &param)
}else{ }else{
while(inFile.read((char *)&fTemp,sizeof(fTemp))) while(inFile.read((char *)&fTemp,sizeof(fTemp)))
{ // 取8K进行计算 { // 取8K进行计算
if(i < 8192) //if(i < 8192)
{ {
vecWave.push_back(fTemp); vecWave.push_back(fTemp);
}else{
break;
} }
i++; // else{
// break;
// }
// i++;
} }
//测试正弦波 //测试正弦波
//pCalculation->GenerateSin(vecWave); //pCalculation->GenerateSin(vecWave);
if(vecWave.size() < 8192){ // if(vecWave.size() < 8192){
for(int i = vecWave.size(); i < 8192;i++){ // for(int i = vecWave.size(); i < 8192;i++){
vecWave.push_back(0); // vecWave.push_back(0);
} // }
} // }
//添加汉宁窗 //添加汉宁窗
pCalculation->Hanning(vecWave, hanningWave); // pCalculation->Hanning(vecWave, hanningWave);
for(int i = 0; i < vecWave.size();i++){ // for(int i = 0; i < vecWave.size();i++){
addhanningWave.push_back(vecWave[i]*hanningWave[i]); // addhanningWave.push_back(vecWave[i]*hanningWave[i]);
} // }
//进行傅立叶变换 //进行傅立叶变换
pCalculation->FFTSpec(addhanningWave, fftWave); pCalculation->FFTSpec(vecWave, fftWave);
sampleRateReference = 1024; sampleRateReference = 1024;
} }
/*for(int i = 0; i < fftWave.size();i++){ /*for(int i = 0; i < fftWave.size();i++){
fftWave[i] = fftWave[i]*2; fftWave[i] = fftWave[i]*2;
@ -1830,7 +1832,8 @@ std::string JsonData::JsonCmd_Cgi_30(Param_30 &param)
if(res[17]=="01"){ if(res[17]=="01"){
SampleRate = atoi(res[23].c_str()); SampleRate = atoi(res[23].c_str());
printf("@@@@@@@@@@@@@@@@@@@@sample_rate=%d\n",SampleRate); printf("@@@@@@@@@@@@@@@@@@@@sample_rate=%d\n",SampleRate);
resolution = (((double)SampleRate/1000)*1024)/ 8192; resolution = (((double)SampleRate/1000)*1016)/ vecWave.size();
//resolution = (double)SampleRate/vecWave.size();
}else if(res[17]=="02"){ }else if(res[17]=="02"){
string::size_type comper = param.mChannelId.find("Z"); string::size_type comper = param.mChannelId.find("Z");
@ -1840,9 +1843,15 @@ std::string JsonData::JsonCmd_Cgi_30(Param_30 &param)
//resolution = (((double)vecWave.size()/1000)*1024)/ (SampleRate * ((vecWave.size()/SampleRate))); //resolution = (((double)vecWave.size()/1000)*1024)/ (SampleRate * ((vecWave.size()/SampleRate)));
printf("@@@@@@@@@@@@@@@@@@@@sample_rate=%d,resolution = %f\n",SampleRate,resolution); printf("@@@@@@@@@@@@@@@@@@@@sample_rate=%d,resolution = %f\n",SampleRate,resolution);
}else{ }else{
SampleRate = 8000; SampleRate = 8192;
printf("@@@@@@@@@@@@@@@@@@@@sample_rate=%d\n",SampleRate); printf("@@@@@@@@@@@@@@@@@@@@sample_rate=%d\n",SampleRate);
resolution = (((double)SampleRate/1024)*1024)/ 8192; if (vecWave.size() < 8192)
{
resolution = (double)SampleRate/ vecWave.size();
}else{
resolution = (double)SampleRate/ 8192;
}
} }
} }
@ -2005,7 +2014,7 @@ std::string JsonData::JsonCmd_Cgi_40(Param_40 &param)
if(res[17]=="01"){ if(res[17]=="01"){
SampleRate = atoi(res[23].c_str()); SampleRate = atoi(res[23].c_str());
printf("@@@@@@@@@@@@@@@@@@@@sample_rate=%d\n",SampleRate); printf("@@@@@@@@@@@@@@@@@@@@sample_rate=%d\n",SampleRate);
resolution = (((double)SampleRate/1000)*1024)/ 8192; resolution = (((double)SampleRate/1000)*1016)/ 8192;
}else if(res[17]=="02"){ }else if(res[17]=="02"){
string::size_type comper = param.mChannelId.find("Z"); string::size_type comper = param.mChannelId.find("Z");
if (comper != string::npos) { if (comper != string::npos) {
@ -2515,7 +2524,7 @@ std::string JsonData::JsonCmd_Cgi_55(Param_55 &param)
if(res[17]=="01"){ if(res[17]=="01"){
printf("@@@@@@@@@@@@@@@@@@@@sample_rate=%d\n",SampleRate); printf("@@@@@@@@@@@@@@@@@@@@sample_rate=%d\n",SampleRate);
resolution = (((double)SampleRate/1000)*1024)/ 8192; resolution = (((double)SampleRate/1000)*1016)/ 8192;
}else if(res[17]=="02"){ }else if(res[17]=="02"){
string::size_type comper = param.mChannelId.find("Z"); string::size_type comper = param.mChannelId.find("Z");
@ -2656,36 +2665,47 @@ std::string JsonData::JsonCmd_Cgi_56(Param_56 &param)
}else{ }else{
while(inFile.read((char *)&fTemp,sizeof(fTemp))) while(inFile.read((char *)&fTemp,sizeof(fTemp)))
{ // 取8K进行计算 { // 取8K进行计算
if(i < 8192) //if(i < 8192)
{ {
vecWave.push_back(fTemp); vecWave.push_back(fTemp);
}else{
break;
} }
i++; // else{
// break;
// }
// i++;
} }
if(res[17]=="01"){ if(res[17]=="01"){
printf("@@@@@@@@@@@@@@@@@@@@sample_rate=%d\n",SampleRate); printf("@@@@@@@@@@@@@@@@@@@@sample_rate=%d\n",SampleRate);
resolution = (((double)SampleRate/1000)*1024)/ 8192; resolution = (((double)SampleRate/1000)*1016)/ vecWave.size();
//resolution = (double)SampleRate/vecWave.size(); //resolution = (double)SampleRate/vecWave.size();
}else if(res[17]=="02"){ }else if(res[17]=="02"){
string::size_type comper = param.mChannelId.find("Z"); string::size_type comper = param.mChannelId.find("Z");
{ if (comper != string::npos) {
SampleRate = 8000; SampleRate = atoi(res[23].c_str());
resolution = (double)SampleRate/vecWave.size();
//resolution = (((double)vecWave.size()/1000)*1024)/ (SampleRate * ((vecWave.size()/SampleRate)));
printf("@@@@@@@@@@@@@@@@@@@@sample_rate=%d,resolution = %f\n",SampleRate,resolution);
}else{
SampleRate = 8192;
printf("@@@@@@@@@@@@@@@@@@@@sample_rate=%d\n",SampleRate); printf("@@@@@@@@@@@@@@@@@@@@sample_rate=%d\n",SampleRate);
resolution = (((double)SampleRate/1024)*1024)/ 8192; if (vecWave.size() < 8192)
{
resolution = (double)SampleRate/ vecWave.size();
}else{
resolution = (double)SampleRate/ 8192;
}
} }
} }
//测试正弦波 //测试正弦波
//pCalculation->GenerateSin(vecWave); //pCalculation->GenerateSin(vecWave);
if(vecWave.size() < 8192){ // if(vecWave.size() < 8192){
for(int i = vecWave.size(); i < 8192;i++){ // for(int i = vecWave.size(); i < 8192;i++){
vecWave.push_back(0); // vecWave.push_back(0);
} // }
} // }
// //添加汉宁窗 // //添加汉宁窗
// pCalculation->Hanning(vecWave, hanningWave); // pCalculation->Hanning(vecWave, hanningWave);
// for(int i = 0; i < vecWave.size();i++){ // for(int i = 0; i < vecWave.size();i++){
@ -2695,6 +2715,7 @@ std::string JsonData::JsonCmd_Cgi_56(Param_56 &param)
// //积分 // //积分
pCalculation->Integration(vecWave, IntegrationWave,resolution); pCalculation->Integration(vecWave, IntegrationWave,resolution);
pCalculation->FFTSpec(IntegrationWave, fftWave); pCalculation->FFTSpec(IntegrationWave, fftWave);
sampleRateReference = 1024; sampleRateReference = 1024;
} }
/*for(int i = 0; i < fftWave.size();i++){ /*for(int i = 0; i < fftWave.size();i++){