mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@116731 65c4cc65-6c06-0410-ace0-fbb531ad65f3
		
			
				
	
	
		
			668 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			668 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /*
 | |
|  * xpmr_coef.h - for Xelatec Private Mobile Radio Processes
 | |
|  * 
 | |
|  * All Rights Reserved. Copyright (C)2007, Xelatec, LLC
 | |
|  * 
 | |
|  * 20070808 1235 Steven Henke, W9SH, sph@xelatec.com
 | |
|  * 
 | |
|  * This program is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License as published by
 | |
|  * the Free Software Foundation; either version 2 of the License, or
 | |
|  * (at your option) any later version.
 | |
|  * 
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU General Public License for more details.
 | |
|  * 
 | |
|  * You should have received a copy of the GNU General Public License
 | |
|  * along with this program; if not, write to the Free Software
 | |
|  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 | |
|  * 		 
 | |
|  * This version may be optionally licenced under the GNU LGPL licence.
 | |
|  *
 | |
|  * A license has been granted to Digium (via disclaimer) for the use of
 | |
|  * this code.
 | |
|  *
 | |
|  * Some filter coeficients via 'WinFilter' http://www.winfilter.20m.com.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| /*! \file
 | |
|  *
 | |
|  * \brief Private Land Mobile Radio Channel Voice and Signaling Processor
 | |
|  *
 | |
|  * \author Steven Henke, W9SH <sph@xelatec.com> Xelatec, LLC
 | |
|  */
 | |
| 
 | |
| #ifndef XPMR_COEF_H
 | |
| #define XMPR_COEF_H 	1
 | |
| 
 | |
| // frequencies in 0.1 Hz
 | |
| static const u32 dtmf_row[] =
 | |
| {
 | |
| 	6970,  7700,  8520,  9410
 | |
| };
 | |
| static const u32 dtmf_col[] =
 | |
| {
 | |
| 	12090, 13360, 14770, 16330
 | |
| };
 | |
| 
 | |
| 
 | |
| #define CTCSS_COEF_INT		120
 | |
| #define CTCSS_SAMPLE_RATE   8000
 | |
| #define TDIV(x) ((CTCSS_SAMPLE_RATE*1000/x)+5)/10
 | |
| 
 | |
| #if 0
 | |
| static i32 coef_ctcss[4][5]=
 | |
| {
 | |
| 	// freq, divisor, integrator, filter
 | |
| 	{770,TDIV(770),CTCSS_COEF_INT,0,0},
 | |
| 	{1000,TDIV(1000),CTCSS_COEF_INT,0,0},
 | |
| 	{1035,TDIV(1035),CTCSS_COEF_INT,0,0},
 | |
| 	{0,0,0,0}
 | |
| };
 | |
| #endif
 | |
| 
 | |
| static i16 coef_ctcss_div[]=
 | |
| {
 | |
| 2985,    // 00   067.0
 | |
| 2782,    // 01   071.9
 | |
| 2688,    // 02   074.4
 | |
| 2597,    // 03   077.0
 | |
| 2509,    // 04   079.7
 | |
| 2424,    // 05   082.5
 | |
| 2342,    // 06   085.4
 | |
| 2260,    // 07   088.5
 | |
| 2186,    // 08   091.5
 | |
| 2110,    // 09   094.8
 | |
| 2053,    // 10   097.4
 | |
| 2000,    // 11   100.0
 | |
| 1932,    // 12   103.5
 | |
| 1866,    // 13   107.2
 | |
| 1803,    // 14   110.9
 | |
| 1742,    // 15   114.8
 | |
| 1684,    // 16   118.8
 | |
| 1626,    // 17   123.0
 | |
| 1571,    // 18   127.3
 | |
| 1517,    // 19   131.8
 | |
| 1465,    // 20   136.5
 | |
| 1415,    // 21   141.3
 | |
| 1368,    // 22   146.2
 | |
| 1321,    // 23   151.4
 | |
| 1276,    // 24   156.7
 | |
| 1233,    // 25   162.2
 | |
| 1191,    // 26   167.9
 | |
| 1151,    // 27   173.8
 | |
| 1112,    // 28   179.9
 | |
| 1074,    // 29   186.2
 | |
| 1037,    // 30   192.8
 | |
| 983,    // 31   203.5
 | |
| 949,    // 32   210.7
 | |
| 917,    // 33   218.1
 | |
| 886,    // 34   225.7
 | |
| 856,    // 35   233.6
 | |
| 827,    // 36   241.8
 | |
| 799     // 37   250.3
 | |
| };
 | |
