update: 增益计算OK

update:  Makefile添加math支持
This commit is contained in:
Alvin Young 2024-07-31 21:55:05 +08:00
parent 6657464b91
commit ee7dbcbafd
2 changed files with 85 additions and 1 deletions

View File

@ -62,7 +62,7 @@ INC_DIRS := $(wordlist 1, $(words $(INC_DIRS)), $(INC_DIRS))
# compile job
all :
mkdir -p $(BUILD_DIR)
$(CC) -fdiagnostics-color=always -g $(SOURCES) $(HEADERS) $(INC_DIRS) -o $(BUILD_DIR)/$(PROJECT)
$(CC) -fdiagnostics-color=always -g -lm $(SOURCES) $(HEADERS) $(INC_DIRS) -o $(BUILD_DIR)/$(PROJECT)
# virtual clean job
.PHONY : clean

84
main.c
View File

@ -1,7 +1,91 @@
#include <stdio.h>
#include <stdint.h>
#include <math.h>
#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
};
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
};
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);
}
printf("int32_t positive_gain_scale_array[%d] = {\r\n", GAIN_ARRAY_LEN);
for (i = 0; i < GAIN_ARRAY_LEN; i++) {
printf("%d, ", data_gain_scale[i]);
}
printf("\r\n};\r\n");
printf("uint8_t positive_q_array[%d] = {\r\n", GAIN_ARRAY_LEN);
for (i = 0; i < GAIN_ARRAY_LEN; i++) {
printf("%d, ", data_q[i]);
}
printf("\r\n};\r\n");
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);
}
printf("int32_t negetive_gain_scale_array[%d] = {\r\n", GAIN_ARRAY_LEN);
for (i = 0; i < GAIN_ARRAY_LEN; i++) {
printf("%d, ", data_gain_scale[i]);
}
printf("\r\n};\r\n");
printf("uint8_t negetive_q_array[%d] = {\r\n", GAIN_ARRAY_LEN);
for (i = 0; i < GAIN_ARRAY_LEN; i++) {
printf("%d, ", data_q[i]);
}
printf("\r\n};\r\n");
return 0;
}