@@ -969,6 +969,22 @@ static void measurementPhaseChanged(VNAMeasurementPhases ph) {
969
969
}
970
970
}
971
971
972
+ // Allow smooth complex data point array (this remove noise, smooth power depend form count)
973
+ static void measurementDataSmooth (complexf *data, int points, int count){
974
+ int j;
975
+ while (count--){
976
+ complexf prev = data[0 ];
977
+ // first point smooth
978
+ data[0 ] = (prev + prev + data[1 ])/3 .0f ;
979
+ for (j=1 ;j<points-1 ;j++){
980
+ complexf old = data[j]; // save current data point for next point smooth
981
+ data[j] = (prev + data[j] + data[j] + data[j+1 ])/4 .0f ;
982
+ prev = old;
983
+ }
984
+ // last point smooth
985
+ data[j] = (data[j] + data[j] + prev)/3 .0f ;
986
+ }
987
+ }
972
988
973
989
#define USE_FIXED_CORRECTION
974
990
// callback called by VNAMeasurement when an observation is available.
@@ -1026,6 +1042,11 @@ static void measurementEmitDataPoint(int freqIndex, freqHz_t freqHz, VNAObservat
1026
1042
ecalState = ECAL_STATE_DONE;
1027
1043
vnaMeasurement.ecalIntervalPoints = MEASUREMENT_ECAL_INTERVAL;
1028
1044
vnaMeasurement.measurement_mode = (enum MeasurementMode) current_props._measurement_mode ;
1045
+ measurementDataSmooth (measuredEcal[0 ], vnaMeasurement.sweepPoints , 16 );
1046
+ #ifndef ECAL_PARTIAL
1047
+ measurementDataSmooth (measuredEcal[1 ], vnaMeasurement.sweepPoints , 16 );
1048
+ measurementDataSmooth (measuredEcal[2 ], vnaMeasurement.sweepPoints , 16 );
1049
+ #endif
1029
1050
}
1030
1051
}
1031
1052
}
@@ -1052,6 +1073,24 @@ static void measurementEmitDataPoint(int freqIndex, freqHz_t freqHz, VNAObservat
1052
1073
collectMeasurementOffset = freqIndex > 0 ? freqIndex - 1 : vnaMeasurement.sweepPoints - 1 ;
1053
1074
} else if (collectMeasurementState == 1 && collectMeasurementOffset == freqIndex) {
1054
1075
collectMeasurementState = 0 ;
1076
+ #if 0
1077
+ // Made smooth result for calibration
1078
+ int count = 4;
1079
+ if(collectMeasurementType == CAL_LOAD)
1080
+ measurementDataSmooth(current_props._cal_data[CAL_LOAD], vnaMeasurement.sweepPoints, count);
1081
+ else if(collectMeasurementType == CAL_OPEN){
1082
+ measurementDataSmooth(current_props._cal_data[CAL_OPEN], vnaMeasurement.sweepPoints, count);
1083
+ measurementDataSmooth(current_props._cal_data[CAL_ISOLN_OPEN], vnaMeasurement.sweepPoints, count*8);
1084
+ }
1085
+ else if(collectMeasurementType == CAL_SHORT){
1086
+ measurementDataSmooth(current_props._cal_data[CAL_SHORT], vnaMeasurement.sweepPoints, count);
1087
+ measurementDataSmooth(current_props._cal_data[CAL_ISOLN_SHORT], vnaMeasurement.sweepPoints, count*8);
1088
+ }
1089
+ // else if(collectMeasurementType == CAL_THRU) { // Not need smooth thru calibration, no noise,
1090
+ // measurementDataSmooth(current_props._cal_data[CAL_THRU_REFL], vnaMeasurement.sweepPoints, count);
1091
+ // measurementDataSmooth(current_props._cal_data[CAL_THRU], vnaMeasurement.sweepPoints, count);
1092
+ // }
1093
+ #endif
1055
1094
collectMeasurementType = -1 ;
1056
1095
eventQueue.enqueue (collectMeasurementCB);
1057
1096
}
0 commit comments