| 
 | |
| static float freq_ctcss[]=
 | |
| {
 | |
| 067.0,    // 00   
 | |
| 071.9,    // 01   
 | |
| 074.4,    // 02   
 | |
| 077.0,    // 03   
 | |
| 079.7,    // 04   
 | |
| 082.5,    // 05   
 | |
| 085.4,    // 06   
 | |
| 088.5,    // 07   
 | |
| 091.5,    // 08   
 | |
| 094.8,    // 09   
 | |
| 097.4,    // 10   
 | |
| 100.0,    // 11   
 | |
| 103.5,    // 12   
 | |
| 107.2,    // 13   
 | |
| 110.9,    // 14   
 | |
| 114.8,    // 15   
 | |
| 118.8,    // 16   
 | |
| 123.0,    // 17   
 | |
| 127.3,    // 18   
 | |
| 131.8,    // 19   
 | |
| 136.5,    // 20   
 | |
| 141.3,    // 21   
 | |
| 146.2,    // 22   
 | |
| 151.4,    // 23   
 | |
| 156.7,    // 24   
 | |
| 162.2,    // 25   
 | |
| 167.9,    // 26   
 | |
| 173.8,    // 27   
 | |
| 179.9,    // 28   
 | |
| 186.2,    // 29   
 | |
| 192.8,    // 30   
 | |
| 203.5,    // 31  
 | |
| 210.7 ,    // 32  
 | |
| 218.1 ,    // 33  
 | |
| 225.7 ,    // 34  
 | |
| 233.6 ,    // 35  
 | |
| 241.8 ,    // 36  
 | |
| 250.3      // 37  
 | |
| };
 | |
| 
 | |
| /*
 | |
| 	noise squelch carrier detect filter
 | |
| */
 | |
| static const int16_t taps_fir_bpf_noise_1 = 66;
 | |
| static const int32_t gain_fir_bpf_noise_1 = 65536;
 | |
| static const int16_t coef_fir_bpf_noise_1[] = { 
 | |
|       139,
 | |
|      -182,
 | |
|      -269,
 | |
|       -66,
 | |
|        56,
 | |
|        59,
 | |
|       250,
 | |
|       395,
 | |
|       -80,
 | |
|      -775,
 | |
|      -557,
 | |
|       437,
 | |
|       779,
 | |
|       210,
 | |
|       -17,
 | |
|       123,
 | |
|      -692,
 | |
|     -1664,
 | |
|      -256,
 | |
|      2495,
 | |
|      2237,
 | |
|     -1018,
 | |
|     -2133,
 | |
|      -478,
 | |
|     -1134,
 | |
|     -2711,
 | |
|      2642,
 | |
|     10453,
 | |
|      4010,
 | |
|     -14385,
 | |
|     -16488,
 | |
|      6954,
 | |
|     23030,
 | |
|      6954,
 | |
|     -16488,
 | |
|     -14385,
 | |
|      4010,
 | |
|     10453,
 | |
|      2642,
 | |
|     -2711,
 | |
|     -1134,
 | |
|      -478,
 | |
|     -2133,
 | |
|     -1018,
 | |
|      2237,
 | |
|      2495,
 | |
|      -256,
 | |
|     -1664,
 | |
|      -692,
 | |
|       123,
 | |
|       -17,
 | |
|       210,
 | |
|       779,
 | |
|       437,
 | |
|      -557,
 | |
|      -775,
 | |
|       -80,
 | |
|       395,
 | |
|       250,
 | |
|        59,
 | |
|        56,
 | |
|       -66,
 | |
|      -269,
 | |
|      -182,
 | |
|       139,
 | |
|       257
 | |
| };
 | |
| /*
 | |
| 	tbd
 | |
| */
 | |
| static const int16_t taps_fir_lpf_3K_1 = 66;
 | |
| static const int32_t gain_fir_lpf_3K_1 = 131072;
 | |
