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

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;
inFFt = (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++) {
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;
_FFT(vecData,realshiftfft,imageshiftfft);
for (int i = 0; i < 5 / resolution; i++) {
for (int i = 0; i <= 5 / resolution; i++) {
realshiftfft[i] = 0;
imageshiftfft[i] = 0;
}

View File

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