From c6a3e0c1be225ca1f6edea5f517118eef5a4944e Mon Sep 17 00:00:00 2001 From: impressionyang Date: Thu, 1 Aug 2024 16:29:41 +0800 Subject: [PATCH] =?UTF-8?q?update=EF=BC=9A=F0=9F=92=84=20=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E7=BC=96=E7=A0=81=E6=A0=BC=E5=BC=8F=20update=EF=BC=9A?= =?UTF-8?q?=E2=9C=85=20=E6=9B=B4=E6=96=B0=E5=A2=9E=E7=9B=8A=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E4=B8=BA=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.c | 93 +++++++++++++++++++++++++++++++++------------------------- 1 file changed, 53 insertions(+), 40 deletions(-) diff --git a/main.c b/main.c index 5d99d7e..188c9fb 100644 --- a/main.c +++ b/main.c @@ -5,47 +5,70 @@ #define Q_MAX (31) #define GAIN_ARRAY_LEN (31) -uint8_t data_q[GAIN_ARRAY_LEN] = { 0 }; -int32_t data_gain_scale[GAIN_ARRAY_LEN] = { 0 }; -float data_gain_positive[GAIN_ARRAY_LEN] = { - 1.000000000, 1.12201845, 1.25892541, 1.41253754, 1.58489319, 1.77827941, 1.99526231, 2.23872114, - 2.51188643, 2.81838293, 3.16227766, 3.54813389, 3.98107171, 4.46683592, 5.01187234, 5.62341325, - 6.30957344, 7.07945784, 7.94328235, 8.91250938, 10.00000000, 11.22018454, 12.58925412, 14.12537545, - 15.84893192, 17.78279410, 19.95262315, 22.38721139, 25.11886432, 28.18382931, 31.62277660 +uint8_t data_q[GAIN_ARRAY_LEN] = { 0 }; +int32_t data_gain_scale[GAIN_ARRAY_LEN] = { 0 }; + +float data_gain_positive[GAIN_ARRAY_LEN] = { + 1.000000000, 1.12201845, 1.25892541, 1.41253754, 1.58489319, + 1.77827941, 1.99526231, 2.23872114, 2.51188643, 2.81838293, + 3.16227766, 3.54813389, 3.98107171, 4.46683592, 5.01187234, + 5.62341325, 6.30957344, 7.07945784, 7.94328235, 8.91250938, + 10.00000000, 11.22018454, 12.58925412, 14.12537545, 15.84893192, + 17.78279410, 19.95262315, 22.38721139, 25.11886432, 28.18382931, + 31.62277660 }; float data_gain_negative[GAIN_ARRAY_LEN] = { - 1.000000000, 0.891250938, 0.794328235, 0.707945784, 0.630957344, 0.562341325, 0.501187234, 0.446683592, - 0.398107171, 0.354813389, 0.316227766, 0.281838293, 0.251188643, 0.223872114, 0.199526231, 0.177827941, - 0.158489319, 0.141253754, 0.125892541, 0.112201845, 0.100000000, 0.089125094, 0.079432823, 0.070794578, - 0.063095734, 0.056234133, 0.050118723, 0.044668359, 0.039810717, 0.035481339, 0.031622777 + 1.000000000, 0.891250938, 0.794328235, 0.707945784, 0.630957344, + 0.562341325, 0.501187234, 0.446683592, 0.398107171, 0.354813389, + 0.316227766, 0.281838293, 0.251188643, 0.223872114, 0.199526231, + 0.177827941, 0.158489319, 0.141253754, 0.125892541, 0.112201845, + 0.100000000, 0.089125094, 0.079432823, 0.070794578, 0.063095734, + 0.056234133, 0.050118723, 0.044668359, 0.039810717, 0.035481339, + 0.031622777 }; + +uint8_t _util_trans_float_gain_to_fixed_gain(float* float_gain_array, + int32_t* fixed_gain_array, + uint8_t* fixed_gain_q_array, + uint16_t gain_count, + int32_t q_max_scale, uint8_t q_max) +{ + uint8_t q_shift = 0; + float data_temp = 0; + int i = 0, j = 0; + for (i = 0; i < gain_count; i++) { + data_temp = float_gain_array[i]; + q_shift = 0; + for (j = 0; j < Q_MAX; j++) { + data_temp = data_temp * 2; + if (data_temp > q_max_scale) { + // printf("data temp = %f, gain max = %d, q = %d \r\n", data_temp, + // q_gain_max_scale, j); + break; + } + } + q_shift = (j >= Q_MAX) ? j - 1 : j; + fixed_gain_q_array[i] = q_shift; + fixed_gain_array[i] = (int32_t)(data_temp / 2); + } + return 0; +} + int main(int argc, char** argv) { printf("hello world!\r\n"); int i = 0, j = 0; int32_t q_gain_max_scale = pow(2, Q_MAX + 1); - uint8_t q_shift = 0; - float data_temp = 0; + printf("max q gain scale is %d\r\n", q_gain_max_scale); printf("\r\n//===============calc positive===========================\r\n"); - for (i = 0; i < GAIN_ARRAY_LEN; i++) { - data_temp = data_gain_positive[i]; - q_shift = 0; - for (j = 0; j < Q_MAX; j++) { - data_temp = data_temp * 2; - if (data_temp > q_gain_max_scale) { - // printf("data temp = %f, gain max = %d, q = %d \r\n", data_temp, q_gain_max_scale, j); - break; - } - } - q_shift = (j >= Q_MAX) ? j - 1 : j; - data_q[i] = q_shift; - data_gain_scale[i] = (int32_t)(data_temp / 2); - } + _util_trans_float_gain_to_fixed_gain(data_gain_positive, data_gain_scale, + data_q, GAIN_ARRAY_LEN, + q_gain_max_scale, Q_MAX); printf("int32_t positive_gain_scale_array[%d] = {\r\n", GAIN_ARRAY_LEN); for (i = 0; i < GAIN_ARRAY_LEN; i++) { @@ -61,19 +84,9 @@ int main(int argc, char** argv) printf("\r\n//===============calc negative===========================\r\n"); - for (i = 0; i < GAIN_ARRAY_LEN; i++) { - data_temp = data_gain_negative[i]; - q_shift = 0; - for (j = 0; j < Q_MAX; j++) { - data_temp = data_temp * 2; - if (data_temp > q_gain_max_scale) { - break; - } - } - q_shift = (j >= Q_MAX) ? j - 1 : j; - data_q[i] = q_shift; - data_gain_scale[i] = (int32_t)(data_temp / 2); - } + _util_trans_float_gain_to_fixed_gain(data_gain_negative, data_gain_scale, + data_q, GAIN_ARRAY_LEN, + q_gain_max_scale, Q_MAX); printf("int32_t negetive_gain_scale_array[%d] = {\r\n", GAIN_ARRAY_LEN); for (i = 0; i < GAIN_ARRAY_LEN; i++) {