update:💄 更新编码格式

update: 更新增益计算为函数
This commit is contained in:
Alvin Young 2024-08-01 16:29:41 +08:00
parent 93724b0952
commit c6a3e0c1be

93
main.c
View File

@ -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++) {