| static const int16_t coef_fir_lpf_3K_1[] = { 
 | |
|       259,
 | |
|        58,
 | |
|      -185,
 | |
|      -437,
 | |
|      -654,
 | |
|      -793,
 | |
|      -815,
 | |
|      -696,
 | |
|      -434,
 | |
|       -48,
 | |
|       414,
 | |
|       886,
 | |
|      1284,
 | |
|      1523,
 | |
|      1529,
 | |
|      1254,
 | |
|       691,
 | |
|      -117,
 | |
|     -1078,
 | |
|     -2049,
 | |
|     -2854,
 | |
|     -3303,
 | |
|     -3220,
 | |
|     -2472,
 | |
|      -995,
 | |
|      1187,
 | |
|      3952,
 | |
|      7086,
 | |
|     10300,
 | |
|     13270,
 | |
|     15672,
 | |
|     17236,
 | |
|     17778,
 | |
|     17236,
 | |
|     15672,
 | |
|     13270,
 | |
|     10300,
 | |
|      7086,
 | |
|      3952,
 | |
|      1187,
 | |
|      -995,
 | |
|     -2472,
 | |
|     -3220,
 | |
|     -3303,
 | |
|     -2854,
 | |
|     -2049,
 | |
|     -1078,
 | |
|      -117,
 | |
|       691,
 | |
|      1254,
 | |
|      1529,
 | |
|      1523,
 | |
|      1284,
 | |
|       886,
 | |
|       414,
 | |
|       -48,
 | |
|      -434,
 | |
|      -696,
 | |
|      -815,
 | |
|      -793,
 | |
|      -654,
 | |
|      -437,
 | |
|      -185,
 | |
|        58,
 | |
|       259,
 | |
|       393
 | |
| };
 | |
| 
 | |
| /**************************************************************
 | |
| Filter type: Low Pass
 | |
| Filter model: Butterworth
 | |
| Filter order: 9
 | |
| Sampling Frequency: 8 KHz
 | |
| Cut Frequency: 0.250000 KHz
 | |
| Coefficents Quantization: 16-bit
 | |
| ***************************************************************/
 | |
| static const int16_t taps_fir_lpf_250_11_64 = 64;
 | |
| static const int32_t gain_fir_lpf_250_11_64 = 262144;
 | |
| static const int16_t coef_fir_lpf_250_11_64[] = 
 | |
| {
 | |
|       366,
 | |
|        -3,
 | |
|      -418,
 | |
|      -865,
 | |
|     -1328,
 | |
|     -1788,
 | |
|     -2223,
 | |
|     -2609,
 | |
|     -2922,
 | |
|     -3138,
 | |
|     -3232,
 | |
|     -3181,
 | |
|     -2967,
 | |
|     -2573,
 | |
|     -1988,
 | |
|     -1206,
 | |
|      -228,
 | |
|       937,
 | |
|      2277,
 | |
|      3767,
 | |
|      5379,
 | |
|      7077,
 | |
|      8821,
 | |
|     10564,
 | |
|     12259,
 | |
|     13855,
 | |
|     15305,
 | |
|     16563,
 | |
|     17588,
 | |
|     18346,
 | |
|     18812,
 | |
|     18968,
 | |
|     18812,
 | |
|     18346,
 | |
|     17588,
 | |
|     16563,
 | |
|     15305,
 | |
|     13855,
 | |
|     12259,
 | |
|     10564,
 | |
|      8821,
 | |
|      7077,
 | |
|      5379,
 | |
|      3767,
 | |
|      2277,
 | |
|       937,
 | |
|      -228,
 | |
|     -1206,
 | |
|     -1988,
 | |
|     -2573,
 | |
|     -2967,
 | |
|     -3181,
 | |
|     -3232,
 | |
|     -3138,
 | |
|     -2922,
 | |
|     -2609,
 | |
|     -2223,
 | |
|     -1788,
 | |
|     -1328,
 | |
|      -865,
 | |
|      -418,
 | |
|        -3,
 | |
|       366,
 | |
|       680
 | |
| };
 | |
| 
 | |
| // de-emphasis integrator 300 Hz with 8KS/s
 | |
| // a0, b1
 | |
