David Rowe | 17 Jul 2012 23:58
Favicon
Gravatar

fixed point fdmdv tx

Hello Gullik (and list),

Background: Gullik is working on a fixed point port of the fdmdv tx
side.  I thought this might be useful for others.

For fixed point work in general we use 16 bits for inputs to multiplier
data and 32 bits for results.

For a fixed point port of the tx filter loop:

	acc += M * tx_filter_memory[c][j].real * gt_alpha5_root[k];

Take it step by step. At each step test the BER of the modem at the
operating SNR of around 7dB using the Octave version of the demod.  Plot
the float tx output and fixed point on top of each other to spot any
gross errors.  Use version control to back up if something breaks.

1/ Simulate fixed point quantisation of gt_alpha5_root[k], with
something like:

	short gt_alpha5_root_fixed = (M*gt_alpha5_root[k])<< S + 0.5;
	acc += tx_filter_memory[c][j].real * gt_alpha5_root_fixed;
 	acc  >>= S + (1<<(S-1));

Experiment with S so that gt_alpha5_root_fixed doesn't overflow.  The
0.5 and (1<<(S-1)) (half a LSB) are for rounding.

2/ You can then check if acc is overflowing by clipping it to 32 bit
limits acc_max and acc_min:

(Continue reading)


Gmane