start/stop float compute
This commit is contained in:
parent
f19a0260be
commit
dee6ba5646
1 changed files with 264 additions and 3 deletions
|
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue