1111#include < dsp/digital/binary_slicer.h>
1212#include < dsp/routing/doubler.h>
1313
14+ #include " packet_clock_sync.h"
15+
16+ inline float PATTERN_DSDSDZED[] = {
17+ -1.00000000e+00 , -8.00000000e-01 , -6.00000000e-01 , -4.00000000e-01 ,
18+ -2.00000000e-01 , -2.77555756e-17 , 2.00000000e-01 , 4.00000000e-01 ,
19+ 6.00000000e-01 , 8.00000000e-01 , 1.00000000e+00 , 1.00000000e+00 ,
20+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
21+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
22+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
23+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
24+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
25+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
26+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
27+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
28+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
29+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 8.00000000e-01 ,
30+ 6.00000000e-01 , 4.00000000e-01 , 2.00000000e-01 , 2.77555756e-17 ,
31+ -2.00000000e-01 , -4.00000000e-01 , -6.00000000e-01 , -8.00000000e-01 ,
32+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 ,
33+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 ,
34+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -8.00000000e-01 ,
35+ -6.00000000e-01 , -4.00000000e-01 , -2.00000000e-01 , -2.77555756e-17 ,
36+ 2.00000000e-01 , 4.00000000e-01 , 6.00000000e-01 , 8.00000000e-01 ,
37+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
38+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
39+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 8.00000000e-01 ,
40+ 6.00000000e-01 , 4.00000000e-01 , 2.00000000e-01 , 2.77555756e-17 ,
41+ -2.00000000e-01 , -4.00000000e-01 , -6.00000000e-01 , -8.00000000e-01 ,
42+ -1.00000000e+00 , -8.00000000e-01 , -6.00000000e-01 , -4.00000000e-01 ,
43+ -2.00000000e-01 , -2.77555756e-17 , 2.00000000e-01 , 4.00000000e-01 ,
44+ 6.00000000e-01 , 8.00000000e-01 , 1.00000000e+00 , 8.00000000e-01 ,
45+ 6.00000000e-01 , 4.00000000e-01 , 2.00000000e-01 , 2.77555756e-17 ,
46+ -2.00000000e-01 , -4.00000000e-01 , -6.00000000e-01 , -8.00000000e-01 ,
47+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 ,
48+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 ,
49+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -8.00000000e-01 ,
50+ -6.00000000e-01 , -4.00000000e-01 , -2.00000000e-01 , -2.77555756e-17 ,
51+ 2.00000000e-01 , 4.00000000e-01 , 6.00000000e-01 , 8.00000000e-01 ,
52+ 1.00000000e+00 , 8.00000000e-01 , 6.00000000e-01 , 4.00000000e-01 ,
53+ 2.00000000e-01 , 2.77555756e-17 , -2.00000000e-01 , -4.00000000e-01 ,
54+ -6.00000000e-01 , -8.00000000e-01 , -1.00000000e+00 , -1.00000000e+00 ,
55+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 ,
56+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 ,
57+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 ,
58+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 ,
59+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 ,
60+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 ,
61+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 ,
62+ -1.00000000e+00 , -8.00000000e-01 , -6.00000000e-01 , -4.00000000e-01 ,
63+ -2.00000000e-01 , -2.77555756e-17 , 2.00000000e-01 , 4.00000000e-01 ,
64+ 6.00000000e-01 , 8.00000000e-01 , 1.00000000e+00 , 8.00000000e-01 ,
65+ 6.00000000e-01 , 4.00000000e-01 , 2.00000000e-01 , 2.77555756e-17 ,
66+ -2.00000000e-01 , -4.00000000e-01 , -6.00000000e-01 , -8.00000000e-01 ,
67+ -1.00000000e+00 , -8.00000000e-01 , -6.00000000e-01 , -4.00000000e-01 ,
68+ -2.00000000e-01 , -2.77555756e-17 , 2.00000000e-01 , 4.00000000e-01 ,
69+ 6.00000000e-01 , 8.00000000e-01 , 1.00000000e+00 , 8.00000000e-01 ,
70+ 6.00000000e-01 , 4.00000000e-01 , 2.00000000e-01 , 2.77555756e-17 ,
71+ -2.00000000e-01 , -4.00000000e-01 , -6.00000000e-01 , -8.00000000e-01 ,
72+ -1.00000000e+00 , -8.00000000e-01 , -6.00000000e-01 , -4.00000000e-01 ,
73+ -2.00000000e-01 , -2.77555756e-17 , 2.00000000e-01 , 4.00000000e-01 ,
74+ 6.00000000e-01 , 8.00000000e-01 , 1.00000000e+00 , 1.00000000e+00 ,
75+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
76+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
77+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
78+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
79+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 8.00000000e-01 ,
80+ 6.00000000e-01 , 4.00000000e-01 , 2.00000000e-01 , 2.77555756e-17 ,
81+ -2.00000000e-01 , -4.00000000e-01 , -6.00000000e-01 , -8.00000000e-01 ,
82+ -1.00000000e+00 , -8.00000000e-01 , -6.00000000e-01 , -4.00000000e-01 ,
83+ -2.00000000e-01 , -2.77555756e-17 , 2.00000000e-01 , 4.00000000e-01 ,
84+ 6.00000000e-01 , 8.00000000e-01 , 1.00000000e+00 , 1.00000000e+00 ,
85+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
86+ 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 , 1.00000000e+00 ,
87+ 1.00000000e+00 , 8.00000000e-01 , 6.00000000e-01 , 4.00000000e-01 ,
88+ 2.00000000e-01 , 2.77555756e-17 , -2.00000000e-01 , -4.00000000e-01 ,
89+ -6.00000000e-01 , -8.00000000e-01 , -1.00000000e+00 , -1.00000000e+00 ,
90+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 ,
91+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 ,
92+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 ,
93+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00 ,
94+ -1.00000000e+00 , -1.00000000e+00 , -1.00000000e+00
95+ };
96+
1497class POCSAGDSP : public dsp ::Processor<dsp::complex_t , uint8_t > {
1598 using base_type = dsp::Processor<dsp::complex_t , uint8_t >;
1699public:
@@ -27,7 +110,9 @@ class POCSAGDSP : public dsp::Processor<dsp::complex_t, uint8_t> {
27110 float taps[] = { 0 .1f , 0 .1f , 0 .1f , 0 .1f , 0 .1f , 0 .1f , 0 .1f , 0 .1f , 0 .1f , 0 .1f };
28111 shape = dsp::taps::fromArray<float >(10 , taps);
29112 fir.init (NULL , shape);
30- recov.init (NULL , samplerate/baudrate, 1e-4 , 1.0 , 0.05 );
113+ // recov.init(NULL, samplerate/baudrate, 1e-4, 1.0, 0.05);
114+
115+ cs.init (NULL , PATTERN_DSDSDZED, sizeof (PATTERN_DSDSDZED)/sizeof (float ), 544 , 10 );
31116
32117 // Free useless buffers
33118 // dcBlock.out.free();
@@ -42,8 +127,11 @@ class POCSAGDSP : public dsp::Processor<dsp::complex_t, uint8_t> {
42127 count = demod.process (count, in, demod.out .readBuf );
43128 // count = dcBlock.process(count, demod.out.readBuf, demod.out.readBuf);
44129 count = fir.process (count, demod.out .readBuf , demod.out .readBuf );
45- count = recov.process (count, demod.out .readBuf , softOut);
46- dsp::digital::BinarySlicer::process (count, softOut, out);
130+ // count = recov.process(count, demod.out.readBuf, softOut);
131+
132+ count = cs.process (count, demod.out .readBuf , softOut);
133+
134+ // dsp::digital::BinarySlicer::process(count, softOut, out);
47135 return count;
48136 }
49137
@@ -58,8 +146,10 @@ class POCSAGDSP : public dsp::Processor<dsp::complex_t, uint8_t> {
58146 count = process (count, base_type::_in->readBuf , soft.writeBuf , base_type::out.writeBuf );
59147
60148 base_type::_in->flush ();
61- if (!base_type::out.swap (count)) { return -1 ; }
62- if (!soft.swap (count)) { return -1 ; }
149+ // if (!base_type::out.swap(count)) { return -1; }
150+
151+ if (count) { if (!soft.swap (count)) { return -1 ; } }
152+
63153 return count;
64154 }
65155
@@ -72,4 +162,6 @@ class POCSAGDSP : public dsp::Processor<dsp::complex_t, uint8_t> {
72162 dsp::filter::FIR<float , float > fir;
73163 dsp::clock_recovery::MM<float > recov;
74164
165+ dsp::PacketClockSync cs;
166+
75167};
0 commit comments