| static const int16_t taps_int_lpf_300_1_2 = 2;
 | |
| static const int32_t gain_int_lpf_300_1_2 = 8182;
 | |
| static const int16_t coef_int_lpf_300_1_2[]={
 | |
| 6878,
 | |
| 25889
 | |
| };
 | |
| 
 | |
| // pre-emphasis differentiator 4000 Hz with 8KS/s
 | |
| // a0,a1,b0,
 | |
| static const int16_t taps_int_hpf_4000_1_2 = 2;
 | |
| //static const int32_t gain_int_hpf_4000_1_2 = 16384;  // per calculations
 | |
| static const int32_t gain_int_hpf_4000_1_2 = 13404; // hand tweaked for unity gain at 1KHz
 | |
| static const int16_t coef_int_hpf_4000_1_2[]={
 | |
| 17610,
 | |
| -17610,
 | |
| 2454
 | |
| };
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| /*
 | |
| 	ctcss decode filter
 | |
| */
 | |
| /**************************************************************
 | |
| Filter type: Low Pass
 | |
| Filter model: Butterworth
 | |
| Filter order: 9
 | |
| Sampling Frequency: 8 KHz
 | |
| Cut Frequency: 0.250000 KHz
 | |
| Coefficents Quantization: 16-bit
 | |
| ***************************************************************/
 | |
| static const int16_t taps_fir_lpf_250_9_66 = 66;
 | |
| static const int32_t gain_fir_lpf_250_9_66 = 262144;
 | |
| static const int16_t coef_fir_lpf_250_9_66[] = 
 | |
| { 
 | |
|   676,
 | |
|   364,
 | |
|    -3,
 | |
|  -415,
 | |
|  -860,
 | |
| -1320,
 | |
| -1777,
 | |
| -2209,
 | |
| -2593,
 | |
| -2904,
 | |
| -3119,
 | |
| -3212,
 | |
| -3162,
 | |
| -2949,
 | |
| -2557,
 | |
| -1975,
 | |
| -1198,
 | |
|  -226,
 | |
|   932,
 | |
|  2263,
 | |
|  3744,
 | |
|  5346,
 | |
|  7034,
 | |
|  8767,
 | |
| 10499,
 | |
| 12184,
 | |
| 13770,
 | |
| 15211,
 | |
| 16462,
 | |
| 17480,
 | |
| 18234,
 | |
| 18696,
 | |
| 18852,
 | |
| 18696,
 | |
| 18234,
 | |
| 17480,
 | |
| 16462,
 | |
| 15211,
 | |
| 13770,
 | |
| 12184,
 | |
| 10499,
 | |
|  8767,
 | |
|  7034,
 | |
|  5346,
 | |
|  3744,
 | |
|  2263,
 | |
|   932,
 | |
|  -226,
 | |
| -1198,
 | |
| -1975,
 | |
| -2557,
 | |
| -2949,
 | |
| -3162,
 | |
| -3212,
 | |
| -3119,
 | |
| -2904,
 | |
| -2593,
 | |
| -2209,
 | |
| -1777,
 | |
| -1320,
 | |
|  -860,
 | |
|  -415,
 | |
|    -3,
 | |
|   364,
 | |
|   676,
 | |
|   927
 | |
| };
 | |
| /* *************************************************************
 | |
| Filter type: Low Pass
 | |
| Filter model: Butterworth
 | |
| Filter order: 9
 | |
| Sampling Frequency: 8 KHz
 | |
| Cut Frequency: 0.215 KHz
 | |
| Coefficents Quantization: 16-bit
 | |
| ***************************************************************/
 | |
| static const int16_t taps_fir_lpf_215_9_88 = 88;
 | |
| static const int32_t gain_fir_lpf_215_9_88 = 524288;
 | |
