Skip to content

Commit 603880b

Browse files
committed
BPF for 2020B, compression tuned
1 parent 1269b56 commit 603880b

File tree

5 files changed

+128
-7
lines changed

5 files changed

+128
-7
lines changed

octave/ofdm_lib.m

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,9 +326,10 @@
326326
elseif strcmp(mode,"2020B")
327327
Ts = 0.014; Tcp = 0.004; Nc = 29; Ns=5;
328328
config.Ntxtbits = 4; config.Nuwbits = 8*2; config.bad_uw_errors = 5;
329-
config.amp_scale = 167E3; config.clip_gain1 = 2.5; config.clip_gain2 = 0.8;
329+
config.amp_scale = 130E3; config.clip_gain1 = 2.5; config.clip_gain2 = 0.8;
330330
config.edge_pilots = 0; config.state_machine = "voice2";
331-
config.foff_limiter = 1; config.ftwindow_width = 64;
331+
config.foff_limiter = 1; config.ftwindow_width = 64;
332+
config.txbpf_width_Hz = 2200;
332333
elseif strcmp(mode,"qam16c1")
333334
Ns=5; config.Np=5; Tcp = 0.004; Ts = 0.016; Nc = 33; config.data_mode = "streaming";
334335
config.bps=4; config.Ntxtbits = 0; config.Nuwbits = 15*4; config.bad_uw_errors = 5;

src/filter.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,12 @@ extern void quisk_filt_destroy(struct quisk_cfFilter *);
3737
extern void quisk_cfTune(struct quisk_cfFilter *, float);
3838
extern void quisk_ccfFilter(complex float *, complex float *, int, struct quisk_cfFilter *);
3939

40-
extern float quiskFilt120t480[480];
40+
extern float filtP400S600[100];
4141
extern float filtP550S750[160];
42-
extern float filtP900S1100[100];
4342
extern float filtP650S900[100];
44-
extern float filtP400S600[100];
43+
extern float filtP900S1100[100];
44+
extern float filtP1100S1300[100];
45+
46+
extern float quiskFilt120t480[480];
4547

4648
#endif

src/filter_coef.h

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,119 @@ float filtP900S1100[]={
400400
0.0004418158615696
401401
};
402402

