dect
/
asterisk
Archived
13
0
Fork 0
This repository has been archived on 2022-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
asterisk/channels/xpmr/xpmr_coef.h

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 */