LMS DD Equalizer: Difference between revisions
(Created page with "Category:Block Docs Category:Stub Docs This is the template for the "Page-per-block Docs". This first section should describe what the block...") |
No edit summary |
||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
[[Category:Block Docs]] | [[Category:Block Docs]] | ||
[[ | '''(DEPRECATED in 3.9 - Will be removed in a future release) - replaced by [[Linear_Equalizer]] and [[Adaptive_Algorithm]]''' | ||
This block implements an LMS-based decision-directed equalizer. | |||
It uses a set of weights, w, to correlate against the inputs, u, and a decisions is then made from this output. The error in the decision is used to update the weight vector. | |||
y[n] = conj(w[n]) u[n] d[n] = decision(y[n]) e[n] = d[n] - y[n] w[n+1] = w[n] + mu u[n] conj(e[n]) | |||
Where mu is a gain value (between 0 and 1 and usually small, around 0.001 - 0.01. | |||
This block uses the digital_constellation object for making the decision from y[n]. Create the constellation object for whatever constellation is to be used and pass in the object. In Python, you can use something like: | |||
self.constellation = digital.constellation_qpsk() | |||
To create a QPSK constellation (see the digital_constellation block for more details as to what constellations are available or how to create your own). You then pass the object to this block as an sptr, or using "self.constellation.base()". | |||
The theory for this algorithm can be found in Chapter 9 of: S. Haykin, Adaptive Filter Theory, Upper Saddle River, NJ: Prentice Hall, 1996. | |||
== Parameters == | == Parameters == | ||
(''R''): <span class="plainlinks">[https://wiki.gnuradio.org/index.php/GNURadioCompanion#Variable_Controls ''Run-time adjustable'']</span> | (''R''): <span class="plainlinks">[https://wiki.gnuradio.org/index.php/GNURadioCompanion#Variable_Controls ''Run-time adjustable'']</span> | ||
; | ; Gain (''R'') | ||
: | : Gain of the update loop | ||
; Num. Taps | |||
: Number of taps in the equalizer (channel size) | |||
; Samples per Symbol | |||
: Number of samples per symbol of the input signal | |||
; | ; Constellation Object | ||
: | : A constellation derived from class 'constellation'. | ||
== Example Flowgraph == | == Example Flowgraph == | ||
Line 21: | Line 36: | ||
; C++ files | ; C++ files | ||
: [https://github.com/gnuradio/gnuradio | : [https://github.com/gnuradio/gnuradio/blob/master/gr-digital/lib/lms_dd_equalizer_cc_impl.cc] | ||
; Header files | ; Header files | ||
: [https://github.com/gnuradio/gnuradio | : [https://github.com/gnuradio/gnuradio/blob/master/gr-digital/lib/lms_dd_equalizer_cc_impl.h] | ||
; Public header files | ; Public header files | ||
: [https://github.com/gnuradio/gnuradio | : [https://github.com/gnuradio/gnuradio/blob/master/gr-digital/include/gnuradio/digital/lms_dd_equalizer_cc.h] | ||
; Block definition | ; Block definition | ||
: [https://github.com/gnuradio/gnuradio | : [https://github.com/gnuradio/gnuradio/blob/master/gr-digital/grc/digital_lms_dd_equalizer_cc.block.yml] |
Latest revision as of 15:32, 8 April 2020
(DEPRECATED in 3.9 - Will be removed in a future release) - replaced by Linear_Equalizer and Adaptive_Algorithm
This block implements an LMS-based decision-directed equalizer.
It uses a set of weights, w, to correlate against the inputs, u, and a decisions is then made from this output. The error in the decision is used to update the weight vector.
y[n] = conj(w[n]) u[n] d[n] = decision(y[n]) e[n] = d[n] - y[n] w[n+1] = w[n] + mu u[n] conj(e[n])
Where mu is a gain value (between 0 and 1 and usually small, around 0.001 - 0.01.
This block uses the digital_constellation object for making the decision from y[n]. Create the constellation object for whatever constellation is to be used and pass in the object. In Python, you can use something like:
self.constellation = digital.constellation_qpsk()
To create a QPSK constellation (see the digital_constellation block for more details as to what constellations are available or how to create your own). You then pass the object to this block as an sptr, or using "self.constellation.base()".
The theory for this algorithm can be found in Chapter 9 of: S. Haykin, Adaptive Filter Theory, Upper Saddle River, NJ: Prentice Hall, 1996.
Parameters
(R): Run-time adjustable
- Gain (R)
- Gain of the update loop
- Num. Taps
- Number of taps in the equalizer (channel size)
- Samples per Symbol
- Number of samples per symbol of the input signal
- Constellation Object
- A constellation derived from class 'constellation'.
Example Flowgraph
Insert description of flowgraph here, then show a screenshot of the flowgraph and the output if there is an interesting GUI. Currently we have no standard method of uploading the actual flowgraph to the wiki or git repo, unfortunately. The plan is to have an example flowgraph showing how the block might be used, for every block, and the flowgraphs will live in the git repo.
Source Files
- C++ files
- [1]
- Header files
- [2]
- Public header files
- [3]
- Block definition
- [4]