403+
/*
404+
Low pass filter, sample rate 8000 Hz, 60dB dB atten, pass 1100 Hz, stop 1300 Hz
405+
Designed for 2020B.
406+
407+
Generated using Octave:
408+
octave:77> h = fir1(99, 2400/8000); f=500:1500; w=f*pi/4000; H=freqz(h,1,w);
409+
octave:78> clf; plot(f,20*log10(abs(H))); grid; axis([500 1500 -60 10])
410+
octave:79> save_array_c_header(h,"filtP1100S1300","t.h")
411+
*/
412+
413+
float filtP1100S1300[]={
414+
0.0002976192596492,
415+
0.0005268501327879,
416+
0.0003323197705342,
417+
-0.0001770640927819,
418+
-0.0006221531076115,
419+
-0.0006005231876771,
420+
-0.0000195189229256,
421+
0.0007355731515642,
422+
0.0010099584762544,
423+
0.0004067132502827,
424+
-0.0007585687884437,
425+
-0.0015415736366462,
426+
-0.0010864635373405,
427+
0.0005254729116986,
428+
0.0020855203587287,
429+
0.0021026629812395,
430+
0.0001529382567188,
431+
-0.0024362700654142,
432+
-0.0033992733694222,
433+
-0.0014410368832294,
434+
0.0023100278520809,
435+
0.0047915084415380,
436+
0.0034240108979541,
437+
-0.0013824387082528,
438+
-0.0059564413269030,
439+
-0.0060581288076594,
440+
-0.0006611518028655,
441+
0.0064434052119832,
442+
0.0091346892160535,
443+
0.0040759939927406,
444+
-0.0056953567245917,
445+
-0.0122613043769937,
446+
-0.0090272691278832,
447+
0.0030572766146697,
448+
0.0148523753937746,
449+
0.0156061208345573,
450+
0.0022854541227764,
451+
-0.0160929898905979,
452+
-0.0239498761167209,
453+
-0.0116013322861975,
454+
0.0147513846300672,
455+
0.0346571639712145,
456+
0.0277787088019838,
457+
-0.0082808984532188,
458+
-0.0505010122605824,
459+
-0.0613407201912362,
460+
-0.0130972319259225,
461+
0.0900965824440442,
462+
0.2087764094817421,
463+
0.2877718571344791,
464+
0.2877718571344791,
465+
0.2087764094817421,
466+
0.0900965824440442,
467+
-0.0130972319259225,
468+
-0.0613407201912362,
469+
-0.0505010122605824,
470+
-0.0082808984532188,
471+
0.0277787088019838,
472+
0.0346571639712145,
473+
0.0147513846300672,
474+
-0.0116013322861975,
475+
-0.0239498761167209,
476+
-0.0160929898905979,
477+
0.0022854541227764,
478+
0.0156061208345573,
479+
0.0148523753937746,
480+
0.0030572766146697,
481+
-0.0090272691278832,
482+
-0.0122613043769937,
483+
-0.0056953567245917,
484+
0.0040759939927406,
485+
0.0091346892160535,
486+
0.0064434052119832,
487+
-0.0006611518028655,
488+
-0.0060581288076594,
489+
-0.0059564413269030,
490+
-0.0013824387082528,
491+
0.0034240108979541,
492+
0.0047915084415380,
493+
0.0023100278520809,
494+
-0.0014410368832294,
495+
-0.0033992733694222,
496+
-0.0024362700654142,
497+
0.0001529382567188,
498+
0.0021026629812395,
499+
0.0020855203587287,
500+
0.0005254729116986,
501+
-0.0010864635373405,
502+
-0.0015415736366462,
503+
-0.0007585687884437,
504+
0.0004067132502827,
505+
0.0010099584762544,
506+
0.0007355731515642,
507+
-0.0000195189229256,
508+
-0.0006005231876771,
509+
-0.0006221531076115,
510+
-0.0001770640927819,
511+
0.0003323197705342,
512+
0.0005268501327879,
513+
0.0002976192596492
514+
};
515+
403516
// FIR filter suitable for changing rates 7500 to/from 8000
404517
// Sample 120000 Hz, pass 2700, stop 3730, ripple 0.1dB, atten 100 dB. Stop 0.03108.
405518
float quiskFilt120t480[480] = {
@@ -500,3 +613,4 @@ float quiskFilt120t480[480] = {
500613
0.000023463361155584, 0.000017966192635412, 0.000013350669444763, 0.000009551098482930, 0.000006499942123311,
501614
0.000004115682735322, 0.000002322193058869, 0.000001038946634000, 0.000000197734700398, -0.000000267011791999,
502615
-0.000005050567303837 };
616+

src/ofdm.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,10 @@ static void allocate_tx_bpf(struct OFDM *ofdm) {
547547
quisk_filt_cfInit(ofdm->tx_bpf, filtP900S1100, sizeof (filtP900S1100) / sizeof (float));
548548
quisk_cfTune(ofdm->tx_bpf, ofdm->tx_centre / ofdm->fs);
549549
}
550+
else if (!strcmp(ofdm->mode, "2020B")) {
551+
quisk_filt_cfInit(ofdm->tx_bpf, filtP1100S1300, sizeof (filtP1100S1300) / sizeof (float));
552+
quisk_cfTune(ofdm->tx_bpf, ofdm->tx_centre / ofdm->fs);
553+
}
550554
else if (!strcmp(ofdm->mode, "datac0") || !strcmp(ofdm->mode, "datac3")) {
551555
quisk_filt_cfInit(ofdm->tx_bpf, filtP400S600, sizeof (filtP400S600) / sizeof (float));
552556
quisk_cfTune(ofdm->tx_bpf, ofdm->tx_centre / ofdm->fs);
@@ -941,7 +945,7 @@ void ofdm_hilbert_clipper(struct OFDM *ofdm, complex float *tx, size_t n) {
941945
/* BPF to remove out of band energy clipper introduces */
942946
if (ofdm->tx_bpf_en) {
943947
assert(!strcmp(ofdm->mode, "700D") || !strcmp(ofdm->mode, "700E")
944-
|| !strcmp(ofdm->mode, "2020") || !strcmp(ofdm->mode, "2020A")
948+
|| !strcmp(ofdm->mode, "2020") || !strcmp(ofdm->mode, "2020A") || !strcmp(ofdm->mode, "2020B")
945949
|| !strcmp(ofdm->mode, "datac0") || !strcmp(ofdm->mode, "datac3"));
946950
assert(ofdm->tx_bpf != NULL);
947951
complex float tx_filt[n];

src/ofdm_mode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ void ofdm_init_mode(char mode[], struct OFDM_CONFIG *config) {
6464
} else if (strcmp(mode,"2020B") == 0) {
6565
config->ts = 0.014; config->tcp = 0.004; config->nc = 29; config->ns=5; config->codename = "HRA_56_56";
6666
config->txtbits = 4; config->nuwbits = 8*2; config->bad_uw_errors = 5;
67-
config->tx_bpf_en = false; config->amp_scale = 167E3; config->clip_gain1 = 2.5; config->clip_gain2 = 0.8;
67+
config->tx_bpf_en = false; config->amp_scale = 130E3; config->clip_gain1 = 2.5; config->clip_gain2 = 0.8;
6868
config->edge_pilots = 0; config->state_machine = "voice2";
6969
config->ftwindowwidth = 64; config->foff_limiter = true;
7070
} else if (strcmp(mode,"qam16") == 0) {

0 commit comments

Comments
 (0)