start/stop float compute

This commit is contained in:
wrapper 2025-08-02 17:43:14 +07:00
parent f19a0260be
commit dee6ba5646

View file

@ -1,7 +1,268 @@
diff -Nupr src.old/freq_sca.c src.new.sbr/freq_sca.c
--- src.old/freq_sca.c 2025-07-13 20:56:34.329759518 +0700
+++ src.new.sbr/freq_sca.c 2025-08-02 16:06:03.282345144 +0700
@@ -326,14 +326,14 @@ FindStartAndStopBand(const int samplingF
+++ src.new.sbr/freq_sca.c 2025-08-02 17:32:51.357489824 +0700
@@ -104,75 +104,87 @@ static int
getStartFreq(int fs, int start_freq)
{
int k0_min;
+ int fs_mapped = 0;
-
-
-
- switch(fs){
- case 16000: k0_min = 24;
- break;
- case 22050: k0_min = 17;
- break;
- case 24000: k0_min = 16;
- break;
- case 32000: k0_min = 16;
- break;
- case 44100: k0_min = 12;
- break;
- case 48000: k0_min = 11;
- break;
- default:
- k0_min=11; /* illegal fs */
-
+ if (fs >= 0 && fs < 18783) {
+ fs_mapped = 16000;
+ } else if (fs >= 18783 && fs < 23004) {
+ fs_mapped = 22050;
+ } else if (fs >= 23004 && fs < 27713) {
+ fs_mapped = 24000;
+ } else if (fs >= 27713 && fs < 35777) {
+ fs_mapped = 32000;
+ } else if (fs >= 35777 && fs < 42000) {
+ fs_mapped = 40000;
+ } else if (fs >= 42000 && fs < 46009) {
+ fs_mapped = 44100;
+ } else if (fs >= 46009 && fs < 55426) {
+ fs_mapped = 48000;
+ } else if (fs >= 55426 && fs < 75132) {
+ fs_mapped = 64000;
+ } else if (fs >= 75132 && fs < 92017) {
+ fs_mapped = 88200;
+ } else if (fs >= 92017) {
+ fs_mapped = 96000;
+ } else {
+ assert(0);
}
- /* counting post-operations */
-
-
- switch (fs) {
-
- case 16000:
- {
- int v_offset[]= {-8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7};
- return (k0_min + v_offset[start_freq]);
- }
- break;
-
- case 22050:
- {
- int v_offset[]= {-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13};
- return (k0_min + v_offset[start_freq]);
- }
- break;
-
- case 24000:
- {
- int v_offset[]= {-5, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16};
- return (k0_min + v_offset[start_freq]);
- }
- break;
-
- case 32000:
- {
- int v_offset[]= {-6, -4, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16};
- return (k0_min + v_offset[start_freq]);
- }
- break;
-
- case 44100:
- case 48000:
- {
- int v_offset[]= {-4, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16, 20};
- return (k0_min + v_offset[start_freq]);
+ if (fs_mapped < 32000) {
+ k0_min = (int)(((float)(3000 * 2 * 64) / fs_mapped) + 0.5);
+ } else {
+ if (fs_mapped < 64000) {
+ k0_min = (int)(((float)(4000 * 2 * 64) / fs_mapped) + 0.5);
+ } else {
+ k0_min = (int)(((float)(5000 * 2 * 64) / fs_mapped) + 0.5);
}
- break;
+ }
- default:
- {
- int v_offset[]= {0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16, 20, 24, 28, 33};
+ switch (fs_mapped) {
+ case 16000: {
+ int v_offset[] = {-8, -7, -6, -5, -4, -3, -2, -1,
+ 0, 1, 2, 3, 4, 5, 6, 7};
+ return (k0_min + v_offset[start_freq]);
+ } break;
+ case 22050: {
+ int v_offset[] = {-5, -4, -3, -2, -1, 0, 1, 2,
+ 3, 4, 5, 6, 7, 9, 11, 13};
+ return (k0_min + v_offset[start_freq]);
+ } break;
+ case 24000: {
+ int v_offset[] = {-5, -3, -2, -1, 0, 1, 2, 3,
+ 4, 5, 6, 7, 9, 11, 13, 16};
+ return (k0_min + v_offset[start_freq]);
+ } break;
+ case 32000: {
+ int v_offset[] = {-6, -4, -2, -1, 0, 1, 2, 3,
+ 4, 5, 6, 7, 9, 11, 13, 16};
+ return (k0_min + v_offset[start_freq]);
+ } break;
+ case 40000: {
+ int v_offset[] = {-1, 0, 1, 2, 3, 4, 5, 6,
+ 7, 8, 9, 11, 13, 15, 17, 19};
+ return (k0_min + v_offset[start_freq]);
+ } break;
+ case 44100:
+ case 48000:
+ case 64000: {
+ int v_offset[] = {-4, -2, -1, 0, 1, 2, 3, 4,
+ 5, 6, 7, 9, 11, 13, 16, 20};
+ return (k0_min + v_offset[start_freq]);
+ } break;
+ case 88200:
+ case 96000: {
+ int v_offset[] = {-2, -1, 0, 1, 2, 3, 4, 5,
+ 6, 7, 9, 11, 13, 16, 20, 24};
+ return (k0_min + v_offset[start_freq]);
+ } break;
+
+ default: {
+ int v_offset[] = {0, 1, 2, 3, 4, 5, 6, 7,
+ 9, 11, 13, 16, 20, 24, 28, 33};
return (k0_min + v_offset[start_freq]);
}
-
}
}/* End getStartFreq */
@@ -191,70 +203,62 @@ static int
getStopFreq(int fs, int stop_freq)
{
int result,i;
- int *v_stop_freq = NULL;
int k1_min;
int v_dstop[13];
+ int v_stop_freq[14];
- int v_stop_freq_32[14] = {32,34,36,38,40,42,44,46,49,52,55,58,61,64};
- int v_stop_freq_44[14] = {23,25,27,29,32,34,37,40,43,47,51,55,59,64};
- int v_stop_freq_48[14] = {21,23,25,27,30,32,35,38,42,45,49,54,59,64};
-
-
-
- /* counting previous operations */
-
-
- switch(fs){
- case 32000:
-
- k1_min = 32;
-
-
- v_stop_freq =v_stop_freq_32;
- break;
-
- case 44100:
-
- k1_min = 23;
-
-
- v_stop_freq =v_stop_freq_44;
- break;
-
- case 48000:
-
- k1_min = 21;
-
-
- v_stop_freq =v_stop_freq_48;
- break;
+ int fs_mapped = 0;
- default:
-
- k1_min = 21; /* illegal fs */
+ if (fs >= 0 && fs < 18783) {
+ fs_mapped = 16000;
+ } else if (fs >= 18783 && fs < 23004) {
+ fs_mapped = 22050;
+ } else if (fs >= 23004 && fs < 27713) {
+ fs_mapped = 24000;
+ } else if (fs >= 27713 && fs < 35777) {
+ fs_mapped = 32000;
+ } else if (fs >= 35777 && fs < 42000) {
+ fs_mapped = 40000;
+ } else if (fs >= 42000 && fs < 46009) {
+ fs_mapped = 44100;
+ } else if (fs >= 46009 && fs < 55426) {
+ fs_mapped = 48000;
+ } else if (fs >= 55426 && fs < 75132) {
+ fs_mapped = 64000;
+ } else if (fs >= 75132 && fs < 92017) {
+ fs_mapped = 88200;
+ } else if (fs >= 92017) {
+ fs_mapped = 96000;
+ } else {
+ assert(0);
}
+ if (fs < 32000) {
+ k1_min = (int)(((float)(6000 * 2 * 64) / fs) + 0.5);
+ } else {
+ if (fs < 64000) {
+ k1_min = (int)(((float)(8000 * 2 * 64) / fs) + 0.5);
+ } else {
+ k1_min = (int)(((float)(10000 * 2 * 64) / fs) + 0.5);
+ }
+ }
-
- /* v_dstop[]
- v_stop_freq[]
- */
-
- for(i = 0; i <= 12; i++) {
-
- v_dstop[i] = v_stop_freq[i+1] - v_stop_freq[i];
+ /*Calculate stop frequency vector*/
+ for (i = 0; i <= 13; i++) {
+ v_stop_freq[i] = (int)(k1_min * pow(64.0 / k1_min, i / 13.0) + 0.5);
}
+ /*Ensure increasing bandwidth */
+ for (i = 0; i <= 12; i++) {
+ v_dstop[i] = v_stop_freq[i + 1] - v_stop_freq[i];
+ }
Shellsort_int(v_dstop, 13);
-
result = k1_min;
/* v_dstop[] */
-
for(i = 0; i < stop_freq; i++) {
-
result = result + v_dstop[i];
}
@@ -326,14 +330,14 @@ FindStartAndStopBand(const int samplingF
@ -18,7 +279,7 @@ diff -Nupr src.old/freq_sca.c src.new.sbr/freq_sca.c
return (1);
@@ -341,7 +341,7 @@ FindStartAndStopBand(const int samplingF
@@ -341,7 +345,7 @@ FindStartAndStopBand(const int samplingF