From 3e0b04231d25735be6a9e278769e8b389ced102e Mon Sep 17 00:00:00 2001 From: bemasher Date: Wed, 17 Aug 2016 22:38:18 -0600 Subject: [PATCH] Escape $$'s, kramdown mangles these with their own latex handling. --- docs/signal.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/signal.md b/docs/signal.md index b5c6a337d..3b766ac0a 100644 --- a/docs/signal.md +++ b/docs/signal.md @@ -21,44 +21,44 @@ The ERT protocol is an on-off keyed manchester-coded signal transmitted at bit-r The signal is made up of interleaved in-phase and quadrature samples, 8-bits per component. The amplitude of each sample is: -$$\vert z\vert = \sqrt{\Re(z)^2 + \Im(z)^2}$$ +\$\$\vert z\vert = \sqrt{\Re(z)^2 + \Im(z)^2}\$\$ To meet performance requirements the magnitude computation has two implementations. The first uses a pre-computed lookup table which maps all possible 8-bit values to their floating-point squares. Calculating the magnitude using the lookup table then only involves two lookups, one addition and one square-root. The second implementation is an approximation known as Alpha-Max plus Beta-Min whose efficiency comes from eliminating the square root operation: -$$ +\$\$ \begin{aligned} &\alpha = \frac{2\cos\frac{\pi}{8}}{1+cos\frac{\pi}{8}} \qquad \beta = \frac{2\sin\frac{\pi}{8}}{1+cos\frac{\pi}{8}} \\ \\ \vert z\vert \approx \,&\alpha\cdot\max(\Re(z),\Im(z)) + \beta\cdot\min(\Re(z),\Im(z)) \end{aligned} -$$ +\$\$ ## Filtering *** Filtering is required for later bit decision. The ideal filter kernel for a square-wave signal is known as a boxcar and is essentially a moving average. Due to the signal being manchester coded the ideal filter is a step function. Manchester coding mixes data with a clock signal to allow for synchronization and clock recovery while decoding as well as reducing any DC offset that would be present due to content of the data. The symbol length [[N]] is determined by the sampling rate [[F_s]] of the receiver and the data rate [[R]] of the signal. -$$N = \frac{F_s}{R}$$ +\$\$N = \frac{F_s}{R}\$\$ The maximum sample rate without any sample loss is between 2.4 and 2.56 MHz. To simplify decoding we determine the sample rate from integral symbol lengths. From librtlsdr, the sample rate must satisfy one of two conditions: -$$ +\$\$ \begin{aligned} 225\text{kHz} \lt \, &F_s \le 300\text{kHz} \\ 900\text{kHz} \lt \, &F_s \le 3.2\text{MHz} \\ \end{aligned} -$$ +\$\$ From this we can determine all of the valid symbol lengths and their corresponding sample rates. More info [here](https://github.com/bemasher/rtlamr/blob/master/help.md). Filtering can be implemented efficiently by computing the cumulative sum of each sample block and calculating the difference between a pair of subtractions: -$$ +\$\$ \begin{aligned} \mathbf{M}_i &= \sum_{j=i}^{i+N} \mathbf{S}_j - \mathbf{S}_{j+N} \\ \\ &= (\mathbf{C}_{i+N} - \mathbf{C}_i) - (\mathbf{C}_{i+2N} - \mathbf{C}_{i+N}) \\ \\ &= 2\mathbf{C}_{i+N}-\mathbf{C}_{i+2 N}-\mathbf{C}_i \end{aligned} -$$ +\$\$ Where [[\mathbf{M}]] is the filtered signal, [[\mathbf{S}]] is the sample vector, [[N]] is the symbol length and [[\mathbf{C}]] is the cumulative or prefix sum of the signal.