use the standard license header for the xpmr files
[asterisk/asterisk.git] / channels / xpmr / xpmr_coef.h
1 /*
2  * xpmr_coef.h - for Xelatec Private Mobile Radio Processes
3  * 
4  * All Rights Reserved. Copyright (C)2007, Xelatec, LLC
5  * 
6  * 20070808 1235 Steven Henke, W9SH, sph@xelatec.com
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 /*! \file
20  *
21  * \brief Private Land Mobile Radio Channel Voice and Signaling Processor
22  *
23  * \author Steven Henke, W9SH <sph@xelatec.com> Xelatec, LLC
24  */
25
26 #ifndef XPMR_COEF_H
27 #define XMPR_COEF_H 1
28
29 // frequencies in 0.1 Hz
30 const u32 dtmf_row[] =
31 {
32         6970,  7700,  8520,  9410
33 };
34 const u32 dtmf_col[] =
35 {
36         12090, 13360, 14770, 16330
37 };
38
39 const i16 coef_dcs_rx  = 1488;                  // dcs rx data divisor for oversampling 8000/134.4
40 const i16 coef_dcs_tx  = 5952;                  // dcs tx data divisor
41
42 const i16 coef_lsd_div  = 672;                  // low speed data divisor
43 const u32 coef_lsd_sync = 0x158;        // 000101011000
44 const u32 coef_lsd_sync_pattern[] = {0x0000000F, 0x0F0FF000};
45
46 #define CTCSS_COEF_INT          120
47 #define CTCSS_SAMPLE_RATE   8000
48 #define TDIV(x) ((CTCSS_SAMPLE_RATE*1000/x)+5)/10
49
50 i32 coef_ctcss[4][5]=
51 {
52         // freq, divisor, integrator, filter
53         {770,TDIV(770),CTCSS_COEF_INT,0,0},
54         {1000,TDIV(1000),CTCSS_COEF_INT,0,0},
55         {1035,TDIV(1035),CTCSS_COEF_INT,0,0},
56         {0,0,0,0}
57 };
58
59
60 i16 coef_ctcss_div[]=
61 {
62 2985,    // 00   067.0
63 2782,    // 01   071.9
64 2688,    // 02   074.4
65 2597,    // 03   077.0
66 2509,    // 04   079.7
67 2424,    // 05   082.5
68 2342,    // 06   085.4
69 2260,    // 07   088.5
70 2186,    // 08   091.5
71 2110,    // 09   094.8
72 2053,    // 10   097.4
73 2000,    // 11   100.0
74 1932,    // 12   103.5
75 1866,    // 13   107.2
76 1803,    // 14   110.9
77 1742,    // 15   114.8
78 1684,    // 16   118.8
79 1626,    // 17   123.0
80 1571,    // 18   127.3
81 1517,    // 19   131.8
82 1465,    // 20   136.5
83 1415,    // 21   141.3
84 1368,    // 22   146.2
85 1321,    // 23   151.4
86 1276,    // 24   156.7
87 1233,    // 25   162.2
88 1191,    // 26   167.9
89 1151,    // 27   173.8
90 1112,    // 28   179.9
91 1074,    // 29   186.2
92 1037,    // 30   192.8
93 983,    // 31   203.5
94 949,    // 32   210.7
95 917,    // 33   218.1
96 886,    // 34   225.7
97 856,    // 35   233.6
98 827,    // 36   241.8
99 799     // 37   250.3
100 };
101
102 float freq_ctcss[]=
103 {
104 067.0,    // 00   
105 071.9,    // 01   
106 074.4,    // 02   
107 077.0,    // 03   
108 079.7,    // 04   
109 082.5,    // 05   
110 085.4,    // 06   
111 088.5,    // 07   
112 091.5,    // 08   
113 094.8,    // 09   
114 097.4,    // 10   
115 100.0,    // 11   
116 103.5,    // 12   
117 107.2,    // 13   
118 110.9,    // 14   
119 114.8,    // 15   
120 118.8,    // 16   
121 123.0,    // 17   
122 127.3,    // 18   
123 131.8,    // 19   
124 136.5,    // 20   
125 141.3,    // 21   
126 146.2,    // 22   
127 151.4,    // 23   
128 156.7,    // 24   
129 162.2,    // 25   
130 167.9,    // 26   
131 173.8,    // 27   
132 179.9,    // 28   
133 186.2,    // 29   
134 192.8,    // 30   
135 203.5,    // 31  
136 210.7 ,    // 32  
137 218.1 ,    // 33  
138 225.7 ,    // 34  
139 233.6 ,    // 35  
140 241.8 ,    // 36  
141 250.3      // 37  
142 };
143
144 /*
145         noise squelch carrier detect filter
146 */
147 static const int16_t taps_fir_bpf_noise_1 = 66;
148 static const int32_t gain_fir_bpf_noise_1 = 65536;
149 static const int16_t coef_fir_bpf_noise_1[] = { 
150       139,
151      -182,
152      -269,
153       -66,
154        56,
155        59,
156       250,
157       395,
158       -80,
159      -775,
160      -557,
161       437,
162       779,
163       210,
164       -17,
165       123,
166      -692,
167     -1664,
168      -256,
169      2495,
170      2237,
171     -1018,
172     -2133,
173      -478,
174     -1134,
175     -2711,
176      2642,
177     10453,
178      4010,
179     -14385,
180     -16488,
181      6954,
182     23030,
183      6954,
184     -16488,
185     -14385,
186      4010,
187     10453,
188      2642,
189     -2711,
190     -1134,
191      -478,
192     -2133,
193     -1018,
194      2237,
195      2495,
196      -256,
197     -1664,
198      -692,
199       123,
200       -17,
201       210,
202       779,
203       437,
204      -557,
205      -775,
206       -80,
207       395,
208       250,
209        59,
210        56,
211       -66,
212      -269,
213      -182,
214       139,
215       257
216 };
217 /*
218         tbd
219 */
220 static const int16_t taps_fir_lpf_3K_1 = 66;
221 static const int32_t gain_fir_lpf_3K_1 = 131072;
222 static const int16_t coef_fir_lpf_3K_1[] = { 
223       259,
224        58,
225      -185,
226      -437,
227      -654,
228      -793,
229      -815,
230      -696,
231      -434,
232       -48,
233       414,
234       886,
235      1284,
236      1523,
237      1529,
238      1254,
239       691,
240      -117,
241     -1078,
242     -2049,
243     -2854,
244     -3303,
245     -3220,
246     -2472,
247      -995,
248      1187,
249      3952,
250      7086,
251     10300,
252     13270,
253     15672,
254     17236,
255     17778,
256     17236,
257     15672,
258     13270,
259     10300,
260      7086,
261      3952,
262      1187,
263      -995,
264     -2472,
265     -3220,
266     -3303,
267     -2854,
268     -2049,
269     -1078,
270      -117,
271       691,
272      1254,
273      1529,
274      1523,
275      1284,
276       886,
277       414,
278       -48,
279      -434,
280      -696,
281      -815,
282      -793,
283      -654,
284      -437,
285      -185,
286        58,
287       259,
288       393
289 };
290
291 /**************************************************************
292 Filter type: Low Pass
293 Filter model: Butterworth
294 Filter order: 9
295 Sampling Frequency: 8 KHz
296 Cut Frequency: 0.250000 KHz
297 Coefficents Quantization: 16-bit
298 ***************************************************************/
299 static const int16_t taps_fir_lpf_250_11_64 = 64;
300 static const int32_t gain_fir_lpf_250_11_64 = 262144;
301 static const int16_t coef_fir_lpf_250_11_64[] = 
302 {
303       366,
304        -3,
305      -418,
306      -865,
307     -1328,
308     -1788,
309     -2223,
310     -2609,
311     -2922,
312     -3138,
313     -3232,
314     -3181,
315     -2967,
316     -2573,
317     -1988,
318     -1206,
319      -228,
320       937,
321      2277,
322      3767,
323      5379,
324      7077,
325      8821,
326     10564,
327     12259,
328     13855,
329     15305,
330     16563,
331     17588,
332     18346,
333     18812,
334     18968,
335     18812,
336     18346,
337     17588,
338     16563,
339     15305,
340     13855,
341     12259,
342     10564,
343      8821,
344      7077,
345      5379,
346      3767,
347      2277,
348       937,
349      -228,
350     -1206,
351     -1988,
352     -2573,
353     -2967,
354     -3181,
355     -3232,
356     -3138,
357     -2922,
358     -2609,
359     -2223,
360     -1788,
361     -1328,
362      -865,
363      -418,
364        -3,
365       366,
366       680
367 };
368
369 // de-emphasis integrator 300 Hz with 8KS/s
370 // a0, b1
371 static const int16_t taps_int_lpf_300_1_2 = 2;
372 static const int32_t gain_int_lpf_300_1_2 = 8182;
373 static const int16_t coef_int_lpf_300_1_2[]={
374 6878,
375 25889
376 };
377
378 // pre-emphasis differentiator 4000 Hz with 8KS/s
379 // a0,a1,b0,
380 static const int16_t taps_int_hpf_4000_1_2 = 2;
381 static const int32_t gain_int_hpf_4000_1_2 = 16384;
382 static const int16_t coef_int_hpf_4000_1_2[]={
383 17610,
384 -17610,
385 2454
386 };
387
388
389 /*
390         ltr crc table
391         from http://www.radioreference.com/forums/showthread.php?t=24126
392 */
393
394 static const u8 ltr_table[]=
395 {
396 0x38, // 00 Area                0111000
397 0x1c, // 01     Channel 4       0011100
398 0x0e, // 02 Channel 3   0001110
399 0x46, // 03 Channel 2   1000110
400 0x23, // 04 Channel 1   0100011
401 0x51, // 05 Channel 0   1010001
402 0x68, // 06 Home 4      1101000
403 0x75, // 07 Home 3              1110101
404 0x7a, // 08 Home 2              1111010
405 0x3d, // 09 Home 1              0111101
406 0x1f, // 10 Home 0              0011111
407 0x4f, // 11 Group 7     1001111
408 0x26, // 12 Group 6     0100110
409 0x52, // 13 Group 5     1010010
410 0x29, // 14 Group 4     0101001
411 0x15, // 15 Group 3     0010101
412 0x0d, // 16 Group 2     0001101
413 0x45, // 17 Group 1     1000101
414 0x62, // 18 Group 0     1100010
415 0x31, // 19 Free 4              0110001
416 0x19, // 20 Free 3              0011001
417 0x0d, // 21 Free 2              0001101
418 0x07, // 22 Free 1              0000111
419 0x43  // 23 Free 0              1000011
420 };
421
422 static const i16 bitWeight[]=
423 {
424 0,   // 0
425 1,   // 1
426 1,   // 2
427 2,   // 3
428 1,   // 4
429 2,   // 5
430 2,   // 6
431 3,   // 7
432 1,   // 8
433 2,   // 9
434 2,   // 10
435 3,   // 11
436 2,   // 12
437 3,   // 13
438 3,   // 14
439 4,   // 15
440 1,   // 16
441 2,   // 17
442 2,   // 18
443 3,   // 19
444 2,   // 20
445 3,   // 21
446 3,   // 22
447 4,   // 23
448 2,   // 24
449 3,   // 25
450 3,   // 26
451 4,   // 27
452 3,   // 28
453 4,   // 29
454 4,   // 30
455 5,   // 31
456 1,   // 32
457 2,   // 33
458 2,   // 34
459 3,   // 35
460 2,   // 36
461 3,   // 37
462 3,   // 38
463 4,   // 39
464 2,   // 40
465 3,   // 41
466 3,   // 42
467 4,   // 43
468 3,   // 44
469 4,   // 45
470 4,   // 46
471 5,   // 47
472 2,   // 48
473 3,   // 49
474 3,   // 50
475 4,   // 51
476 3,   // 52
477 4,   // 53
478 4,   // 54
479 5,   // 55
480 3,   // 56
481 4,   // 57
482 4,   // 58
483 5,   // 59
484 4,   // 60
485 5,   // 61
486 5,   // 62
487 6,   // 63
488 1,   // 64
489 2,   // 65
490 2,   // 66
491 3,   // 67
492 2,   // 68
493 3,   // 69
494 3,   // 70
495 4,   // 71
496 2,   // 72
497 3,   // 73
498 3,   // 74
499 4,   // 75
500 3,   // 76
501 4,   // 77
502 4,   // 78
503 5,   // 79
504 2,   // 80
505 3,   // 81
506 3,   // 82
507 4,   // 83
508 3,   // 84
509 4,   // 85
510 4,   // 86
511 5,   // 87
512 3,   // 88
513 4,   // 89
514 4,   // 90
515 5,   // 91
516 4,   // 92
517 5,   // 93
518 5,   // 94
519 6,   // 95
520 2,   // 96
521 3,   // 97
522 3,   // 98
523 4,   // 99
524 3,   // 100
525 4,   // 101
526 4,   // 102
527 5,   // 103
528 3,   // 104
529 4,   // 105
530 4,   // 106
531 5,   // 107
532 4,   // 108
533 5,   // 109
534 5,   // 110
535 6,   // 111
536 3,   // 112
537 4,   // 113
538 4,   // 114
539 5,   // 115
540 4,   // 116
541 5,   // 117
542 5,   // 118
543 6,   // 119
544 4,   // 120
545 5,   // 121
546 5,   // 122
547 6,   // 123
548 5,   // 124
549 6,   // 125
550 6,   // 126
551 7,   // 127
552 1,   // 128
553 2,   // 129
554 2,   // 130
555 3,   // 131
556 2,   // 132
557 3,   // 133
558 3,   // 134
559 4,   // 135
560 2,   // 136
561 3,   // 137
562 3,   // 138
563 4,   // 139
564 3,   // 140
565 4,   // 141
566 4,   // 142
567 5,   // 143
568 2,   // 144
569 3,   // 145
570 3,   // 146
571 4,   // 147
572 3,   // 148
573 4,   // 149
574 4,   // 150
575 5,   // 151
576 3,   // 152
577 4,   // 153
578 4,   // 154
579 5,   // 155
580 4,   // 156
581 5,   // 157
582 5,   // 158
583 6,   // 159
584 2,   // 160
585 3,   // 161
586 3,   // 162
587 4,   // 163
588 3,   // 164
589 4,   // 165
590 4,   // 166
591 5,   // 167
592 3,   // 168
593 4,   // 169
594 4,   // 170
595 5,   // 171
596 4,   // 172
597 5,   // 173
598 5,   // 174
599 6,   // 175
600 3,   // 176
601 4,   // 177
602 4,   // 178
603 5,   // 179
604 4,   // 180
605 5,   // 181
606 5,   // 182
607 6,   // 183
608 4,   // 184
609 5,   // 185
610 5,   // 186
611 6,   // 187
612 5,   // 188
613 6,   // 189
614 6,   // 190
615 7,   // 191
616 2,   // 192
617 3,   // 193
618 3,   // 194
619 4,   // 195
620 3,   // 196
621 4,   // 197
622 4,   // 198
623 5,   // 199
624 3,   // 200
625 4,   // 201
626 4,   // 202
627 5,   // 203
628 4,   // 204
629 5,   // 205
630 5,   // 206
631 6,   // 207
632 3,   // 208
633 4,   // 209
634 4,   // 210
635 5,   // 211
636 4,   // 212
637 5,   // 213
638 5,   // 214
639 6,   // 215
640 4,   // 216
641 5,   // 217
642 5,   // 218
643 6,   // 219
644 5,   // 220
645 6,   // 221
646 6,   // 222
647 7,   // 223
648 3,   // 224
649 4,   // 225
650 4,   // 226
651 5,   // 227
652 4,   // 228
653 5,   // 229
654 5,   // 230
655 6,   // 231
656 4,   // 232
657 5,   // 233
658 5,   // 234
659 6,   // 235
660 5,   // 236
661 6,   // 237
662 6,   // 238
663 7,   // 239
664 4,   // 240
665 5,   // 241
666 5,   // 242
667 6,   // 243
668 5,   // 244
669 6,   // 245
670 6,   // 246
671 7,   // 247
672 5,   // 248
673 6,   // 249
674 6,   // 250
675 7,   // 251
676 6,   // 252
677 7,   // 253
678 7,   // 254
679 8    // 255
680 };
681
682
683 /*
684         ctcss decode filter
685 */
686 /**************************************************************
687 Filter type: Low Pass
688 Filter model: Butterworth
689 Filter order: 9
690 Sampling Frequency: 8 KHz
691 Cut Frequency: 0.250000 KHz
692 Coefficents Quantization: 16-bit
693 ***************************************************************/
694 static const int16_t taps_fir_lpf_250_9_66 = 66;
695 static const int32_t gain_fir_lpf_250_9_66 = 262144;
696 static const int16_t coef_fir_lpf_250_9_66[] = 
697
698   676,
699   364,
700    -3,
701  -415,
702  -860,
703 -1320,
704 -1777,
705 -2209,
706 -2593,
707 -2904,
708 -3119,
709 -3212,
710 -3162,
711 -2949,
712 -2557,
713 -1975,
714 -1198,
715  -226,
716   932,
717  2263,
718  3744,
719  5346,
720  7034,
721  8767,
722 10499,
723 12184,
724 13770,
725 15211,
726 16462,
727 17480,
728 18234,
729 18696,
730 18852,
731 18696,
732 18234,
733 17480,
734 16462,
735 15211,
736 13770,
737 12184,
738 10499,
739  8767,
740  7034,
741  5346,
742  3744,
743  2263,
744   932,
745  -226,
746 -1198,
747 -1975,
748 -2557,
749 -2949,
750 -3162,
751 -3212,
752 -3119,
753 -2904,
754 -2593,
755 -2209,
756 -1777,
757 -1320,
758  -860,
759  -415,
760    -3,
761   364,
762   676,
763   927
764 };
765 /* *************************************************************
766 Filter type: Low Pass
767 Filter model: Butterworth
768 Filter order: 9
769 Sampling Frequency: 8 KHz
770 Cut Frequency: 0.215 KHz
771 Coefficents Quantization: 16-bit
772 ***************************************************************/
773 static const int16_t taps_fir_lpf_215_9_88 = 88;
774 static const int32_t gain_fir_lpf_215_9_88 = 524288;
775 static const int16_t coef_fir_lpf_215_9_88[] = {
776  2038,
777  2049,
778  1991,
779  1859,
780  1650,
781  1363,
782   999,
783   562,
784    58,
785  -502,
786 -1106,
787 -1739,
788 -2382,
789 -3014,
790 -3612,
791 -4153,
792 -4610,
793 -4959,
794 -5172,
795 -5226,
796 -5098,
797 -4769,
798 -4222,
799 -3444,
800 -2430,
801 -1176,
802   310,
803  2021,
804  3937,
805  6035,
806  8284,
807 10648,
808 13086,
809 15550,
810 17993,
811 20363,
812 22608,
813 24677,
814 26522,
815 28099,
816 29369,
817 30299,
818 30867,
819 31058,
820 30867,
821 30299,
822 29369,
823 28099,
824 26522,
825 24677,
826 22608,
827 20363,
828 17993,
829 15550,
830 13086,
831 10648,
832  8284,
833  6035,
834  3937,
835  2021,
836   310,
837 -1176,
838 -2430,
839 -3444,
840 -4222,
841 -4769,
842 -5098,
843 -5226,
844 -5172,
845 -4959,
846 -4610,
847 -4153,
848 -3612,
849 -3014,
850 -2382,
851 -1739,
852 -1106,
853  -502,
854    58,
855   562,
856   999,
857  1363,
858  1650,
859  1859,
860  1991,
861  2049,
862  2038,
863  1966
864 };
865 // end coef fir_lpf_215_9_88
866 //
867 /**************************************************************
868 Filter type: High Pass
869 Filter model: Butterworth
870 Filter order: 9
871 Sampling Frequency: 8 KHz
872 Cut Frequency: 0.300000 KHz
873 Coefficents Quantization: 16-bit
874 ***************************************************************/
875 static const int16_t taps_fir_hpf_300_9_66 = 66;
876 static const int32_t gain_fir_hpf_300_9_66 = 32768;
877 static const int16_t coef_fir_hpf_300_9_66[] = 
878
879  -141,
880  -114,
881   -77,
882   -30,
883    23,
884    83,
885   147,
886   210,
887   271,
888   324,
889   367,
890   396,
891   407,
892   396,
893   362,
894   302,
895   216,
896   102,
897   -36,
898  -199,
899  -383,
900  -585,
901  -798,
902 -1017,
903 -1237,
904 -1452,
905 -1653,
906 -1836,
907 -1995,
908 -2124,
909 -2219,
910 -2278,
911 30463,
912 -2278,
913 -2219,
914 -2124,
915 -1995,
916 -1836,
917 -1653,
918 -1452,
919 -1237,
920 -1017,
921  -798,
922  -585,
923  -383,
924  -199,
925   -36,
926   102,
927   216,
928   302,
929   362,
930   396,
931   407,
932   396,
933   367,
934   324,
935   271,
936   210,
937   147,
938    83,
939    23,
940   -30,
941   -77,
942  -114,
943  -141,
944  -158
945     };
946 #endif /* !XPMR_COEF_H */
947 /* end of file */
948
949
950
951