| static const int16_t coef_fir_lpf_215_9_88[] = {
 | |
|  2038,
 | |
|  2049,
 | |
|  1991,
 | |
|  1859,
 | |
|  1650,
 | |
|  1363,
 | |
|   999,
 | |
|   562,
 | |
|    58,
 | |
|  -502,
 | |
| -1106,
 | |
| -1739,
 | |
| -2382,
 | |
| -3014,
 | |
| -3612,
 | |
| -4153,
 | |
| -4610,
 | |
| -4959,
 | |
| -5172,
 | |
| -5226,
 | |
| -5098,
 | |
| -4769,
 | |
| -4222,
 | |
| -3444,
 | |
| -2430,
 | |
| -1176,
 | |
|   310,
 | |
|  2021,
 | |
|  3937,
 | |
|  6035,
 | |
|  8284,
 | |
| 10648,
 | |
| 13086,
 | |
| 15550,
 | |
| 17993,
 | |
| 20363,
 | |
| 22608,
 | |
| 24677,
 | |
| 26522,
 | |
| 28099,
 | |
| 29369,
 | |
| 30299,
 | |
| 30867,
 | |
| 31058,
 | |
| 30867,
 | |
| 30299,
 | |
| 29369,
 | |
| 28099,
 | |
| 26522,
 | |
| 24677,
 | |
| 22608,
 | |
| 20363,
 | |
| 17993,
 | |
| 15550,
 | |
| 13086,
 | |
| 10648,
 | |
|  8284,
 | |
|  6035,
 | |
|  3937,
 | |
|  2021,
 | |
|   310,
 | |
| -1176,
 | |
| -2430,
 | |
| -3444,
 | |
| -4222,
 | |
| -4769,
 | |
| -5098,
 | |
| -5226,
 | |
| -5172,
 | |
| -4959,
 | |
| -4610,
 | |
| -4153,
 | |
| -3612,
 | |
| -3014,
 | |
| -2382,
 | |
| -1739,
 | |
| -1106,
 | |
|  -502,
 | |
|    58,
 | |
|   562,
 | |
|   999,
 | |
|  1363,
 | |
|  1650,
 | |
|  1859,
 | |
|  1991,
 | |
|  2049,
 | |
|  2038,
 | |
|  1966
 | |
| };
 | |
| // end coef fir_lpf_215_9_88
 | |
| //
 | |
| /**************************************************************
 | |
| Filter type: High Pass
 | |
| Filter model: Butterworth
 | |
| Filter order: 9
 | |
| Sampling Frequency: 8 KHz
 | |
| Cut Frequency: 0.300000 KHz
 | |
| Coefficents Quantization: 16-bit
 | |
| ***************************************************************/
 | |
| static const int16_t taps_fir_hpf_300_9_66 = 66;
 | |
| static const int32_t gain_fir_hpf_300_9_66 = 32768;
 | |
| static const int16_t coef_fir_hpf_300_9_66[] = 
 | |
| { 
 | |
|  -141,
 | |
|  -114,
 | |
|   -77,
 | |
|   -30,
 | |
|    23,
 | |
|    83,
 | |
|   147,
 | |
|   210,
 | |
|   271,
 | |
|   324,
 | |
|   367,
 | |
|   396,
 | |
|   407,
 | |
|   396,
 | |
|   362,
 | |
|   302,
 | |
|   216,
 | |
|   102,
 | |
|   -36,
 | |
|  -199,
 | |
|  -383,
 | |
|  -585,
 | |
|  -798,
 | |
| -1017,
 | |
| -1237,
 | |
| -1452,
 | |
| -1653,
 | |
| -1836,
 | |
| -1995,
 | |
| -2124,
 | |
| -2219,
 | |
| -2278,
 | |
| 30463,
 | |
| -2278,
 | |
| -2219,
 | |
| -2124,
 | |
| -1995,
 | |
| -1836,
 | |
| -1653,
 | |
| -1452,
 | |
| -1237,
 | |
| -1017,
 | |
|  -798,
 | |
|  -585,
 | |
|  -383,
 | |
|  -199,
 | |
|   -36,
 | |
|   102,
 | |
|   216,
 | |
|   302,
 | |
|   362,
 | |
|   396,
 | |
|   407,
 | |
|   396,
 | |
|   367,
 | |
|   324,
 | |
|   271,
 | |
|   210,
 | |
|   147,
 | |
|    83,
 | |
|    23,
 | |
|   -30,
 | |
|   -77,
 | |
|  -114,
 | |
|  -141,
 | |
|  -158
 | |
|     };
 | |
| #endif /* !XPMR_COEF_H */
 | |
| /* end of file */
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |