diff options
author | jcorgan | 2008-09-13 23:43:19 +0000 |
---|---|---|
committer | jcorgan | 2008-09-13 23:43:19 +0000 |
commit | c4b73c460d21b3f0f6c608d38144eb7ae09c43ae (patch) | |
tree | d2e0a765bbb533b91ddf0b0a586e0909d3ab412d /gnuradio-examples/python/digital-bert/README | |
parent | bdcae56ac025ffd4c596201e672db87d192398d1 (diff) | |
download | gnuradio-c4b73c460d21b3f0f6c608d38144eb7ae09c43ae.tar.gz gnuradio-c4b73c460d21b3f0f6c608d38144eb7ae09c43ae.tar.bz2 gnuradio-c4b73c460d21b3f0f6c608d38144eb7ae09c43ae.zip |
Merged r9564:9568 from jcorgan/bert into trunk. Adds BPSK bit error testing examples and support blocks.
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@9569 221aa14e-8319-0410-a670-987f0aec2ac5
Diffstat (limited to 'gnuradio-examples/python/digital-bert/README')
-rw-r--r-- | gnuradio-examples/python/digital-bert/README | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/gnuradio-examples/python/digital-bert/README b/gnuradio-examples/python/digital-bert/README new file mode 100644 index 000000000..74d85b703 --- /dev/null +++ b/gnuradio-examples/python/digital-bert/README @@ -0,0 +1,62 @@ +BERT testing example scripts + + +benchmark_tx.py + +This sets up a BPSK transmitter that is modulated with a pseudorandom +sequence of bits. The PN code is generated by sending an all 1s +sequence through a 7-bit scrambler. The transmitter performs the BPSK +modulation, then passes the complex baseband waveform through a +root-raised-cosine filter and onto the USRP. + +The --sps parameter controls how many baseband samples per symbol +are created and passed through the RRC filter, prior to going to the +USRP over the USB for interpolation to the final DAC rate. + +The baseband bit rate is controlled by -r or --rate. This value, when +multiplied by the --sps parameter, must result in valid interpolation +rate for the USRP. For example, if the baseband rate is 250k bits/sec, +and the samples per symbol is 4, then the final rate is 1M samples/sec, +which results in an interpolation rate of 128. The valid interpolation +rates for the USRP are multiples of 4 between 16 and 512. + +Finally, the RRC excess bandwidth may be specified by --excess-bw. +(See ./benchmark_tx.py -h for additional parameters.) + + +benchmark_rx.py + +This sets up a BPSK receiver to demodulate the received waveform. It +accepts a similar set of parameters as the transmitter, except that one +specifies the USRP decimation rate desired. The resulting sample stream +rate must be an integral number of baseband symbols. For example, the +parameters corresponding to the above transmitter would be to use a +decimation rate of 8 (32 sps), 16 (16 sps), 32 (8 sps), 64, (4 sps), or +128 (2 sps). The lower the USRP decimation, the more CPU is required to +demodulate the signal, so not all valid decimation rates will work. + +The baseband signal from the USRP is first passed through an AGC to +establish an average power of 1.0. It is then passed through a matched +filter (another RRC), a Costas phase-locked loop, and an M&M bit timing +recovery loop. The resulting constellation has an SNR estimation probe +attached, and is then sliced into a bit stream. + +The recovered bits are then passed through a 7-bit descrambler. If +there are no channel errors, the all 1s sequence is recovered. In the +event of a channel error, there will be a 0 in the bit stream for each +feedback tap in the descrambler. In this case, the CCSDS descrambler is +using 3 feedback taps. + +Finally, the signal is passed into a bit density measurement probe. The +channel BER is measured by dividing the 0s density by three. This +measurement is inaccurate at high BER rates (>10%) as the error 0s +begin to overlap. + +The benchmark script will, once per second, output the mean symbol power, +the average noise variance, the estimated SNR, and the average BER. + +NOTE: The particular SNR estimator used is inaccurate below about 7dB, +and will report erroneously high values even for random noise. + +There are a variety of Costas and M&M loop parameters one can adjust. +See ./benchmark_rx.py -h for the full set. |