~ubuntu-branches/ubuntu/trusty/iaxmodem/trusty-proposed

« back to all changes in this revision

Viewing changes to lib/spandsp/src/v22bis_tx.c

  • Committer: Bazaar Package Importer
  • Author(s): Julien BLACHE
  • Date: 2008-02-12 15:29:42 UTC
  • mfrom: (1.1.8 upstream)
  • Revision ID: james.westby@ubuntu.com-20080212152942-28cxxstfy8iujm0p
Tags: 1.1.0~dfsg-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
 * along with this program; if not, write to the Free Software
23
23
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24
24
 *
25
 
 * $Id: v22bis_tx.c,v 1.36 2007/05/07 13:11:46 steveu Exp $
 
25
 * $Id: v22bis_tx.c,v 1.38 2008/01/10 14:06:21 steveu Exp $
26
26
 */
27
27
 
28
28
/*! \file */
56
56
#include "spandsp/v29rx.h"
57
57
#include "spandsp/v22bis.h"
58
58
 
 
59
#if defined(SPANDSP_USE_FIXED_POINT)
 
60
#include "v22bis_tx_fixed_rrc.h"
 
61
#else
 
62
#include "v22bis_tx_floating_rrc.h"
 
63
#endif
 
64
 
59
65
/* Quoting from the V.22bis spec.
60
66
 
61
67
6.3.1.1 Interworking at 2400 bit/s
266
272
    { 3.0f, -3.0f}
267
273
};
268
274
 
269
 
/* Raised root cosine pulse shaping; Beta = 0.75; 4 symbols either
270
 
   side of the centre. */
271
 
/* Created with mkshape -r 0.0125 0.75 361 -l and then split up */
272
 
#define PULSESHAPER_GAIN            (40.000612087f/40.0f)
273
 
#define PULSESHAPER_COEFF_SETS      40
274
 
 
275
 
static const float pulseshaper[PULSESHAPER_COEFF_SETS][V22BIS_TX_FILTER_STEPS] =
276
 
