discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Using LMS adaptive filter


From: Nedelin Rusev
Subject: Using LMS adaptive filter
Date: Fri, 28 Oct 2022 11:30:55 +0300

Hi,

Lately I am experimenting with the idea of estimating a radio channel with the help of an adaptive LMS filter. For this purpose I use gnuradio 3.8, LimeSDR-mini and the following repo https://github.com/karel/gr-adapt.
I have attached my model and a screenshot with results from a live session (data sent and received through a single SDR device).

Rough description of the model:
- Input signal: I use a sequence of 512 integers, which has a high autocorrelation property, to make it easier to visualize the signal. I place 512 zeros before and after the sequence.
- Transmission: the data goes straight to a RRC filter ("Reference" signal) then to the SDR Tx or the Channel Model block ("TxData" signal)
- Reception: the signal from SDR Rx or channel model passes through another RRC filter, with the same settings as the first one, ("RxDataRaw" signal). Just for experimental purposes I've also added DC-Blocker and Low Pass Filter, to see how they will affect the following processing ("RxData").
- Processing: Two LMS Filters are applied. One on the "RxDataRaw" signal, and produces "LMS_Fixed_Raw". The other on the "RxData" signal, and produces "LMS_Fixed". Both use the "Reference" signal on its reference port. I also compare the correlation between the initial sequence and respectively "Reference", "LMS_Fixed_Raw", "LMS_Fixed", "RxDataRaw". This is my indication of how well the data is recovered after LMS processing (the higher the peak the better the recovery).

Observations:
The LMS filter is able to recover the signal to a certain level. A common test I do, when using Channel Model Block, not SDR, is the following:
- compensate the RRC and The Low pass filter delays: set Rx delay Raw=-15, set Rx delay = -85
- the channel filter already has some predefined taps, but now I add extra noise (0.2) and frequency offset (0.005, I don't know if this is a lot or not)
What I see is that the received signal gets very unstable. But the LMS filter will remove this instability and will try to recover the signal (zooming in Data Compare graph will be needed to see this).
Similar behavior I observe with SDR, but I need to constantly play with the Rx delay* values and also to increase the LMS "mu" value.

Few things I'd like to ask:
1. How can I automate the manual delay changes? I guess with the current setup, I could use correlator + peak detector. But what if my input signal is just noise, as I think it should be?
2. I am suspicious about my transmission setup. For the moment I use 1MHz sample rate, just because the laptop is able to transmit and receive data at roughly the same rate. If I get it correct this makes a bandwidth of 500kHz. But I'd like to be able to change the bandwidth in future. Currently if I push the sample rate to the limit (30.72MHz), then the SDR transmits with 11MB/s, but reads with 123MB/s, the model goes crazy and the laptop starts sweating :) Any guidelines on how to properly synchronize Tx and Rx?
3. Again related to transmission: how do I calculate the Symbol Rate property of the Root Raised Cosine Filter?

Thank you in advance,
Greetings, Nedelin.

Attachment: channel_estimate.grc
Description: application/gnuradio-grc

Attachment: channel_estimate.pdf
Description: Adobe PDF document

Attachment: LMSResult.jpg
Description: JPEG image


reply via email to

[Prev in Thread] Current Thread [Next in Thread]