Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: SX1280PingPong RangignMaster RangingSlave MSNV2-Terminal_V1-6 ... more
RangingCorrection.cpp
00001 #include "RangingCorrection.h" 00002 00003 #include "rangingCorrection/rangingCorrectionSF5BW0400.h" 00004 #include "rangingCorrection/rangingCorrectionSF6BW0400.h" 00005 #include "rangingCorrection/rangingCorrectionSF7BW0400.h" 00006 #include "rangingCorrection/rangingCorrectionSF8BW0400.h" 00007 #include "rangingCorrection/rangingCorrectionSF9BW0400.h" 00008 #include "rangingCorrection/rangingCorrectionSF10BW0400.h" 00009 #include "rangingCorrection/rangingCorrectionSF5BW0800.h" 00010 #include "rangingCorrection/rangingCorrectionSF6BW0800.h" 00011 #include "rangingCorrection/rangingCorrectionSF7BW0800.h" 00012 #include "rangingCorrection/rangingCorrectionSF8BW0800.h" 00013 #include "rangingCorrection/rangingCorrectionSF9BW0800.h" 00014 #include "rangingCorrection/rangingCorrectionSF10BW0800.h" 00015 #include "rangingCorrection/rangingCorrectionSF5BW1600.h" 00016 #include "rangingCorrection/rangingCorrectionSF6BW1600.h" 00017 #include "rangingCorrection/rangingCorrectionSF7BW1600.h" 00018 #include "rangingCorrection/rangingCorrectionSF8BW1600.h" 00019 #include "rangingCorrection/rangingCorrectionSF9BW1600.h" 00020 #include "rangingCorrection/rangingCorrectionSF10BW1600.h" 00021 00022 const double* RangingCorrectionPerSfBwGain[6][3] = { 00023 { &RangingCorrectionSF5BW0400[0], &RangingCorrectionSF5BW0800[0], &RangingCorrectionSF5BW1600[0] }, 00024 { &RangingCorrectionSF6BW0400[0], &RangingCorrectionSF6BW0800[0], &RangingCorrectionSF6BW1600[0] }, 00025 { &RangingCorrectionSF7BW0400[0], &RangingCorrectionSF7BW0800[0], &RangingCorrectionSF7BW1600[0] }, 00026 { &RangingCorrectionSF8BW0400[0], &RangingCorrectionSF8BW0800[0], &RangingCorrectionSF8BW1600[0] }, 00027 { &RangingCorrectionSF9BW0400[0], &RangingCorrectionSF9BW0800[0], &RangingCorrectionSF9BW1600[0] }, 00028 { &RangingCorrectionSF10BW0400[0], &RangingCorrectionSF10BW0800[0], &RangingCorrectionSF10BW1600[0] }, 00029 }; 00030 00031 const RangingCorrectionPolynomes_t* RangingCorrectionPolynomesPerSfBw[6][3] = { 00032 { &correctionRangingPolynomeSF5BW0400, &correctionRangingPolynomeSF5BW0800, &correctionRangingPolynomeSF5BW1600 }, 00033 { &correctionRangingPolynomeSF6BW0400, &correctionRangingPolynomeSF6BW0800, &correctionRangingPolynomeSF6BW1600 }, 00034 { &correctionRangingPolynomeSF7BW0400, &correctionRangingPolynomeSF7BW0800, &correctionRangingPolynomeSF7BW1600 }, 00035 { &correctionRangingPolynomeSF8BW0400, &correctionRangingPolynomeSF8BW0800, &correctionRangingPolynomeSF8BW1600 }, 00036 { &correctionRangingPolynomeSF9BW0400, &correctionRangingPolynomeSF9BW0800, &correctionRangingPolynomeSF9BW1600 }, 00037 { &correctionRangingPolynomeSF10BW0400, &correctionRangingPolynomeSF10BW0800, &correctionRangingPolynomeSF10BW1600 }, 00038 }; 00039 00040 double Sx1280RangingCorrection::GetRangingCorrectionPerSfBwGain( const RadioLoRaSpreadingFactors_t sf, const RadioLoRaBandwidths_t bw, const int8_t gain){ 00041 uint8_t sf_index, bw_index; 00042 00043 switch(sf){ 00044 case LORA_SF5: 00045 sf_index = 0; 00046 break; 00047 case LORA_SF6: 00048 sf_index = 1; 00049 break; 00050 case LORA_SF7: 00051 sf_index = 2; 00052 break; 00053 case LORA_SF8: 00054 sf_index = 3; 00055 break; 00056 case LORA_SF9: 00057 sf_index = 4; 00058 break; 00059 case LORA_SF10: 00060 sf_index = 5; 00061 break; 00062 } 00063 switch(bw){ 00064 case LORA_BW_0400: 00065 bw_index = 0; 00066 break; 00067 case LORA_BW_0800: 00068 bw_index = 1; 00069 break; 00070 case LORA_BW_1600: 00071 bw_index = 2; 00072 break; 00073 } 00074 00075 double correction = RangingCorrectionPerSfBwGain[sf_index][bw_index][gain]; 00076 return correction; 00077 } 00078 00079 double Sx1280RangingCorrection::ComputeRangingCorrectionPolynome(const RadioLoRaSpreadingFactors_t sf, const RadioLoRaBandwidths_t bw, const double median){ 00080 uint8_t sf_index, bw_index; 00081 00082 switch(sf){ 00083 case LORA_SF5: 00084 sf_index = 0; 00085 break; 00086 case LORA_SF6: 00087 sf_index = 1; 00088 break; 00089 case LORA_SF7: 00090 sf_index = 2; 00091 break; 00092 case LORA_SF8: 00093 sf_index = 3; 00094 break; 00095 case LORA_SF9: 00096 sf_index = 4; 00097 break; 00098 case LORA_SF10: 00099 sf_index = 5; 00100 break; 00101 } 00102 switch(bw){ 00103 case LORA_BW_0400: 00104 bw_index = 0; 00105 break; 00106 case LORA_BW_0800: 00107 bw_index = 1; 00108 break; 00109 case LORA_BW_1600: 00110 bw_index = 2; 00111 break; 00112 } 00113 const RangingCorrectionPolynomes_t *polynome = RangingCorrectionPolynomesPerSfBw[sf_index][bw_index]; 00114 double correctedValue = 0.0; 00115 double correctionCoeff = 0; 00116 for(uint8_t order = 0; order < polynome->order; order++){ 00117 correctionCoeff = polynome->coefficients[order] * pow(median, polynome->order - order - 1); 00118 correctedValue += correctionCoeff; 00119 } 00120 return correctedValue; 00121 }
Generated on Tue Jul 12 2022 19:08:29 by
1.7.2
SX1280RF1ZHP