-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathresample.c
973 lines (933 loc) · 55.8 KB
/
resample.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
#include <string.h>
#include <malloc.h>
#include "resample.h"
/*
int32_t taps_9k6hz_8khz[] =
{ 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, -1, 1,
0, -1, 3, -4, 4, -1, -3, 8,
-10, 8, -1, -8, 17, -20, 13, 1,
-20, 34, -35, 20, 9, -41, 62, -58,
25, 26, -77, 103, -87, 26, 59, -135,
163, -121, 15, 118, -222, 244, -158, -15,
214, -350, 350, -190, -82, 366, -531, 484,
-208, -209, 603, -793, 655, -194, -438, 990,
-1195, 892, -115, -884, 1704, -1927, 1299, 137,
-1986, 3558, -4028, 2605, 1454, -9670, 34651, 43732,
-4966, -2674, 5012, -4666, 2873, -657, -1164, 2098,
-2041, 1237, -130, -815, 1281, -1177, 641, 54,
-618, 857, -728, 338, 125, -471, 584, -454,
167, 142, -351, 393, -276, 69, 133, -253,
257, -160, 17, 110, -174, 161, -87, -7,
83, -114, 95, -43, -15, 58, -70, 53,
-19, -15, 37, -40, 27, -6, -12, 22,
-21, 12, -1, -7, 11, -10, 5, 0,
-4, 5, -4, 1, 0, -2, 2, -1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, -1, 1,
0, -2, 3, -3, 1, 1, -6, 8,
-8, 2, 5, -14, 18, -14, 2, 14,
-28, 33, -22, -1, 30, -53, 55, -32,
-11, 60, -91, 86, -40, -35, 110, -149,
127, -41, -79, 187, -229, 174, -28, -156,
303, -337, 224, 10, -281, 471, -479, 271,
96, -482, 717, -666, 303, 261, -810, 1092,
-928, 305, 585, -1398, 1747, -1362, 233, 1334,
-2766, 3362, -2510, -142, 4661, -11241, 23810, 49767,
2716, -6853, 6433, -4179, 1408, 928, -2254, 2417,
-1653, 441, 689, -1342, 1368, -868, 120, 551,
-904, 854, -482, -19, 439, -627, 544, -262,
-79, 340, -431, 341, -132, -96, 254, -289,
206, -57, -91, 180, -186, 118, -16, -75,
122, -114, 63, 2, -55, 77, -66, 31,
9, -37, 46, -35, 13, 9, -23, 25,
-17, 4, 7, -13, 12, -7, 1, 4,
-6, 5, -3, 0, 2, -2, 2, 0,
0, 0, -1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, 1, -1, 0,
1, -3, 3, -2, 0, 4, -7, 7,
-3, -3, 10, -15, 14, -5, -8, 22,
-29, 23, -4, -21, 44, -51, 36, 0,
-44, 79, -83, 50, 14, -85, 132, -126,
61, 45, -152, 209, -181, 64, 103, -254,
316, -244, 49, 203, -407, 461, -314, 0,
368, -632, 655, -384, -108, 640, -977, 929,
-448, -332, 1120, -1559, 1373, -500, -834, 2151,
-2847, 2392, -534, -2576, 6380, -10044, 12689, 51882,
12689, -10044, 6380, -2576, -534, 2392, -2847, 2151,
-834, -500, 1373, -1559, 1120, -332, -448, 929,
-977, 640, -108, -384, 655, -632, 368, 0,
-314, 461, -407, 203, 49, -244, 316, -254,
103, 64, -181, 209, -152, 45, 61, -126,
132, -85, 14, 50, -83, 79, -44, 0,
36, -51, 44, -21, -4, 23, -29, 22,
-8, -5, 14, -15, 10, -3, -3, 7,
-7, 4, 0, -2, 3, -3, 1, 0,
-1, 1, -1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0,
2, -2, 2, 0, -3, 5, -6, 4,
1, -7, 12, -13, 7, 4, -17, 25,
-23, 9, 13, -35, 46, -37, 9, 31,
-66, 77, -55, 2, 63, -114, 122, -75,
-16, 118, -186, 180, -91, -57, 206, -289,
254, -96, -132, 341, -431, 340, -79, -262,
544, -627, 439, -19, -482, 854, -904, 551,
120, -868, 1368, -1342, 689, 441, -1653, 2417,
-2254, 928, 1408, -4179, 6433, -6853, 2716, 49767,
23810, -11241, 4661, -142, -2510, 3362, -2766, 1334,
233, -1362, 1747, -1398, 585, 305, -928, 1092,
-810, 261, 303, -666, 717, -482, 96, 271,
-479, 471, -281, 10, 224, -337, 303, -156,
-28, 174, -229, 187, -79, -41, 127, -149,
110, -35, -40, 86, -91, 60, -11, -32,
55, -53, 30, -1, -22, 33, -28, 14,
2, -14, 18, -14, 5, 2, -8, 8,
-6, 1, 1, -3, 3, -2, 0, 1,
-1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, -1,
2, -2, 0, 1, -4, 5, -4, 0,
5, -10, 11, -7, -1, 12, -21, 22,
-12, -6, 27, -40, 37, -15, -19, 53,
-70, 58, -15, -43, 95, -114, 83, -7,
-87, 161, -174, 110, 17, -160, 257, -253,
133, 69, -276, 393, -351, 142, 167, -454,
584, -471, 125, 338, -728, 857, -618, 54,
641, -1177, 1281, -815, -130, 1237, -2041, 2098,
-1164, -657, 2873, -4666, 5012, -2674, -4966, 43732,
34651, -9670, 1454, 2605, -4028, 3558, -1986, 137,
1299, -1927, 1704, -884, -115, 892, -1195, 990,
-438, -194, 655, -793, 603, -209, -208, 484,
-531, 366, -82, -190, 350, -350, 214, -15,
-158, 244, -222, 118, 15, -121, 163, -135,
59, 26, -87, 103, -77, 26, 25, -58,
62, -41, 9, 20, -35, 34, -20, 1,
13, -20, 17, -8, -1, 8, -10, 8,
-3, -1, 4, -4, 3, -1, 0, 1,
-1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0};
int32_t taps_9k6hz_16khz[] =
{ 0, 0, 0, 0, 0, 1, 0, -3,
-4, 3, 11, 0, -20, -15, 25, 44,
-13, -81, -31, 106, 116, -87, -228, -14,
322, 220, -321, -506, 139, 787, 285, -908,
-943, 676, 1714, 108, -2355, -1631, 2473, 4196,
-1314, -9332, -5348, 87464, -19340, 5210, 7117, 275,
-3855, -1769, 1784, 1981, -389, -1586, -418, 968,
732, -381, -700, -31, 489, 236, -243, -270,
52, 207, 52, -116, -83, 40, 69, 2,
-40, -17, 16, 16, -2, -9, -2, 3,
2, 0, -1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, -1, -3,
0, 7, 3, -12, -16, 11, 36, 4,
-57, -45, 61, 111, -23, -183, -80, 220,
254, -158, -459, -57, 606, 448, -563, -958,
192, 1434, 607, -1621, -1856, 1171, 3494, 467,
-5531, -5021, 9321, 47619, 5432, 12866, 2817, -4508,
-3306, 1378, 2736, 240, -1809, -964, 879, 1088,
-159, -862, -264, 508, 413, -182, -372, -32,
244, 127, -111, -132, 18, 92, 26, -47,
-35, 14, 25, 2, -13, -6, 4, 4,
0, -2, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, -2, 0,
4, 4, -6, -13, 2, 25, 14, -35,
-47, 26, 92, 18, -132, -111, 127, 244,
-32, -372, -182, 413, 508, -264, -862, -159,
1088, 879, -964, -1809, 240, 2736, 1378, -3306,
-4508, 2817, 12866, 5432, 47619, 9321, -5021, -5531,
467, 3494, 1171, -1856, -1621, 607, 1434, 192,
-958, -563, 448, 606, -57, -459, -158, 254,
220, -80, -183, -23, 111, 61, -45, -57,
4, 36, 11, -16, -12, 3, 7, 0,
-3, -1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, -1, 0, 2,
3, -2, -9, -2, 16, 16, -17, -40,
2, 69, 40, -83, -116, 52, 207, 52,
-270, -243, 236, 489, -31, -700, -381, 732,
968, -418, -1586, -389, 1981, 1784, -1769, -3855,
275, 7117, 5210, -19340, 87464, -5348, -9332, -1314,
4196, 2473, -1631, -2355, 108, 1714, 676, -943,
-908, 285, 787, 139, -506, -321, 220, 322,
-14, -228, -87, 116, 106, -31, -81, -13,
44, 25, -15, -20, 0, 11, 3, -4,
-3, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 2,
0, -6, -4, 8, 14, -6, -31, -10,
45, 47, -42, -103, 0, 158, 100, -171,
-253, 90, 419, 128, -509, -489, 407, 922,
0, -1265, -769, 1281, 1859, -665, -3118, -1001,
4303, 4785, -5152, -20089, 103763, -20089, -5152, 4785,
4303, -1001, -3118, -665, 1859, 1281, -769, -1265,
0, 922, 407, -489, -509, 128, 419, 90,
-253, -171, 100, 158, 0, -103, -42, 47,
45, -10, -31, -6, 14, 8, -4, -6,
0, 2, 0, 0, 0, 0, 0, 0};
int32_t taps_8khz_9k6hz[] =
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -2, 3, -5, 5, -4,
2, 2, -9, 15, -21, 23, -20, 9, 6,
-27, 48, -65, 71, -61, 33, 10, -66, 121,
-164, 181, -159, 95, 8, -137, 267, -370, 415,
-377, 243, -18, -269, 575, -837, 984, -951, 683,
-149, -655, 1722, -3050, 4757, -7678, 35173, 1955, 1578,
-2404, 2440, -2079, 1510, -869, 263, 227, -558, 713,
-706, 575, -368, 138, 69, -221, 303, -312, 263,
-176, 75, 18, -88, 127, -133, 114, -78, 36,
2, -31, 47, -50, 43, -29, 14, 0, -9,
14, -15, 12, -8, 4, 0, -1, 3, -3,
2, -1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
1, -1, 1, 0, 0, 2, -4, 6, -7,
7, -4, 0, 8, -16, 24, -28, 26, -17,
0, 23, -49, 71, -83, 79, -53, 7, 53,
-119, 175, -206, 198, -141, 37, 102, -255, 388,
-467, 460, -347, 124, 186, -543, 881, -1122, 1182,
-985, 465, 437, -1807, 3883, -7785, 29087, 10702, -1925,
-484, 1492, -1823, 1736, -1387, 904, -393, -58, 393,
-583, 627, -550, 389, -191, 0, 152, -246, 276,
-249, 182, -96, 11, 57, -100, 115, -105, 78,
-43, 8, 18, -36, 42, -38, 28, -16, 4,
4, -10, 12, -11, 8, -4, 1, 0, -2,
2, -2, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -1, 1, -1, 1, 0, -1, 4, -7,
9, -9, 7, -1, -6, 17, -26, 33, -34,
26, -8, -17, 47, -76, 95, -97, 76, -30,
-34, 111, -182, 230, -237, 192, -91, -57, 230,
-395, 513, -544, 461, -249, -78, 484, -906, 1257,
-1442, 1356, -891, -91, 1875, -5474, 20349, 20349, -5474,
1875, -91, -891, 1356, -1442, 1257, -906, 484, -78,
-249, 461, -544, 513, -395, 230, -57, -91, 192,
-237, 230, -182, 111, -34, -30, 76, -97, 95,
-76, 47, -17, -8, 26, -34, 33, -26, 17,
-6, -1, 7, -9, 9, -7, 4, -1, 0,
1, -1, 1, -1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, -2, 2, -2, 0, 1, -4,
8, -11, 12, -10, 4, 4, -16, 28, -38,
42, -36, 18, 8, -43, 78, -105, 115, -100,
57, 11, -96, 182, -249, 276, -246, 152, 0,
-191, 389, -550, 627, -583, 393, -58, -393, 904,
-1387, 1736, -1823, 1492, -484, -1925, 10702, 29087, -7785,
3883, -1807, 437, 465, -985, 1182, -1122, 881, -543,
186, 124, -347, 460, -467, 388, -255, 102, 37,
-141, 198, -206, 175, -119, 53, 7, -53, 79,
-83, 71, -49, 23, 0, -17, 26, -28, 24,
-16, 8, 0, -4, 7, -7, 6, -4, 2,
0, 0, 1, -1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -1, 2, -3, 3, -1, 0,
4, -8, 12, -15, 14, -9, 0, 14, -29,
43, -50, 47, -31, 2, 36, -78, 114, -133,
127, -88, 18, 75, -176, 263, -312, 303, -221,
69, 138, -368, 575, -706, 713, -558, 227, 263,
-869, 1510, -2079, 2440, -2404, 1578, 1955, 35173, -7678,
4757, -3050, 1722, -655, -149, 683, -951, 984, -837,
575, -269, -18, 243, -377, 415, -370, 267, -137,
8, 95, -159, 181, -164, 121, -66, 10, 33,
-61, 71, -65, 48, -27, 6, 9, -20, 23,
-21, 15, -9, 2, 2, -4, 5, -5, 3,
-2, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 2, -3, 4, -4, 3,
0, -3, 9, -14, 18, -18, 14, -3, -11,
29, -46, 58, -59, 45, -16, -25, 74, -120,
150, -154, 122, -53, -45, 161, -269, 344, -360,
297, -150, -68, 329, -584, 777, -847, 743, -434,
-86, 791, -1622, 2498, -3320, 3993, -4433, 37354, -4433,
3993, -3320, 2498, -1622, 791, -86, -434, 743, -847,
777, -584, 329, -68, -150, 297, -360, 344, -269,
161, -45, -53, 122, -154, 150, -120, 74, -25,
-16, 45, -59, 58, -46, 29, -11, -3, 14,
-18, 18, -14, 9, -3, 0, 3, -4, 4,
-3, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0 };
int32_t taps_16khz_9k6hz[] =
{ 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, -1, 0, 1, -1, 0, 2, 0,
-3, 2, 3, -4, -1, 6, 0, -7, 4,
7, -8, -4, 12, 0, -15, 8, 14, -16,
-9, 24, 0, -28, 14, 26, -29, -17, 43,
0, -50, 23, 47, -49, -31, 71, 2, -83,
36, 79, -78, -53, 114, 7, -133, 53, 127,
-119, -88, 175, 18, -206, 75, 198, -176, -141,
263, 37, -312, 102, 303, -255, -221, 388, 69,
-467, 138, 460, -368, -347, 575, 124, -706, 186,
713, -543, -558, 881, 227, -1122, 263, 1182, -869,
-985, 1510, 465, -2079, 437, 2440, -1807, -2404, 3883,
1578, -7785, 1955, 29088, 35174, 10702, -7678, -1925, 4757,
-484, -3050, 1492, 1722, -1823, -655, 1736, -149, -1387,
683, 904, -951, -393, 984, -58, -837, 393, 575,
-583, -269, 627, -18, -550, 243, 389, -377, -191,
415, 0, -370, 152, 267, -246, -137, 276, 8,
-249, 95, 182, -159, -96, 181, 11, -164, 57,
121, -100, -66, 115, 10, -105, 33, 78, -61,
-43, 71, 8, -65, 18, 48, -36, -27, 42,
6, -38, 9, 28, -20, -16, 23, 4, -21,
4, 15, -10, -9, 12, 2, -11, 2, 8,
-4, -4, 5, 1, -5, 0, 3, -2, -2,
2, 0, -2, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -1, 0, 1, 0, -1, 2, 1,
-3, 0, 4, -1, -4, 4, 3, -7, 0,
9, -3, -9, 9, 7, -14, -1, 18, -6,
-18, 17, 14, -26, -3, 33, -11, -34, 29,
26, -46, -8, 58, -17, -59, 47, 45, -76,
-16, 95, -25, -97, 74, 76, -120, -30, 150,
-34, -154, 111, 122, -182, -53, 230, -45, -237,
161, 192, -269, -91, 344, -57, -360, 230, 297,
-395, -150, 513, -68, -544, 329, 461, -584, -249,
777, -78, -847, 485, 743, -906, -434, 1257, -86,
-1442, 791, 1356, -1622, -891, 2498, -91, -3320, 1875,
3993, -5475, -4434, 20350, 37354, 20350, -4434, -5475, 3993,
1875, -3320, -91, 2498, -891, -1622, 1356, 791, -1442,
-86, 1257, -434, -906, 743, 485, -847, -78, 777,
-249, -584, 461, 329, -544, -68, 513, -150, -395,
297, 230, -360, -57, 344, -91, -269, 192, 161,
-237, -45, 230, -53, -182, 122, 111, -154, -34,
150, -30, -120, 76, 74, -97, -25, 95, -16,
-76, 45, 47, -59, -17, 58, -8, -46, 26,
29, -34, -11, 33, -3, -26, 14, 17, -18,
-6, 18, -1, -14, 7, 9, -9, -3, 9,
0, -7, 3, 4, -4, -1, 4, 0, -3,
1, 2, -1, 0, 1, 0, -1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, -2, 0, 2,
-2, -2, 3, 0, -5, 1, 5, -4, -4,
8, 2, -11, 2, 12, -9, -10, 15, 4,
-21, 4, 23, -16, -20, 28, 9, -38, 6,
42, -27, -36, 48, 18, -65, 8, 71, -43,
-61, 78, 33, -105, 10, 115, -66, -100, 121,
57, -164, 11, 181, -96, -159, 182, 95, -249,
8, 276, -137, -246, 267, 152, -370, 0, 415,
-191, -377, 389, 243, -550, -18, 627, -269, -583,
575, 393, -837, -58, 984, -393, -951, 904, 683,
-1387, -149, 1736, -655, -1823, 1722, 1492, -3050, -484,
4757, -1925, -7678, 10702, 35174, 29088, 1955, -7785, 1578,
3883, -2404, -1807, 2440, 437, -2079, 465, 1510, -985,
-869, 1182, 263, -1122, 227, 881, -558, -543, 713,
186, -706, 124, 575, -347, -368, 460, 138, -467,
69, 388, -221, -255, 303, 102, -312, 37, 263,
-141, -176, 198, 75, -206, 18, 175, -88, -119,
127, 53, -133, 7, 114, -53, -78, 79, 36,
-83, 2, 71, -31, -49, 47, 23, -50, 0,
43, -17, -29, 26, 14, -28, 0, 24, -9,
-16, 14, 8, -15, 0, 12, -4, -8, 7,
4, -7, 0, 6, -1, -4, 3, 2, -3,
0, 2, 0, -1, 1, 0, -1, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0};
*/
const float taps_8khz_9k6hz[] =
{ 3.26127719e-07, -6.83245275e-07, 1.24486178e-06,
-1.45879721e-06, 4.61016327e-07, 2.63329503e-06,
-8.27861004e-06, 1.59657629e-05, -2.37764198e-05,
2.82616602e-05, -2.48866945e-05, 9.18762180e-06,
2.14267129e-05, -6.55801414e-05, 1.16187693e-04,
-1.59885967e-04, 1.78402581e-04, -1.52278182e-04,
6.67135173e-05, 8.15068706e-05, -2.77840765e-04,
4.86849283e-04, -6.54259929e-04, 7.15552538e-04,
-6.10825431e-04, 3.03723238e-04, 1.99757778e-04,
-8.38069653e-04, 1.49209239e-03, -1.99836539e-03,
2.17854418e-03, -1.88183109e-03, 1.03265862e-03,
3.27601010e-04, -2.01750500e-03, 3.72192403e-03,
-5.03392611e-03, 5.53052267e-03, -4.87162452e-03,
2.90340069e-03, 2.58093874e-04, -4.18751687e-03,
8.17410927e-03, -1.13168741e-02, 1.26841161e-02,
-1.15146730e-02, 7.42476806e-03, -5.77446073e-04,
-8.22699722e-03, 1.75701790e-02, -2.55557336e-02,
3.00571062e-02, -2.90345699e-02, 2.08607316e-02,
-4.57686605e-03, -2.00153962e-02, 5.25722206e-02,
-9.31055620e-02, 1.45191371e-01, -2.34343484e-01,
1.07345343e+00, 5.96887730e-02, 4.81857359e-02,
-7.33686090e-02, 7.44770914e-02, -6.34626448e-02,
4.60978709e-02, -2.65363622e-02, 8.05110577e-03,
6.95454981e-03, -1.70426983e-02, 2.17644088e-02,
-2.15610303e-02, 1.75512172e-02, -1.12429615e-02,
4.22444986e-03, 2.11210200e-03, -6.77051302e-03,
9.25011374e-03, -9.54158045e-03, 8.03569332e-03,
-5.37554082e-03, 2.28890986e-03, 5.64259826e-04,
-2.70294258e-03, 3.88066471e-03, -4.08502296e-03,
3.49172764e-03, -2.39097304e-03, 1.10629783e-03,
7.62138370e-05, -9.56110598e-04, 1.43897487e-03,
-1.53076439e-03, 1.31290720e-03, -9.07655514e-04,
4.43190074e-04, -2.59286644e-05, -2.75742932e-04,
4.35588765e-04, -4.63605800e-04, 3.93896422e-04,
-2.70621880e-04, 1.35658687e-04, -2.02672163e-05,
-5.84555091e-05, 9.68856548e-05, -1.01339610e-04,
8.33708764e-05, -5.53638238e-05, 2.73912156e-05,
-5.68591668e-06, -7.42640896e-06, 1.26125633e-05,
-1.22053443e-05, 8.95100948e-06, -5.12677889e-06,
2.12138366e-06, -4.12828399e-07, -1.98075384e-07,
2.50992201e-07, 0.00000000e+00,
2.05189636e-07, -5.45341720e-07, 1.33439210e-06,
-2.34911795e-06, 2.87257308e-06, -1.79741846e-06,
-2.05517517e-06, 9.39684014e-06, -1.98044127e-05,
3.11207550e-05, -3.92129950e-05, 3.83951592e-05,
-2.27159653e-05, -1.19203269e-05, 6.51781302e-05,
-1.29986394e-04, 1.91471074e-04, -2.28075471e-04,
2.15463981e-04, -1.33096444e-04, -2.75744023e-05,
2.55275576e-04, -5.14073414e-04, 7.44153222e-04,
-8.70040327e-04, 8.16432410e-04, -5.29601122e-04,
3.56347175e-18, 7.19987671e-04, -1.50969974e-03,
2.19049491e-03, -2.55482504e-03, 2.41165725e-03,
-1.64070167e-03, 2.43584596e-04, 1.62218290e-03,
-3.63962073e-03, 5.36768744e-03, -6.31639967e-03,
6.05267705e-03, -4.31824103e-03, 1.13406731e-03,
3.13637732e-03, -7.78863765e-03, 1.18567422e-02,
-1.42685063e-02, 1.40573326e-02, -1.05955284e-02,
3.80435796e-03, 5.70542924e-03, -1.65997352e-02,
2.69123986e-02, -3.42540219e-02, 3.61000001e-02,
-3.00861318e-02, 1.41964210e-02, 1.33659868e-02,
-5.51629476e-02, 1.18531801e-01, -2.37600535e-01,
8.87717009e-01, 3.26620281e-01, -5.87623343e-02,
-1.47952242e-02, 4.55486178e-02, -5.56622632e-02,
5.29976562e-02, -4.23557386e-02, 2.76012495e-02,
-1.20169092e-02, -1.78522908e-03, 1.20196585e-02,
-1.78117752e-02, 1.91620309e-02, -1.67904850e-02,
1.18932389e-02, -5.85927255e-03, -1.50495735e-17,
4.66362713e-03, -7.52728991e-03, 8.43334198e-03,
-7.61448592e-03, 5.57570253e-03, -2.94702966e-03,
3.40279803e-04, 1.76351145e-03, -3.07958247e-03,
3.53386533e-03, -3.23320227e-03, 2.40593054e-03,
-1.33069209e-03, 2.70325167e-04, 5.76713937e-04,
-1.10111001e-03, 1.28364144e-03, -1.17740501e-03,
8.79275147e-04, -4.99134185e-04, 1.33958078e-04,
1.48839870e-04, -3.17489234e-04, 3.72699491e-04,
-3.38340702e-04, 2.49656936e-04, -1.42319303e-04,
4.45575861e-05, 2.66986481e-05, -6.59483267e-05,
7.65896912e-05, -6.71408779e-05, 4.75033776e-05,
-2.61584137e-05, 8.67621202e-06, 2.53127905e-06,
-7.58375336e-06, 8.09950961e-06, -6.16950092e-06,
3.60319655e-06, -1.53818382e-06, 3.81499376e-07,
2.90007094e-08, 0.00000000e+00,
2.96925826e-08, -2.67791506e-07, 9.74546197e-07,
-2.31562035e-06, 3.97264694e-06, -5.03304182e-06,
4.07601556e-06, 4.72694751e-07, -9.70256951e-06,
2.33863502e-05, -3.91873873e-05, 5.22532500e-05,
-5.55762526e-05, 4.13986272e-05, -3.67006578e-06,
-5.88281800e-05, 1.39502386e-04, -2.22232280e-04,
2.82090390e-04, -2.89303600e-04, 2.16518922e-04,
-4.83513068e-05, -2.08912126e-04, 5.20417409e-04,
-8.21800437e-04, 1.02660246e-03, -1.04273716e-03,
7.96263164e-04, -2.58012791e-04, -5.33529266e-04,
1.46063394e-03, -2.33257283e-03, 2.91319797e-03,
-2.96849851e-03, 2.32707988e-03, -9.41241975e-04,
-1.06689450e-03, 3.38975992e-03, -5.56065515e-03,
7.02561717e-03, -7.25398771e-03, 5.86989289e-03,
-2.77809193e-03, -1.74635625e-03, 7.03283306e-03,
-1.20730335e-02, 1.56654716e-02, -1.66317094e-02,
1.40716657e-02, -7.61251152e-03, -2.39862781e-03,
1.48012759e-02, -2.76527647e-02, 3.83806825e-02,
-4.40151691e-02, 4.14050110e-02, -2.72166934e-02,
-2.80249072e-03, 5.72420843e-02, -1.67087734e-01,
6.21045232e-01, 6.21045232e-01, -1.67087734e-01,
5.72420843e-02, -2.80249026e-03, -2.72166934e-02,
4.14050147e-02, -4.40151691e-02, 3.83806825e-02,
-2.76527647e-02, 1.48012759e-02, -2.39862781e-03,
-7.61251058e-03, 1.40716694e-02, -1.66317094e-02,
1.56654716e-02, -1.20730335e-02, 7.03283399e-03,
-1.74635625e-03, -2.77809193e-03, 5.86989336e-03,
-7.25399097e-03, 7.02561531e-03, -5.56065375e-03,
3.38975992e-03, -1.06689439e-03, -9.41242208e-04,
2.32708012e-03, -2.96849990e-03, 2.91319937e-03,
-2.33257166e-03, 1.46063347e-03, -5.33529208e-04,
-2.58012878e-04, 7.96263339e-04, -1.04273774e-03,
1.02660293e-03, -8.21800029e-04, 5.20417118e-04,
-2.08912083e-04, -4.83513031e-05, 2.16518965e-04,
-2.89303716e-04, 2.82090536e-04, -2.22232571e-04,
1.39502285e-04, -5.88281400e-05, -3.67006305e-06,
4.13986490e-05, -5.55761326e-05, 5.22532719e-05,
-3.91873582e-05, 2.33864084e-05, -9.70260407e-06,
4.72697167e-07, 4.07602874e-06, -5.03305773e-06,
3.97253598e-06, -2.31569675e-06, 9.74487534e-07,
-2.67827033e-07, 2.96925826e-08,
0.00000000e+00, 2.89957143e-08, 3.81532857e-07,
-1.53817246e-06, 3.60319655e-06, -6.16965917e-06,
8.09952053e-06, -7.58373562e-06, 2.53130224e-06,
8.67621657e-06, -2.61584537e-05, 4.75034612e-05,
-6.71409580e-05, 7.65898803e-05, -6.59482903e-05,
2.66986754e-05, 4.45575788e-05, -1.42319157e-04,
2.49656849e-04, -3.38340731e-04, 3.72699578e-04,
-3.17489321e-04, 1.48840016e-04, 1.33958165e-04,
-4.99133836e-04, 8.79275030e-04, -1.17740477e-03,
1.28364179e-03, -1.10111013e-03, 5.76714170e-04,
2.70325254e-04, -1.33069162e-03, 2.40592938e-03,
-3.23320227e-03, 3.53386439e-03, -3.07958294e-03,
1.76351157e-03, 3.40279919e-04, -2.94703036e-03,
5.57570020e-03, -7.61448592e-03, 8.43334105e-03,
-7.52728991e-03, 4.66362573e-03, -1.50495752e-17,
-5.85927255e-03, 1.18932389e-02, -1.67904831e-02,
1.91620328e-02, -1.78117752e-02, 1.20196585e-02,
-1.78522896e-03, -1.20169111e-02, 2.76012495e-02,
-4.23557386e-02, 5.29976636e-02, -5.56622632e-02,
4.55486141e-02, -1.47952242e-02, -5.87623343e-02,
3.26620281e-01, 8.87717009e-01, -2.37600535e-01,
1.18531793e-01, -5.51629476e-02, 1.33659868e-02,
1.41964210e-02, -3.00861318e-02, 3.61000001e-02,
-3.42540257e-02, 2.69123986e-02, -1.65997315e-02,
5.70542924e-03, 3.80435819e-03, -1.05955284e-02,
1.40573308e-02, -1.42685082e-02, 1.18567441e-02,
-7.78863905e-03, 3.13637732e-03, 1.13406777e-03,
-4.31824056e-03, 6.05267566e-03, -6.31639967e-03,
5.36768604e-03, -3.63962119e-03, 1.62218302e-03,
2.43584684e-04, -1.64070120e-03, 2.41165655e-03,
-2.55482458e-03, 2.19049444e-03, -1.50969985e-03,
7.19987787e-04, 3.56347423e-18, -5.29601297e-04,
8.16431944e-04, -8.70039978e-04, 7.44153163e-04,
-5.14073297e-04, 2.55275663e-04, -2.75744096e-05,
-1.33096546e-04, 2.15463951e-04, -2.28075194e-04,
1.91470870e-04, -1.29986336e-04, 6.51781011e-05,
-1.19203132e-05, -2.27159744e-05, 3.83950755e-05,
-3.92130059e-05, 3.11207259e-05, -1.98043490e-05,
9.39677284e-06, -2.05515744e-06, -1.79740505e-06,
2.87263674e-06, -2.34901972e-06, 1.33446838e-06,
-5.45346268e-07, 2.05186495e-07,
0.00000000e+00, 2.50989160e-07, -1.98075384e-07,
-4.12830644e-07, 2.12131681e-06, -5.12685483e-06,
8.95104131e-06, -1.22053470e-05, 1.26125951e-05,
-7.42642169e-06, -5.68591031e-06, 2.73911464e-05,
-5.53638747e-05, 8.33709128e-05, -1.01339800e-04,
9.68856548e-05, -5.84554473e-05, -2.02672090e-05,
1.35658702e-04, -2.70621938e-04, 3.93896538e-04,
-4.63606033e-04, 4.35589172e-04, -2.75742786e-04,
-2.59286589e-05, 4.43190045e-04, -9.07655573e-04,
1.31290697e-03, -1.53076509e-03, 1.43897568e-03,
-9.56110191e-04, 7.62137934e-05, 1.10629760e-03,
-2.39097234e-03, 3.49172833e-03, -4.08502435e-03,
3.88066564e-03, -2.70294398e-03, 5.64259593e-04,
2.28890963e-03, -5.37553988e-03, 8.03569146e-03,
-9.54157952e-03, 9.25011560e-03, -6.77051442e-03,
2.11210200e-03, 4.22444986e-03, -1.12429634e-02,
1.75512172e-02, -2.15610303e-02, 2.17644125e-02,
-1.70427002e-02, 6.95454981e-03, 8.05110484e-03,
-2.65363622e-02, 4.60978672e-02, -6.34626448e-02,
7.44770914e-02, -7.33686164e-02, 4.81857359e-02,
5.96887730e-02, 1.07345343e+00, -2.34343484e-01,
1.45191371e-01, -9.31055620e-02, 5.25722206e-02,
-2.00153962e-02, -4.57686605e-03, 2.08607316e-02,
-2.90345699e-02, 3.00570987e-02, -2.55557336e-02,
1.75701808e-02, -8.22699722e-03, -5.77445957e-04,
7.42476899e-03, -1.15146730e-02, 1.26841180e-02,
-1.13168741e-02, 8.17411207e-03, -4.18751594e-03,
2.58093816e-04, 2.90340115e-03, -4.87162452e-03,
5.53052267e-03, -5.03392704e-03, 3.72192473e-03,
-2.01750454e-03, 3.27600923e-04, 1.03265850e-03,
-1.88183086e-03, 2.17854441e-03, -1.99836586e-03,
1.49209308e-03, -8.38070177e-04, 1.99757691e-04,
3.03723093e-04, -6.10825315e-04, 7.15552480e-04,
-6.54260162e-04, 4.86849458e-04, -2.77840969e-04,
8.15069361e-05, 6.67134445e-05, -1.52278211e-04,
1.78402654e-04, -1.59885967e-04, 1.16187606e-04,
-6.55801050e-05, 2.14267275e-05, 9.18763362e-06,
-2.48867254e-05, 2.82616329e-05, -2.37765635e-05,
1.59657393e-05, -8.27855547e-06, 2.63334073e-06,
4.61014821e-07, -1.45880244e-06, 1.24487860e-06,
-6.83245275e-07, 3.26132437e-07,
0.00000000e+00, 3.50883596e-07, -5.78413847e-07,
6.22520133e-07, 1.98017489e-07, -2.56011776e-06,
6.75479714e-06, -1.22631418e-05, 1.74314337e-05,
-1.94334680e-05, 1.47127530e-05, -5.00988349e-19,
-2.61746791e-05, 6.18031045e-05, -1.00117453e-04,
1.29390799e-04, -1.34433198e-04, 1.00050609e-04,
-1.61588578e-05, -1.16461670e-04, 2.81421904e-04,
-4.44957579e-04, 5.58895990e-04, -5.69251191e-04,
4.29897569e-04, -1.19021061e-04, -3.45588545e-04,
8.97277496e-04, -1.42197439e-03, 1.77336577e-03,
-1.80182559e-03, 1.39326486e-03, -5.10216050e-04,
-7.75261084e-04, 2.26789387e-03, -3.66353197e-03,
4.59519494e-03, -4.70722048e-03, 3.74582037e-03,
-1.64749939e-03, -1.39695080e-03, 4.92401887e-03,
-8.23933631e-03, 1.05231609e-02, -1.09886946e-02,
9.06808302e-03, -4.59024403e-03, -2.08983058e-03,
1.00465193e-02, -1.78474300e-02, 2.37295851e-02,
-2.58689970e-02, 2.27028821e-02, -1.32483104e-02,
-2.64424528e-03, 2.41572000e-02, -4.95281070e-02,
7.62366652e-02, -1.01334453e-01, 1.21866994e-01,
-1.35318205e-01, 1.13999987e+00, -1.35318205e-01,
1.21866994e-01, -1.01334453e-01, 7.62366578e-02,
-4.95281070e-02, 2.41572000e-02, -2.64424528e-03,
-1.32483104e-02, 2.27028839e-02, -2.58690007e-02,
2.37295870e-02, -1.78474262e-02, 1.00465203e-02,
-2.08983081e-03, -4.59024310e-03, 9.06808302e-03,
-1.09886928e-02, 1.05231591e-02, -8.23933352e-03,
4.92401933e-03, -1.39695103e-03, -1.64749974e-03,
3.74582177e-03, -4.70722187e-03, 4.59519308e-03,
-3.66353081e-03, 2.26789340e-03, -7.75261084e-04,
-5.10216050e-04, 1.39326509e-03, -1.80182653e-03,
1.77336659e-03, -1.42197392e-03, 8.97277263e-04,
-3.45588487e-04, -1.19021031e-04, 4.29897686e-04,
-5.69251250e-04, 5.58896339e-04, -4.44957754e-04,
2.81421642e-04, -1.16461677e-04, -1.61588650e-05,
1.00050616e-04, -1.34433241e-04, 1.29390784e-04,
-1.00117555e-04, 6.18030754e-05, -2.61746463e-05,
-5.00988917e-19, 1.47126721e-05, -1.94334716e-05,
1.74315610e-05, -1.22631527e-05, 6.75480305e-06,
-2.56013550e-06, 1.98021738e-07, 6.22521952e-07,
-5.78424817e-07, 3.50878906e-07 };
const float taps_9k6hz_8khz[] =
{ 2.40673785e-07, -2.67053395e-07, 5.51244206e-08,
6.38046004e-07, -1.72336195e-06, 2.57008924e-06,
-2.16917215e-06, -2.74970319e-07, 4.56307544e-06,
-9.00466330e-06, 1.07060150e-05, -6.84178349e-06,
-3.44791511e-06, 1.74703055e-05, -2.88553747e-05,
2.96454364e-05, -1.43042980e-05, -1.59457195e-05,
5.08940284e-05, -7.33851557e-05, 6.61408776e-05,
-2.12991927e-05, -5.17008521e-05, 1.24884697e-04,
-1.60176947e-04, 1.26193132e-04, -1.70659423e-05,
-1.36146919e-04, 2.69886281e-04, -3.10860691e-04,
2.10700455e-04, 2.20915736e-05, -3.10188509e-04,
5.27178287e-04, -5.47493168e-04, 3.09161842e-04,
1.38987409e-04, -6.33308373e-04, 9.47187538e-04,
-8.86495458e-04, 3.91740497e-04, 4.01836034e-04,
-1.18522916e-03, 1.58550427e-03, -1.33047707e-03,
4.00236051e-04, 9.10342555e-04, -2.06644321e-03,
2.49747443e-03, -1.85882801e-03, 2.38066103e-04,
1.80282409e-03, -3.39999516e-03, 3.73383658e-03,
-2.41801422e-03, -2.42724316e-04, 3.26947123e-03,
-5.34115126e-03, 5.34238713e-03, -2.91121611e-03,
-1.26547471e-03, 5.58664277e-03, -8.11175723e-03,
7.38600083e-03, -3.18220817e-03, -3.18978680e-03,
9.21587367e-03, -1.21067362e-02, 1.00040790e-02,
-2.97220796e-03, -6.69830525e-03, 1.51193338e-02,
-1.82428844e-02, 1.36168385e-02, -1.75802410e-03,
-1.35013666e-02, 2.60059554e-02, -2.94174775e-02,
1.98277570e-02, 2.09866045e-03, -3.03115025e-02,
5.43020703e-02, -6.14704713e-02, 3.97521593e-02,
2.21973918e-02, -1.47559628e-01, 5.28737843e-01,
6.67312443e-01, -7.57839531e-02, -4.08075005e-02,
7.64872059e-02, -7.11994022e-02, 4.38501872e-02,
-1.00266803e-02, -1.77701563e-02, 3.20155397e-02,
-3.11498791e-02, 1.88751556e-02, -1.98600302e-03,
-1.24476627e-02, 1.95492264e-02, -1.79697964e-02,
9.78225749e-03, 8.28395132e-04, -9.44144651e-03,
1.30827930e-02, -1.11217853e-02, 5.15913498e-03,
1.91136973e-03, -7.19785271e-03, 8.91976897e-03,
-6.93296082e-03, 2.54948647e-03, 2.18023453e-03,
-5.36974054e-03, 6.00654818e-03, -4.21988219e-03,
1.06388808e-03, 2.02978030e-03, -3.86757636e-03,
3.92577192e-03, -2.45494908e-03, 2.64231378e-04,
1.68175553e-03, -2.66553508e-03, 2.45961268e-03,
-1.33788399e-03, -1.12744900e-04, 1.27406791e-03,
-1.74468965e-03, 1.46133697e-03, -6.66052103e-04,
-2.41831294e-04, 8.90341704e-04, -1.07621250e-03,
8.14147061e-04, -2.90777010e-04, -2.41014874e-04,
5.74190344e-04, -6.20055245e-04, 4.19715943e-04,
-1.01753110e-04, -1.86311212e-04, 3.40014580e-04,
-3.29888426e-04, 1.96770940e-04, -2.01579169e-05,
-1.21842706e-04, 1.82974967e-04, -1.59585310e-04,
8.18388507e-05, 6.48464356e-06, -6.87057109e-05,
8.79446598e-05, -6.86303320e-05, 2.90414664e-05,
9.75222974e-06, -3.30680014e-05, 3.66431523e-05,
-2.52807131e-05, 8.18640638e-06, 6.11096357e-06,
-1.30096760e-05, 1.24392482e-05, -7.37329628e-06,
1.54425140e-06, 2.40172790e-06, -3.64368043e-06,
2.85763508e-06, -1.32795731e-06, 1.00973637e-07,
4.26162472e-07, -4.21785671e-07, 2.51380101e-07,
0.00000000e+00,
1.79248502e-07, -8.32746849e-08, -2.55935475e-07,
9.34524678e-07, -1.65981533e-06, 1.72677733e-06,
-3.74422598e-07, -2.58270461e-06, 6.20001902e-06,
-8.37454809e-06, 6.63526635e-06, 3.76430421e-07,
-1.13872247e-05, 2.19043632e-05, -2.53818944e-05,
1.62156321e-05, 6.45393447e-06, -3.60833837e-05,
5.92774231e-05, -6.05414971e-05, 3.01499531e-05,
2.81695702e-05, -9.41502221e-05, 1.35895374e-04,
-1.22889629e-04, 4.27685882e-05, 8.60070650e-05,
-2.13715306e-04, 2.75284576e-04, -2.19167647e-04,
3.79001867e-05, 2.15096923e-04, -4.35109279e-04,
5.04531141e-04, -3.48281348e-04, -1.74218130e-05,
4.69305058e-04, -8.10609839e-04, 8.49445059e-04,
-4.93808708e-04, -1.79813214e-04, 9.24235850e-04,
-1.40196981e-03, 1.32739241e-03, -6.15049736e-04,
-5.36463689e-04, 1.67909521e-03, -2.27625459e-03,
1.93859893e-03, -6.37061428e-04, -1.21268001e-03,
2.85907998e-03, -3.50213517e-03, 2.65725749e-03,
-4.38856106e-04, -2.38359184e-03, 4.62368224e-03,
-5.15147811e-03, 3.42359859e-03, 1.65198930e-04,
-4.30116663e-03, 7.19491765e-03, -7.31667317e-03,
4.13624709e-03, 1.46782701e-03, -7.36915739e-03,
1.09441616e-02, -1.01704905e-02, 4.63787140e-03,
3.99279175e-03, -1.23741999e-02, 1.66681614e-02,
-1.41603788e-02, 4.66229534e-03, 8.93675257e-03,
-2.13403795e-02, 2.66575795e-02, -2.07961053e-02,
3.56659875e-03, 2.03674491e-02, -4.22058105e-02,
5.13053872e-02, -3.83088216e-02, -2.16904329e-03,
7.11218789e-02, -1.71534330e-01, 3.63313258e-01,
7.59398818e-01, 4.14506197e-02, -1.04570448e-01,
9.81679410e-02, -6.37680814e-02, 2.14950759e-02,
1.41655449e-02, -3.43969874e-02, 3.68880183e-02,
-2.52263341e-02, 6.73522893e-03, 1.05153685e-02,
-2.04909109e-02, 2.08780691e-02, -1.32469255e-02,
1.83759909e-03, 8.41426477e-03, -1.38028711e-02,
1.30383000e-02, -7.36184372e-03, -3.02308123e-04,
6.70695212e-03, -9.56892222e-03, 8.30431376e-03,
-4.00739070e-03, -1.21385616e-03, 5.19970339e-03,
-6.58413582e-03, 5.21135610e-03, -2.02114484e-03,
-1.47716934e-03, 3.87757272e-03, -4.41184919e-03,
3.15540098e-03, -8.71160766e-04, -1.39357767e-03,
2.76141288e-03, -2.84279091e-03, 1.81248540e-03,
-2.51447840e-04, -1.14665274e-03, 1.86630897e-03,
-1.74330757e-03, 9.70398251e-04, 3.91743706e-05,
-8.52180819e-04, 1.18921616e-03, -1.00713433e-03,
4.73230000e-04, 1.39277807e-04, -5.78499108e-04,
7.08855805e-04, -5.41856163e-04, 2.02558644e-04,
1.42413483e-04, -3.58914811e-04, 3.91287438e-04,
-2.67603435e-04, 7.05009807e-05, 1.07388987e-04,
-2.02177165e-04, 1.97296962e-04, -1.18955177e-04,
1.55667130e-05, 6.67832792e-05, -1.01972801e-04,
8.90916854e-05, -4.62358730e-05, -1.73417197e-06,
3.49179427e-05, -4.49174331e-05, 3.49062939e-05,
-1.49744756e-05, -4.00077079e-06, 1.49870093e-05,
-1.64375488e-05, 1.11472227e-05, -3.65775622e-06,
-2.22822518e-06, 4.78773745e-06, -4.35964967e-06,
2.42527676e-06, -5.01877025e-07, -5.73549585e-07,
7.63788819e-07, -4.95724407e-07, 1.99242294e-07,
-2.28819719e-08,
8.50311750e-08, 8.29067588e-08, -4.46120197e-07,
9.62782110e-07, -1.22270467e-06, 6.01619490e-07,
1.28038027e-06, -4.02316164e-06, 6.21816071e-06,
-5.85548378e-06, 1.40150303e-06, 6.85744862e-06,
-1.59807114e-05, 2.08427373e-05, -1.62301949e-05,
-3.52200347e-19, 2.41735706e-05, -4.63088145e-05,
5.31364203e-05, -3.42962921e-05, -1.06194320e-05,
6.78883516e-05, -1.11790665e-04, 1.14165770e-04,
-5.87302566e-05, -4.60558658e-05, 1.63064251e-04,
-2.36545820e-04, 2.15228371e-04, -8.02621144e-05,
-1.35227107e-04, 3.47658352e-04, -4.50850639e-04,
3.63235449e-04, -7.55416331e-05, -3.25190253e-04,
6.73595467e-04, -7.87632831e-04, 5.53915044e-04,
2.48399236e-18, -6.85310864e-04, 1.20582781e-03,
-1.27650786e-03, 7.63209420e-04, 2.19719514e-04,
-1.31043943e-03, 2.01956043e-03, -1.93598378e-03,
9.37456847e-04, 6.93804468e-04, -2.32410943e-03,
3.19735380e-03, -2.76529696e-03, 9.82364058e-04,
1.58003869e-03, -3.88594228e-03, 4.83052852e-03,
-3.73794278e-03, 7.48116174e-04, 3.10535193e-03,
-6.21466851e-03, 7.03479163e-03, -4.79907123e-03,
-1.04597286e-17, 5.62216062e-03, -9.65792127e-03,
1.00050820e-02, -5.86834783e-03, -1.66175235e-03,
9.77645535e-03, -1.49087375e-02, 1.41903870e-02,
-6.84871245e-03, -5.07369358e-03, 1.70961041e-02,
-2.37922929e-02, 2.09538676e-02, -7.63996085e-03,
-1.27330162e-02, 3.28360498e-02, -4.34506312e-02,
3.65103036e-02, -8.15470144e-03, -3.93127054e-02,
9.73653793e-02, -1.53270140e-01, 1.93629116e-01,
7.91666567e-01, 1.93629116e-01, -1.53270140e-01,
9.73653793e-02, -3.93127054e-02, -8.15470144e-03,
3.65103036e-02, -4.34506312e-02, 3.28360535e-02,
-1.27330162e-02, -7.63996085e-03, 2.09538676e-02,
-2.37922929e-02, 1.70961041e-02, -5.07369358e-03,
-6.84871292e-03, 1.41903888e-02, -1.49087384e-02,
9.77645628e-03, -1.66175235e-03, -5.86834783e-03,
1.00050820e-02, -9.65792220e-03, 5.62216062e-03,
-1.04597270e-17, -4.79906984e-03, 7.03478931e-03,
-6.21466804e-03, 3.10535100e-03, 7.48115941e-04,
-3.73794232e-03, 4.83052712e-03, -3.88594228e-03,
1.58003857e-03, 9.82364058e-04, -2.76529673e-03,
3.19735357e-03, -2.32410943e-03, 6.93804352e-04,
9.37456789e-04, -1.93598378e-03, 2.01955996e-03,
-1.31043908e-03, 2.19719484e-04, 7.63209246e-04,
-1.27650751e-03, 1.20582804e-03, -6.85311039e-04,
2.48399257e-18, 5.53915219e-04, -7.87632889e-04,
6.73595583e-04, -3.25190253e-04, -7.55416477e-05,
3.63235536e-04, -4.50850785e-04, 3.47658468e-04,
-1.35227150e-04, -8.02621435e-05, 2.15228429e-04,
-2.36545951e-04, 1.63064367e-04, -4.60558622e-05,
-5.87303148e-05, 1.14165734e-04, -1.11790789e-04,
6.78884535e-05, -1.06194420e-05, -3.42963031e-05,
5.31363221e-05, -4.63088800e-05, 2.41735706e-05,
-3.52200839e-19, -1.62301549e-05, 2.08426754e-05,
-1.59805877e-05, 6.85747227e-06, 1.40149211e-06,
-5.85546059e-06, 6.21816298e-06, -4.02317755e-06,
1.28038437e-06, 6.01654165e-07, -1.22264805e-06,
9.62725608e-07, -4.46169992e-07, 8.28790974e-08,
8.50311750e-08,
-2.28819719e-08, 1.99242294e-07, -4.95662562e-07,
7.63835203e-07, -5.73527871e-07, -5.01894704e-07,
2.42525971e-06, -4.35964557e-06, 4.78769471e-06,
-2.22821564e-06, -3.65777896e-06, 1.11473755e-05,
-1.64375306e-05, 1.49869902e-05, -4.00078170e-06,
-1.49745065e-05, 3.49064030e-05, -4.49174258e-05,
3.49179027e-05, -1.73417095e-06, -4.62358585e-05,
8.90916635e-05, -1.01972801e-04, 6.67832937e-05,
1.55667021e-05, -1.18955177e-04, 1.97296977e-04,
-2.02177020e-04, 1.07388958e-04, 7.05009661e-05,
-2.67603406e-04, 3.91287293e-04, -3.58914695e-04,
1.42413453e-04, 2.02558615e-04, -5.41855989e-04,
7.08855689e-04, -5.78498933e-04, 1.39277778e-04,
4.73229797e-04, -1.00713421e-03, 1.18921592e-03,
-8.52180994e-04, 3.91743743e-05, 9.70398309e-04,
-1.74330780e-03, 1.86630932e-03, -1.14665309e-03,
-2.51447840e-04, 1.81248551e-03, -2.84279091e-03,
2.76141311e-03, -1.39357778e-03, -8.71160883e-04,
3.15540144e-03, -4.41185012e-03, 3.87757318e-03,
-1.47716946e-03, -2.02114531e-03, 5.21135703e-03,
-6.58413675e-03, 5.19970478e-03, -1.21385639e-03,
-4.00739163e-03, 8.30431376e-03, -9.56892129e-03,
6.70695165e-03, -3.02308123e-04, -7.36184232e-03,
1.30383000e-02, -1.38028702e-02, 8.41426477e-03,
1.83759897e-03, -1.32469255e-02, 2.08780691e-02,
-2.04909109e-02, 1.05153685e-02, 6.73522893e-03,
-2.52263341e-02, 3.68880145e-02, -3.43969874e-02,
1.41655430e-02, 2.14950759e-02, -6.37680814e-02,
9.81679410e-02, -1.04570448e-01, 4.14506197e-02,
7.59398818e-01, 3.63313258e-01, -1.71534300e-01,
7.11218789e-02, -2.16904306e-03, -3.83088216e-02,
5.13053872e-02, -4.22058105e-02, 2.03674491e-02,
3.56659875e-03, -2.07961071e-02, 2.66575795e-02,
-2.13403795e-02, 8.93675350e-03, 4.66229580e-03,
-1.41603788e-02, 1.66681632e-02, -1.23741999e-02,
3.99279175e-03, 4.63787140e-03, -1.01704914e-02,
1.09441625e-02, -7.36915786e-03, 1.46782713e-03,
4.13624756e-03, -7.31667271e-03, 7.19491579e-03,
-4.30116523e-03, 1.65198871e-04, 3.42359766e-03,
-5.15147625e-03, 4.62368131e-03, -2.38359184e-03,
-4.38856048e-04, 2.65725749e-03, -3.50213470e-03,
2.85907998e-03, -1.21267990e-03, -6.37061312e-04,
1.93859858e-03, -2.27625389e-03, 1.67909532e-03,
-5.36463573e-04, -6.15049561e-04, 1.32739218e-03,
-1.40196970e-03, 9.24235792e-04, -1.79813214e-04,
-4.93808766e-04, 8.49445059e-04, -8.10609839e-04,
4.69305116e-04, -1.74218167e-05, -3.48281406e-04,
5.04531257e-04, -4.35109396e-04, 2.15096981e-04,
3.79001867e-05, -2.19167705e-04, 2.75284663e-04,
-2.13715306e-04, 8.60071304e-05, 4.27685845e-05,
-1.22889731e-04, 1.35895374e-04, -9.41501930e-05,
2.81696011e-05, 3.01499713e-05, -6.05414934e-05,
5.92774595e-05, -3.60834238e-05, 6.45394675e-06,
1.62156412e-05, -2.53818162e-05, 2.19042795e-05,
-1.13872047e-05, 3.76427863e-07, 6.63522223e-06,
-8.37449716e-06, 6.20007177e-06, -2.58270825e-06,
-3.74422200e-07, 1.72674231e-06, -1.65988945e-06,
9.34565151e-07, -2.55958213e-07, -8.32754949e-08,
1.79248502e-07,
0.00000000e+00, 2.51380101e-07, -4.21788940e-07,
4.26126121e-07, 1.00968897e-07, -1.32796220e-06,
2.85764963e-06, -3.64365746e-06, 2.40172449e-06,
1.54424708e-06, -7.37327446e-06, 1.24391245e-05,
-1.30097214e-05, 6.11095811e-06, 8.18640001e-06,
-2.52806349e-05, 3.66430831e-05, -3.30679832e-05,
9.75223065e-06, 2.90414355e-05, -6.86303028e-05,
8.79445797e-05, -6.87057036e-05, 6.48464356e-06,
8.18387780e-05, -1.59585339e-04, 1.82974793e-04,
-1.21842706e-04, -2.01579114e-05, 1.96770881e-04,
-3.29888455e-04, 3.40014521e-04, -1.86311168e-04,
-1.01753103e-04, 4.19715827e-04, -6.20055129e-04,
5.74190111e-04, -2.41014801e-04, -2.90776923e-04,
8.14146828e-04, -1.07621239e-03, 8.90341529e-04,
-2.41831323e-04, -6.66052219e-04, 1.46133697e-03,
-1.74468989e-03, 1.27406837e-03, -1.12744907e-04,
-1.33788434e-03, 2.45961337e-03, -2.66553508e-03,
1.68175576e-03, 2.64231407e-04, -2.45494954e-03,
3.92577238e-03, -3.86757636e-03, 2.02978076e-03,
1.06388819e-03, -4.21988219e-03, 6.00654865e-03,
-5.36974100e-03, 2.18023499e-03, 2.54948670e-03,
-6.93296269e-03, 8.91976897e-03, -7.19785271e-03,
1.91136962e-03, 5.15913405e-03, -1.11217834e-02,
1.30827930e-02, -9.44144558e-03, 8.28395016e-04,
9.78225656e-03, -1.79697964e-02, 1.95492264e-02,
-1.24476627e-02, -1.98600302e-03, 1.88751556e-02,
-3.11498791e-02, 3.20155397e-02, -1.77701563e-02,
-1.00266803e-02, 4.38501872e-02, -7.11994022e-02,
7.64872059e-02, -4.08075005e-02, -7.57839531e-02,
6.67312443e-01, 5.28737843e-01, -1.47559628e-01,
2.21973918e-02, 3.97521593e-02, -6.14704713e-02,
5.43020703e-02, -3.03115044e-02, 2.09866045e-03,
1.98277608e-02, -2.94174794e-02, 2.60059554e-02,
-1.35013666e-02, -1.75802410e-03, 1.36168385e-02,
-1.82428844e-02, 1.51193365e-02, -6.69830572e-03,
-2.97220843e-03, 1.00040799e-02, -1.21067362e-02,
9.21587460e-03, -3.18978704e-03, -3.18220840e-03,
7.38600222e-03, -8.11175536e-03, 5.58664184e-03,
-1.26547425e-03, -2.91121542e-03, 5.34238527e-03,
-5.34115080e-03, 3.26947076e-03, -2.42724258e-04,
-2.41801399e-03, 3.73383635e-03, -3.39999446e-03,
1.80282386e-03, 2.38066103e-04, -1.85882789e-03,
2.49747420e-03, -2.06644321e-03, 9.10342322e-04,
4.00235935e-04, -1.33047695e-03, 1.58550392e-03,
-1.18522916e-03, 4.01835976e-04, 3.91740643e-04,
-8.86495691e-04, 9.47187655e-04, -6.33308664e-04,
1.38987438e-04, 3.09161900e-04, -5.47493226e-04,
5.27178345e-04, -3.10188509e-04, 2.20915790e-05,
2.10700528e-04, -3.10860691e-04, 2.69886339e-04,
-1.36147006e-04, -1.70659423e-05, 1.26193219e-04,
-1.60176933e-04, 1.24884682e-04, -5.17008593e-05,
-2.12991818e-05, 6.61409067e-05, -7.33852212e-05,
5.08940138e-05, -1.59457231e-05, -1.43042762e-05,
2.96453909e-05, -2.88552656e-05, 1.74703418e-05,
-3.44793398e-06, -6.84176894e-06, 1.07058177e-05,
-9.00456234e-06, 4.56308271e-06, -2.74971484e-07,
-2.16916169e-06, 2.57008605e-06, -1.72342629e-06,
6.38024744e-07, 5.51194717e-08, -2.67090485e-07,
2.40677139e-07 };
static void resamp_init(ResamplerState * state, const float * taps,
size_t phases, size_t phaseIncrement, size_t samplesPerPhase) {
memset(state, 0, sizeof(*state));
state->historyIdx = 0;
state->phase = 0;
state->phases = phases;
state->phaseIncrement = phaseIncrement;
state->samplesPerPhase = samplesPerPhase;
state->taps = taps;
state->history = calloc(samplesPerPhase, sizeof(int16_t));
}
void resamp_9k6hz_8khz_init(ResamplerState * state) {
resamp_init(state, taps_9k6hz_8khz, 5, 6, 175);
}
/*
void resamp_9k6hz_16khz_init(ResamplerState * state) {
resamp_init(state, taps_9k6hz_16khz, 5, 3, 88);
}
*/
void resamp_8khz_9k6hz_init(ResamplerState * state) {
resamp_init(state, taps_8khz_9k6hz, 6, 5, 122);
}
/*
void resamp_16khz_9k6hz_init(ResamplerState * state) {
resamp_init(state, taps_16khz_9k6hz, 3, 5, 243);
}
*/
size_t resample(ResamplerState * state, int16_t * in, size_t inCount,
int16_t * out, size_t maxOut) {
while (inCount--) {
state->history[state->historyIdx++] = *in++;
if (state->historyIdx >= state->samplesPerPhase) {
state->historyIdx = 0;
}
while (state->phase < state->phases && maxOut--) {
float acc = 0;
size_t cti = state->historyIdx;
for (size_t tapIndex = 0; tapIndex < state->samplesPerPhase; tapIndex++) {
acc += state->history[cti] *
state->taps[state->phase * state->samplesPerPhase + tapIndex];
if (++cti >= state->samplesPerPhase) {
cti = 0;
}
}
*out++ = (uint16_t)(acc + 0.5);
state->phase += state->phaseIncrement;
}
state->phase -= state->phases;
}
return maxOut;
}