changed/added soem #defines to make 8-16kHz resampling filters a little easier to use
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 12 Aug 2014 02:37:30 +0000 (02:37 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 12 Aug 2014 02:37:30 +0000 (02:37 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1792 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/src/codec2_fdmdv.h
codec2-dev/src/fdmdv.c
codec2-dev/unittest/t16_8.c

index 8dacab262b54c2375e1163c1281fc116d08e973c..afe8381c3052c49a64c4e581df8ad29238baa6dd 100644 (file)
@@ -68,8 +68,9 @@ extern "C" {
 
 /* 8 to 48 kHz sample rate conversion */
 
-#define FDMDV_OS                 2         /* oversampling rate           */
-#define FDMDV_OS_TAPS           48         /* number of OS filter taps    */
+#define FDMDV_OS                 2                            /* oversampling rate                   */
+#define FDMDV_OS_TAPS_16K       48                            /* number of OS filter taps at 16kHz   */
+#define FDMDV_OS_TAPS_8K        (FDMDV_OS_TAPS_16K/FDMDV_OS)  /* number of OS filter taps at 8kHz    */
 
 /* FFT points */
 
index f43257120fd3d22c03ca520afcab219526566b82..2f6bf61fc99e57fa8f02f18cf7eee492d4a56743 100644 (file)
@@ -1622,7 +1622,7 @@ void fdmdv_8_to_16(float out16k[], float in8k[], int n)
     for(i=0; i<n; i++) {
        for(j=0; j<FDMDV_OS; j++) {
            out16k[i*FDMDV_OS+j] = 0.0;
-           for(k=0,l=0; k<FDMDV_OS_TAPS; k+=FDMDV_OS,l++)
+           for(k=0,l=0; k<FDMDV_OS_TAPS_16K; k+=FDMDV_OS,l++)
                out16k[i*FDMDV_OS+j] += fdmdv_os_filter[k+j]*in8k[i-l];
            out16k[i*FDMDV_OS+j] *= FDMDV_OS;
            
@@ -1631,7 +1631,7 @@ void fdmdv_8_to_16(float out16k[], float in8k[], int n)
 
     /* update filter memory */
 
-    for(i=-(FDMDV_OS_TAPS/FDMDV_OS); i<0; i++)
+    for(i=-(FDMDV_OS_TAPS_8K); i<0; i++)
        in8k[i] = in8k[i + n];
 
 }
@@ -1659,13 +1659,13 @@ void fdmdv_16_to_8(float out8k[], float in16k[], int n)
 
     for(i=0; i<n; i++) {
        out8k[i] = 0.0;
-       for(j=0; j<FDMDV_OS_TAPS; j++)
+       for(j=0; j<FDMDV_OS_TAPS_16K; j++)
            out8k[i] += fdmdv_os_filter[j]*in16k[i*FDMDV_OS-j];
     }
 
     /* update filter memory */
 
-    for(i=-FDMDV_OS_TAPS; i<0; i++)
+    for(i=-FDMDV_OS_TAPS_16K; i<0; i++)
        in16k[i] = in16k[i + n*FDMDV_OS];
 }
 
index c9ad3f5ffb7bee6d6e5e77efff439d55723e640d..1e64ccf71065312dc2b6070e1e8d0e3cbe97b64a 100644 (file)
@@ -24,7 +24,6 @@
 
 #define N8                        160 /* procssing buffer size at 8 kHz */
 #define N16             (N8*FDMDV_OS)
-#define MEM8 (FDMDV_OS_TAPS/FDMDV_OS)
 #define FRAMES                     50
 #define TWO_PI            6.283185307
 #define FS                       8000
 #define SINE
 
 int main() {
-    float in8k[MEM8 + N8];
+    float in8k[FDMDV_OS_TAPS_8K + N8];
     float out16k[N16];
     short out16k_short[N16];
     FILE *f16;
 
-    float in16k[FDMDV_OS_TAPS + N16];
+    float in16k[FDMDV_OS_TAPS_16K + N16];
     float out8k[N16];
     short out8k_short[N8];
     FILE *f8;
@@ -52,9 +51,9 @@ int main() {
     
     /* clear filter memories */
 
-    for(i=0; i<MEM8; i++)
+    for(i=0; i<FDMDV_OS_TAPS_8K; i++)
        in8k[i] = 0.0;
-    for(i=0; i<FDMDV_OS_TAPS; i++)
+    for(i=0; i<FDMDV_OS_TAPS_16K; i++)
        in16k[i] = 0.0;
 
     t = t1 = 0;
@@ -62,16 +61,16 @@ int main() {
 
 #ifdef DC
        for(i=0; i<N8; i++)
-           in8k[MEM8+i] = 16000.0;
+           in8k[FDMDV_OS_TAPS_8K+i] = 16000.0;
 #endif
 #ifdef SINE
        for(i=0; i<N8; i++,t++)
-           in8k[MEM8+i] = 16000.0*cos(TWO_PI*t*freq/FS);
+           in8k[FDMDV_OS_TAPS_8K+i] = 16000.0*cos(TWO_PI*t*freq/FS);
 #endif
 
        /* upsample  */
 
-       fdmdv_8_to_16(out16k, &in8k[MEM8], N8);
+       fdmdv_8_to_16(out16k, &in8k[FDMDV_OS_TAPS_8K], N8);
        /*
        for(i=0; i<MEM8; i++)
            in8k[i] = in8k[i+N8];
@@ -87,13 +86,13 @@ int main() {
           knock this out */
 
        for(i=0; i<N16; i++,t1++)
-           in16k[i+FDMDV_OS_TAPS] = out16k[i] + 16000.0*cos(TWO_PI*t1*1E4/FS);
+           in16k[i+FDMDV_OS_TAPS_16K] = out16k[i] + 16000.0*cos(TWO_PI*t1*1E4/FS);
 
        /* downsample */
 
-       fdmdv_16_to_8(out8k, &in16k[FDMDV_OS_TAPS], N8);
+       fdmdv_16_to_8(out8k, &in16k[FDMDV_OS_TAPS_16K], N8);
        /*
-       for(i=0; i<FDMDV_OS_TAPS; i++)
+       for(i=0; i<FDMDV_OS_TAPS_16K; i++)
            in16k[i] = in16k[i+N16];
        */