00001 #include "c_lpc10.h" 00002 00003 /**********************************************************/ 00004 /* 31 Point Equiripple FIR Low-Pass Filter (filter delay=15) 00005 Passband: ripple = 0.5 dB, cutoff = 800 Hz 00006 Stopband: atten. = 40 dB, cutoff = 1240 Hz 00007 Inputs: 00008 . inbuf[] - Input speech buffer (0:PWLEN-1, last LFRAME+30 samples used) 00009 Output: 00010 . lpbuf[] - Low passed speech buffer (0:PWLEN-1, last LFRAME written) */ 00011 00012 VOID lpfilt31( FLOAT inbuf[], FLOAT lpbuf[] ) 00013 { 00014 INDEX j, i; 00015 #define F FLOAT 00016 static FLOAT h[16] = { 00017 (F)-0.0097201988, (F)-0.0105179986, (F)-0.0083479648, 00018 (F)0.0005860774, (F)0.0130892089, (F)0.0217052232, 00019 (F)0.0184161253, (F)0.0003397230, (F)-0.0260797087, 00020 (F)-0.0455563702, (F)-0.0403068550, (F)0.0005029835, 00021 (F)0.0729262903, (F)0.1572008878, (F)0.2247288674, 00022 (F)0.2505359650 00023 }; 00024 #undef F 00025 00026 for (j = PWLEN - LFRAME; j < PWLEN; j++) { 00027 lpbuf[j] = h[15] * inbuf[j - 15]; 00028 for (i = 0; i < 15; i++) 00029 lpbuf[j] += h[i] * (inbuf[j - i] + inbuf[j - 30 + i]); 00030 } 00031 } 00032 00033 /* Original implementation: */ 00034 /* 00035 VOID lpfilt31( FLOAT inbuf[], FLOAT lpbuf[] ) 00036 { 00037 INDEX j; 00038 static FLOAT h0 = -0.0097201988; 00039 static FLOAT h1 = -0.0105179986; 00040 static FLOAT h2 = -0.0083479648; 00041 static FLOAT h3 = 0.0005860774; 00042 static FLOAT h4 = 0.0130892089; 00043 static FLOAT h5 = 0.0217052232; 00044 static FLOAT h6 = 0.0184161253; 00045 static FLOAT h7 = 0.0003397230; 00046 static FLOAT h8 = -0.0260797087; 00047 static FLOAT h9 = -0.0455563702; 00048 static FLOAT h10 = -0.0403068550; 00049 static FLOAT h11 = 0.0005029835; 00050 static FLOAT h12 = 0.0729262903; 00051 static FLOAT h13 = 0.1572008878; 00052 static FLOAT h14 = 0.2247288674; 00053 static FLOAT h15 = 0.2505359650; 00054 00055 for (j = PWLEN - LFRAME; j < PWLEN; j++) { 00056 lpbuf[j] = h0 * (inbuf[j] + inbuf[j - 30]); 00057 lpbuf[j] += h1 * (inbuf[j - 1] + inbuf[j - 29]); 00058 lpbuf[j] += h2 * (inbuf[j - 2] + inbuf[j - 28]); 00059 lpbuf[j] += h3 * (inbuf[j - 3] + inbuf[j - 27]); 00060 lpbuf[j] += h4 * (inbuf[j - 4] + inbuf[j - 26]); 00061 lpbuf[j] += h5 * (inbuf[j - 5] + inbuf[j - 25]); 00062 lpbuf[j] += h6 * (inbuf[j - 6] + inbuf[j - 24]); 00063 lpbuf[j] += h7 * (inbuf[j - 7] + inbuf[j - 23]); 00064 lpbuf[j] += h8 * (inbuf[j - 8] + inbuf[j - 22]); 00065 lpbuf[j] += h9 * (inbuf[j - 9] + inbuf[j - 21]); 00066 lpbuf[j] += h10 * (inbuf[j - 10] + inbuf[j - 20]); 00067 lpbuf[j] += h11 * (inbuf[j - 11] + inbuf[j - 19]); 00068 lpbuf[j] += h12 * (inbuf[j - 12] + inbuf[j - 18]); 00069 lpbuf[j] += h13 * (inbuf[j - 13] + inbuf[j - 17]); 00070 lpbuf[j] += h14 * (inbuf[j - 14] + inbuf[j - 16]); 00071 lpbuf[j] += h15 * (inbuf[j - 15]); 00072 } 00073 } 00074 00075 */ 00076 00077 /**********************************************************/