diff --git a/Cidn-SH b/Cidn-SH index f82a0ba..9a31d2c 100755 Binary files a/Cidn-SH and b/Cidn-SH differ diff --git a/uart/uart.cpp b/uart/uart.cpp index d4ccef4..65bb4f6 100644 --- a/uart/uart.cpp +++ b/uart/uart.cpp @@ -349,7 +349,6 @@ int Uart::DealAskTask(uint16_t ushortAdd){ int taskID = scheduler::instance().StartSchedule(ushortAdd,next_duration); ScheduleTask scheduleTask; zlog_info(zct, "taskID = %d ", taskID); - taskID = 5; if (taskID == kScheduleEigenValue) //1.特征值 { char localtimestamp[32] = {0x00}; @@ -641,7 +640,6 @@ void Uart::DealDataNodeName(const char *pData) { data_publish(strData.c_str(), GlobalConfig::Topic_G.mPubConfig.c_str()); char szTableName[50] = {0x00}; - char sql_table_exist[50] = {0}; sprintf(szTableName, "t_data_%s", MeasurementID); memset(whereCon,0,sizeof(whereCon)); sprintf(whereCon,"type='table' and name = '%s'",szTableName); @@ -650,7 +648,6 @@ void Uart::DealDataNodeName(const char *pData) { if (ret == 0){ sqlite_db_ctrl::instance().Createtable(szTableName); } - memset(sql_table_exist, 0x00, sizeof(sql_table_exist)); memset(szTableName, 0x00, sizeof(szTableName)); sprintf(szTableName, "t_dataStatic_%s", MeasurementID); memset(whereCon,0,sizeof(whereCon)); @@ -1083,8 +1080,6 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) { sqlite_db_ctrl::instance().InsertData(" receive_wave_status ", insertSql); JsonData jd; jd.JsonCmd_32(strMeasurementID,1,1,strChannelID,error_msg); - - break; } diff --git a/uart/uart_feature_parse.cpp b/uart/uart_feature_parse.cpp index f61944c..a51c4f1 100644 --- a/uart/uart_feature_parse.cpp +++ b/uart/uart_feature_parse.cpp @@ -810,14 +810,19 @@ void Uart::DealWave() { g_VecWaveDataZ.clear(); VecWaveDataZ.clear(); } - char localtimestamp[32] = {0}; - GetTimeNet(localtimestamp, 1); - char insertSql[100] = {0x00}; - char whereCon[50] = {0x00}; - sprintf(whereCon, "MeasurementID='%s'",strMeasurementID.c_str()); - memset(whereCon, 0x00, sizeof(whereCon)); - sprintf(insertSql, "'%s','%02x%02x','%s',0,'1','%s' ", strMeasurementID.c_str(),(wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF,localtimestamp,""); - sqlite_db_ctrl::instance().InsertData(" receive_wave_status ", insertSql); + if (m_waveCountX > 0 || m_waveCountY > 0 || m_waveCountZ > 0) + { + char localtimestamp[32] = {0}; + GetTimeNet(localtimestamp, 1); + char insertSql[100] = {0x00}; + char whereCon[50] = {0x00}; + sprintf(whereCon, "MeasurementID='%s'",strMeasurementID.c_str()); + memset(whereCon, 0x00, sizeof(whereCon)); + sprintf(insertSql, "'%s','%02x%02x','%s',0,'1','%s' ", strMeasurementID.c_str(),(wave_shortAddr >> 8) & 0xFF,wave_shortAddr & 0xFF,localtimestamp,""); + sqlite_db_ctrl::instance().InsertData(" receive_wave_status ", insertSql); + } + + wave_trans_ = false; } } diff --git a/uart/uart_parameter_config.cpp b/uart/uart_parameter_config.cpp index 81651d5..d96d92b 100644 --- a/uart/uart_parameter_config.cpp +++ b/uart/uart_parameter_config.cpp @@ -49,7 +49,7 @@ void Uart::UpdateWirelessNode(uint16_t shortAdd) { char localtimestamp[32] = {0}; GetTimeNet(localtimestamp, 1); char insertSql[100] = {0}; - char wherecon[50] = {0}; + char wherecon[64] = {0}; sprintf(wherecon," short_Addr = '%02x%02x' and status = 3 order by start_timestamp DESC",UINT16_HIGH(shortAdd), UINT16_LOW(shortAdd)); std::string spend_count = sqlite_db_ctrl::instance().GetData(" firmware_upgrade ","spend_count",wherecon); if (atoi(spend_count.c_str()) >= 10){ diff --git a/utility/calculation.cpp b/utility/calculation.cpp index 96db701..5347b3a 100644 --- a/utility/calculation.cpp +++ b/utility/calculation.cpp @@ -295,3 +295,49 @@ void Calculation::Integration(std::vector &vecData, std::vector &r _iFFT(realvalue, imagevalue, retData); } + + +std::vector fftInterpolate(const std::vector& input, size_t outputSize) { + size_t inputSize = input.size(); + + // 1. FFTW 初始化 + fftw_complex *freqDomain = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * inputSize); + fftw_complex *paddedFreqDomain = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * outputSize); + fftw_plan forwardPlan = fftw_plan_dft_r2c_1d(inputSize, const_cast(input.data()), freqDomain, FFTW_ESTIMATE); + + // 2. 执行 FFT + fftw_execute(forwardPlan); + + // 3. 频域插值:扩展频谱 + size_t halfSize = inputSize / 2 + 1; // 实数FFT的对称部分 + for (size_t i = 0; i < halfSize; ++i) { + paddedFreqDomain[i][0] = freqDomain[i][0]; // 实部 + paddedFreqDomain[i][1] = freqDomain[i][1]; // 虚部 + } + for (size_t i = halfSize; i < outputSize - halfSize; ++i) { + paddedFreqDomain[i][0] = 0.0; // 实部填零 + paddedFreqDomain[i][1] = 0.0; // 虚部填零 + } + for (size_t i = outputSize - halfSize; i < outputSize; ++i) { + paddedFreqDomain[i][0] = freqDomain[inputSize - (outputSize - i)][0]; + paddedFreqDomain[i][1] = freqDomain[inputSize - (outputSize - i)][1]; + } + + // 4. IFFT 变换回时域 + std::vector output(outputSize); + fftw_plan inversePlan = fftw_plan_dft_c2r_1d(outputSize, paddedFreqDomain, output.data(), FFTW_ESTIMATE); + fftw_execute(inversePlan); + + // 5. 缩放输出结果 + for (double& val : output) { + val /= outputSize; + } + + // 清理 FFTW + fftw_destroy_plan(forwardPlan); + fftw_destroy_plan(inversePlan); + fftw_free(freqDomain); + fftw_free(paddedFreqDomain); + + return output; +} \ No newline at end of file diff --git a/utility/calculation.hpp b/utility/calculation.hpp index a6a9e17..794d028 100644 --- a/utility/calculation.hpp +++ b/utility/calculation.hpp @@ -55,6 +55,8 @@ public: static void envSpec(std::vector& vecData, std::vector& vecEnvSpecData, int StartFrequency, int EndFrequency); static void Integration(std::vector& vecData, std::vector& retData, double& resolution); + + std::vector fftInterpolate(const std::vector& input, size_t outputSize) }; #endif // CALCULATION_HPP_