{
277
 
    {
278
 
        -0.0047287346f,         /* Filter 0 */
279
 
        -0.0083947197f,
280
 
        -0.0087380763f,
281
 
         0.0088053673f,
282
 
         0.5108981827f,
283
 
         0.5108981827f,
284
 
         0.0088053673f,
285
 
        -0.0087380763f,
286
 
        -0.0083947197f
287
 
    },
288
 
    {
289
 
        -0.0044638629f,         /* Filter 1 */
290
 
        -0.0089241700f,
291
 
        -0.0111288952f,
292
 
         0.0023412184f,
293
 
         0.5623914901f,
294
 
         0.4599551720f,
295
 
         0.0144817755f,
296
 
        -0.0063186648f,
297
 
        -0.0077293609f
298
 
    },
299
 
    {
300
 
        -0.0041048584f,         /* Filter 2 */
301
 
        -0.0093040596f,
302
 
        -0.0134459768f,
303
 
        -0.0048558766f,
304
 
         0.6141017035f,
305
 
         0.4098822897f,
306
 
         0.0193317049f,
307
 
        -0.0039145680f,
308
 
        -0.0069438567f
309
 
    },
310
 
    {
311
 
        -0.0036565006f,         /* Filter 3 */
312
 
        -0.0095231635f,
313
 
        -0.0156437084f,
314
 
        -0.0127148737f,
315
 
         0.6656848457f,
316
 
         0.3609830295f,
317
 
         0.0233320755f,
318
 
        -0.0015677363f,
319
 
        -0.0060557371f
320
 
    },
321
 
    {
322
 
        -0.0031253709f,         /* Filter 4 */
323
 
        -0.0095729633f,
324
 
        -0.0176768181f,
325
 
        -0.0211485021f,
326
 
         0.7167894869f,
327
 
         0.3135419896f,
328
 
         0.0264748749f,
329
 
         0.0006824956f,
330
 
        -0.0050839319f
331
 
    },
332
 
    {
333
 
        -0.0025197700f,         /* Filter 5 */
334
 
        -0.0094478866f,
335
 
        -0.0195012095f,
336
 
        -0.0300535107f,
337
 
         0.7670600056f,
338
 
         0.2678225635f,
339
 
         0.0287663895f,
340
 
         0.0027999985f,
341
 
        -0.0040483891f
342
 
    },
343
 
    {
344
 
        -0.0018496023f,         /* Filter 6 */
345
 
        -0.0091454978f,
346
 
        -0.0210748106f,
347
 
        -0.0393111426f,
348
 
         0.8161399423f,
349
 
         0.2240649005f,
350
 
         0.0302262769f,
351
 
         0.0047523617f,
352
 
        -0.0029696854f
353
 
    },
354
 
    {
355
 
        -0.0011262266f,         /* Filter 7 */
356
 
        -0.0086666380f,
357
 
        -0.0223584207f,
358
 
        -0.0487878398f,
359
 
         0.8636754069f,
360
 
         0.1824841563f,
361
 
         0.0308864956f,
362
 
         0.0065113237f,
363
 
        -0.0018686358f
364
 
    },
365
 
    {
366
 
        -0.0003622774f,         /* Filter 8 */
367
 
        -0.0080155088f,
368
 
        -0.0233165437f,
369
 
        -0.0583361774f,
370
 
         0.9093185032f,
371
 
         0.1432690480f,
372
 
         0.0307901140f,
373
 
         0.0080531155f,
374
 
        -0.0007659096f
375
 
    },
376
 
    {
377
 
         0.0004285425f,         /* Filter 9 */
378
 
        -0.0071996967f,
379
 
        -0.0239181901f,
380
 
        -0.0677960213f,
381
 
         0.9527307304f,
382
 
         0.1065807242f,
383
 
         0.0299900191f,
384
 
         0.0093587151f,
385
 
         0.0003183408f
386
 
    },
387
 
    {
388
 
         0.0012316933f,         /* Filter 10 */
389
 
        -0.0062301368f,
390
 
        -0.0241376359f,
391
 
        -0.0769959031f,
392
 
         0.9935863233f,
393
 
         0.0725519600f,
394
 
         0.0285475474f,
395
 
         0.0104140102f,
396
 
         0.0013648323f
397
 
    },
398
 
    {
399
 
         0.0020320508f,         /* Filter 11 */
400
 
        -0.0051210137f,
401
 
        -0.0239551212f,
402
 
        -0.0857546018f,
403
 
         1.0315754934f,
404
 
         0.0412866769f,
405
 
         0.0265310587f,
406
 
         0.0112098711f,
407
 
         0.0023554782f
408
 
    },
409
 
    {
410
 
         0.0028141763f,         /* Filter 12 */
411
 
        -0.0038896008f,
412
 
        -0.0233574765f,
413
 
        -0.0938829156f,
414
 
         1.0664075323f,
415
 
         0.0128597894f,
416
 
         0.0240144782f,
417
 
         0.0117421344f,
418
 
         0.0032736852f
419
 
    },
420
 
    {
421
 
         0.0035625973f,         /* Filter 13 */
422
 
        -0.0025560369f,
423
 
        -0.0223386620f,
424
 
        -0.1011856112f,
425
 
         1.0978137424f,
426
 
        -0.0126826277f,
427
 
         0.0210758250f,
428
 
         0.0120115019f,
429
 
         0.0041046165f
430
 
    },
431
 
    {
432
 
         0.0042620971f,         /* Filter 14 */
433
 
        -0.0011430452f,
434
 
        -0.0209002083f,
435
 
        -0.1074635265f,
436
 
         1.1255501596f,
437
 
        -0.0353228594f,
438
 
         0.0177957527f,
439
 
         0.0120233576f,
440
 
         0.0048354157f
441
 
    },
442
 
    {
443
 
         0.0048980053f,         /* Filter 15 */
444
 
         0.0003244045f,
445
 
        -0.0190515462f,
446
 
        -0.1125158080f,
447
 
         1.1494000377f,
448
 
        -0.0550707703f,
449
 
         0.0142561191f,
450
 
         0.0117875105f,
451
 
         0.0054553898f
452
 
    },
453
 
    {
454
 
         0.0054564857f,         /* Filter 16 */
455
 
         0.0018194852f,
456
 
        -0.0168102168f,
457
 
        -0.1161422557f,
458
 
         1.1691760633f,
459
 
        -0.0719627404f,
460
 
         0.0105386068f,
461
 
         0.0113178688f,
462
 
         0.0059561483f
463
 
    },
464
 
    {
465
 
         0.0059248154f,         /* Filter 17 */
466
 
         0.0033139475f,
467
 
        -0.0142019526f,
468
 
        -0.1181457502f,
469
 
         1.1847222770f,
470
 
        -0.0860603350f,
471
 
         0.0067234125f,
472
 
         0.0106320540f,
473
 
         0.0063316975f
474
 
    },
475
 
    {
476
 
         0.0062916504f,         /* Filter 18 */
477
 
         0.0047785946f,
478
 
        -0.0112606234f,
479
 
        -0.1183347329f,
480
 
         1.1959156771f,
481
 
        -0.0974487311f,
482
 
         0.0028880206f,
483
 
         0.0097509621f,
484
 
         0.0065784888f
485
 
    },
486
 
    {
487
 
         0.0065472715f,         /* Filter 19 */
488
 
         0.0061837898f,
489
 
        -0.0080280420f,
490
 
        -0.1165257094f,
491
 
         1.2026674866f,
492
 
        -0.1062349247f,
493
 
        -0.0008939235f,
494
 
         0.0086982833f,
495
 
         0.0066954225f
496
 
    },
497
 
    {
498
 
         0.0066838062f,         /* Filter 20 */
499
 
         0.0074999881f,
500
 
        -0.0045536271f,
501
 
        -0.1125457458f,
502
 
         1.2049240699f,
503
 
        -0.1125457458f,
504
 
        -0.0045536271f,
505
 
         0.0074999881f,
506
 
         0.0066838062f
507
 
    },
508
 
    {
509
 
         0.0066954225f,         /* Filter 21 */
510
 
         0.0086982833f,
511
 
        -0.0008939235f,
512
 
        -0.1062349247f,
513
 
         1.2026674866f,
514
 
        -0.1165257094f,
515
 
        -0.0080280420f,
516
 
         0.0061837898f,
517
 
         0.0065472715f
518
 
    },
519
 
    {
520
 
         0.0065784888f,         /* Filter 22 */
521
 
         0.0097509621f,
522
 
         0.0028880206f,
523
 
        -0.0974487311f,
524
 
         1.1959156771f,
525
 
        -0.1183347329f,
526
 
        -0.0112606234f,
527
 
         0.0047785946f,
528
 
         0.0062916504f
529
 
    },
530
 
    {
531
 
         0.0063316975f,         /* Filter 23 */
532
 
         0.0106320540f,
533
 
         0.0067234125f,
534
 
        -0.0860603350f,
535
 
         1.1847222770f,
536
 
        -0.1181457502f,
537
 
        -0.0142019526f,
538
 
         0.0033139475f,
539
 
         0.0059248154f
540
 
    },
541
 
    {
542
 
         0.0059561483f,         /* Filter 24 */
543
 
         0.0113178688f,
544
 
         0.0105386068f,
545
 
        -0.0719627404f,
546
 
         1.1691760633f,
547
 
        -0.1161422557f,
548
 
        -0.0168102168f,
549
 
         0.0018194852f,
550
 
         0.0054564857f
551
 
    },
552
 
    {
553
 
         0.0054553898f,         /* Filter 25 */
554
 
         0.0117875105f,
555
 
         0.0142561191f,
556
 
        -0.0550707703f,
557
 
         1.1494000377f,
558
 
        -0.1125158080f,
559
 
        -0.0190515462f,
560
 
         0.0003244045f,
561
 
         0.0048980053f
562
 
    },
563
 
    {
564
 
         0.0048354157f,         /* Filter 26 */
565
 
         0.0120233576f,
566
 
         0.0177957527f,
567
 
        -0.0353228594f,
568
 
         1.1255501596f,
569
 
        -0.1074635265f,
570
 
        -0.0209002083f,
571
 
        -0.0011430452f,
572
 
         0.0042620971f
573
 
    },
574
 
    {
575
 
         0.0041046165f,         /* Filter 27 */
576
 
         0.0120115019f,
577
 
         0.0210758250f,
578
 
        -0.0126826277f,
579
 
         1.0978137424f,
580
 
        -0.1011856112f,
581
 
        -0.0223386620f,
582
 
        -0.0025560369f,
583
 
         0.0035625973f
584
 
    },
585
 
    {
586
 
         0.0032736852f,         /* Filter 28 */
587
 
         0.0117421344f,
588
 
         0.0240144782f,
589
 
         0.0128597894f,
590
 
         1.0664075323f,
591
 
        -0.0938829156f,
592
 
        -0.0233574765f,
593
 
        -0.0038896008f,
594
 
         0.0028141763f
595
 
    },
596
 
    {
597
 
         0.0023554782f,         /* Filter 29 */
598
 
         0.0112098711f,
599
 
         0.0265310587f,
600
 
         0.0412866769f,
601
 
         1.0315754934f,
602
 
        -0.0857546018f,
603
 
        -0.0239551212f,
604
 
        -0.0051210137f,
605
 
         0.0020320508f
606
 
    },
607
 
    {
608
 
         0.0013648323f,         /* Filter 30 */
609
 
         0.0104140102f,
610
 
         0.0285475474f,
611
 
         0.0725519600f,
612
 
         0.9935863233f,
613
 
        -0.0769959031f,
614
 
        -0.0241376359f,
615
 
        -0.0062301368f,
616
 
         0.0012316933f
617
 
    },
618
 
    {
619
 
         0.0003183408f,         /* Filter 31 */
620
 
         0.0093587151f,
621
 
         0.0299900191f,
622
 
         0.1065807242f,
623
 
         0.9527307304f,
624
 
        -0.0677960213f,
625
 
        -0.0239181901f,
626
 
        -0.0071996967f,
627
 
         0.0004285425f
628
 
    },
629
 
    {
630
 
        -0.0007659096f,         /* Filter 32 */
631
 
         0.0080531155f,
632
 
         0.0307901140f,
633
 
         0.1432690480f,
634
 
         0.9093185032f,
635
 
        -0.0583361774f,
636
 
        -0.0233165437f,
637
 
        -0.0080155088f,
638
 
        -0.0003622774f
639
 
    },
640
 
    {
641
 
        -0.0018686358f,         /* Filter 33 */
642
 
         0.0065113237f,
643
 
         0.0308864956f,
644
 
         0.1824841563f,
645
 
         0.8636754069f,
646
 
        -0.0487878398f,
647
 
        -0.0223584207f,
648
 
        -0.0086666380f,
649
 
        -0.0011262266f
650
 
    },
651
 
    {
652
 
        -0.0029696854f,         /* Filter 34 */
653
 
         0.0047523617f,
654
 
         0.0302262769f,
655
 
         0.2240649005f,
656
 
         0.8161399423f,
657
 
        -0.0393111426f,
658
 
        -0.0210748106f,
659
 
        -0.0091454978f,
660
 
        -0.0018496023f
661
 
    },
662
 
    {
663
 
        -0.0040483891f,         /* Filter 35 */
664
 
         0.0027999985f,
665
 
         0.0287663895f,
666
 
         0.2678225635f,
667
 
         0.7670600056f,
668
 
        -0.0300535107f,
669
 
        -0.0195012095f,
670
 
        -0.0094478866f,
671
 
        -0.0025197700f
672
 
    },
673
 
    {
674
 
        -0.0050839319f,         /* Filter 36 */
675
 
         0.0006824956f,
676
 
         0.0264748749f,
677
 
         0.3135419896f,
678
 
         0.7167894869f,
679
 
        -0.0211485021f,
680
 
        -0.0176768181f,
681
 
        -0.0095729633f,
682
 
        -0.0031253709f
683
 
    },
684
 
    {
685
 
        -0.0060557371f,         /* Filter 37 */
686
 
        -0.0015677363f,
687
 
         0.0233320755f,
688
 
         0.3609830295f,
689
 
         0.6656848457f,
690
 
        -0.0127148737f,
691
 
        -0.0156437084f,
692
 
        -0.0095231635f,
693
 
        -0.0036565006f
694
 
    },
695
 
    {
696
 
        -0.0069438567f,         /* Filter 38 */
697
 
        -0.0039145680f,
698
 
         0.0193317049f,
699
 
         0.4098822897f,
700
 
         0.6141017035f,
701
 
        -0.0048558766f,
702
 
        -0.0134459768f,
703
 
        -0.0093040596f,
704
 
        -0.0041048584f
705
 
    },
706
 
    {
707
 
        -0.0077293609f,         /* Filter 39 */
708
 
        -0.0063186648f,
709
 
         0.0144817755f,
710
 
         0.4599551720f,
711
 
         0.5623914901f,
712
 
         0.0023412184f,
713
 
        -0.0111288952f,
714
 
        -0.0089241700f,
715
 
        -0.0044638629f
716
 
    },
717
 
};
718
 
 
719
275
static int fake_get_bit(void *user_data)
720
276
{
721
277
    return 1;
1068
624
            return NULL;
1069
625
    }
1070
626
    memset(s, 0, sizeof(*s));
 
627
    span_log_init(&s->logging, SPAN_LOG_NONE, NULL);
 
628
    span_log_set_protocol(&s->logging, "V.22bis");
1071
629
    s->bit_rate = bit_rate;
1072
630
    s->caller = caller;
1073
631
 
1097
655
        }
1098
656
    }
1099
657
    v22bis_tx_power(s, -10.0f);
1100
 
    span_log_init(&s->logging, SPAN_LOG_NONE, NULL);
1101
 
    span_log_set_protocol(&s->logging, "V.22bis");
1102
658
    v22bis_restart(s, s->bit_rate);
1103
659
    return s;
1104
660
}