Skip to main content

Equalizer to reduce Multi-path Effects using MATLAB

 

Steps

1. Convert Bit Stream to Bipolar Format. Converts the bit stream from binary (0, 1) to bipolar format (-1, 1).

2. Define Channel Impulse Response

3. Pass Signal Through the Channel. Convolves the bipolar signal with the channel impulse response to simulate the channel effect.

4. Adds Gaussian noise to the received signal based on the specified SNR.

5. Initialize Adaptive Filter Parameters. 

  • w: Initializes the adaptive filter coefficients.
  • x_buf: Initializes the buffer for the input to the adaptive filter.
  • equalized_signal: Initializes the array to store the equalized signal.
  • P: Initializes the inverse correlation matrix.
  • 6. Adaptive Equalization Using RLS Algorithm

    Loops through each sample to perform adaptive equalization:

    • Update Input Buffer: Adds the current sample to the input buffer.
    • Calculate Gain Vector: Computes the gain vector k for the adaptive filter.
    • Calculate Error Signal: Computes the error between the original signal and the filter output.
    • Update Filter Coefficients: Updates the adaptive filter coefficients based on the error signal.
    • Update Inverse Correlation Matrix: Updates the inverse correlation matrix for the RLS algorithm.
    • Store Equalized Output: Stores the equalized signal in the output array.

    7. Plot Original and Equalized Signals 

     

    MATLAB Script

    clc;
    clear;
    close all;

    % Parameters
    bit_stream = [1, 1, 0, 0, 1, 0, 1, 1, 1, 0]; % Original bit stream
    N = length(bit_stream); % Number of samples
    filter_order = 10; % Order of the adaptive filter
    lambda = 0.99; % Forgetting factor for RLS algorithm
    delta = 1; % Initial value for the inverse correlation matrix
    SNR = 15; % SNR value in dB

    % Convert bit stream to bipolar format (-1, 1)
    original_signal = bit_stream * 2 - 1;

    % Channel impulse response
    h = [0.75, 0.05, 0.02];

    % Pass the signal through the channel
    received_signal = filter(h, 1, original_signal);

    % Add some noise
    received_signal_noisy = awgn(received_signal, SNR, 'measured');

    % Initialize the adaptive filter coefficients
    w = zeros(filter_order, 1);

    % Initialize buffer for the input to the adaptive filter
    x_buf = zeros(filter_order, 1);

    % Initialize output
    equalized_signal = zeros(N, 1);

    % Initialize the inverse correlation matrix
    P = delta * eye(filter_order);

    % Adaptive equalization using RLS
    for n = 1:N
        % Update the input buffer
        x_buf = [received_signal_noisy(n); x_buf(1:end-1)];

        % Calculate the gain vector
        k = (P * x_buf) / (lambda + x_buf' * P * x_buf);

        % Calculate the error signal
        e = original_signal(n) - w' * x_buf;

        % Update the filter coefficients
        w = w + k * e;

        % Update the inverse correlation matrix
        P = (P - k * x_buf' * P) / lambda;

        % Store the equalized output
        equalized_signal(n) = w' * x_buf;
    end

    % Plot original and equalized signals
    figure;
    subplot(2, 1, 1);
    stem(original_signal, 'filled');
    title('Original Signal');
    xlabel('Sample Index');
    ylabel('Amplitude');
    grid on;

    subplot(2, 1, 2);
    stem(equalized_signal, 'filled');
    title('Equalized Signal');
    xlabel('Sample Index');
    ylabel('Amplitude');
    grid on;
     

    Output


     

    Copy the MATLAB Code from here

     

    Further Reading

    People are good at skipping over material they already know!

    View Related Topics to







    Admin & Author: Salim

    s

      Website: www.salimwireless.com
      Interests: Signal Processing, Telecommunication, 5G Technology, Present & Future Wireless Technologies, Digital Signal Processing, Computer Networks, Millimeter Wave Band Channel, Web Development
      Seeking an opportunity in the Teaching or Electronics & Telecommunication domains.
      Possess M.Tech in Electronic Communication Systems.


    Contact Us

    Name

    Email *

    Message *

    Popular Posts

    Constellation Diagrams of ASK, PSK, and FSK

    📘 Overview of Energy per Bit (Eb / N0) 🧮 Online Simulator for constellation diagrams of ASK, FSK, and PSK 🧮 Theory behind Constellation Diagrams of ASK, FSK, and PSK 🧮 MATLAB Codes for Constellation Diagrams of ASK, FSK, and PSK 📚 Further Reading 📂 Other Topics on Constellation Diagrams of ASK, PSK, and FSK ... 🧮 Simulator for constellation diagrams of m-ary PSK 🧮 Simulator for constellation diagrams of m-ary QAM BASK (Binary ASK) Modulation: Transmits one of two signals: 0 or -√Eb, where Eb​ is the energy per bit. These signals represent binary 0 and 1.    BFSK (Binary FSK) Modulation: Transmits one of two signals: +√Eb​ ( On the y-axis, the phase shift of 90 degrees with respect to the x-axis, which is also termed phase offset ) or √Eb (on x-axis), where Eb​ is the energy per bit. These signals represent binary 0 and 1.  BPSK (Binary PSK) Modulation: Transmits one of two signals...

    BER vs SNR for M-ary QAM, M-ary PSK, QPSK, BPSK, ...

    📘 Overview of BER and SNR 🧮 Online Simulator for BER calculation of m-ary QAM and m-ary PSK 🧮 MATLAB Code for BER calculation of M-ary QAM, M-ary PSK, QPSK, BPSK, ... 📚 Further Reading 📂 View Other Topics on M-ary QAM, M-ary PSK, QPSK ... 🧮 Online Simulator for Constellation Diagram of m-ary QAM 🧮 Online Simulator for Constellation Diagram of m-ary PSK 🧮 MATLAB Code for BER calculation of ASK, FSK, and PSK 🧮 MATLAB Code for BER calculation of Alamouti Scheme 🧮 Different approaches to calculate BER vs SNR What is Bit Error Rate (BER)? The abbreviation BER stands for bit error rate, which indicates how many corrupted bits are received (after the demodulation process) compared to the total number of bits sent in a communication process. It is defined as,  In mathematics, BER = (number of bits received in error / total number of transmitted bits)  On the other hand, SNR ...

    Comparisons among ASK, PSK, and FSK | And the definitions of each

    📘 Comparisons among ASK, FSK, and PSK 🧮 Online Simulator for calculating Bandwidth of ASK, FSK, and PSK 🧮 MATLAB Code for BER vs. SNR Analysis of ASK, FSK, and PSK 📚 Further Reading 📂 View Other Topics on Comparisons among ASK, PSK, and FSK ... 🧮 Comparisons of Noise Sensitivity, Bandwidth, Complexity, etc. 🧮 MATLAB Code for Constellation Diagrams of ASK, FSK, and PSK 🧮 Online Simulator for ASK, FSK, and PSK Generation 🧮 Online Simulator for ASK, FSK, and PSK Constellation 🧮 Some Questions and Answers Modulation ASK, FSK & PSK Constellation MATLAB Simulink MATLAB Code Comparisons among ASK, PSK, and FSK    Comparisons among ASK, PSK, and FSK   Simulator for Calculating Bandwidth of ASK, FSK, and PSK The baud rate represents the number of symbols transmitted per second. Both baud rate and bit rate a...

    Constellation Diagrams of M-ary QAM | M-ary Modulation

    📘 Overview of QAM 🧮 MATLAB Code for m-ary QAM (4-QAM, 16-QAM, 32-QAM, ...) 🧮 Online Simulator for M-ary QAM Constellations 📚 Further Reading 📂 Other Topics on Constellation Diagrams of QAM configurations ... 🧮 MATLAB Code for 4-QAM 🧮 MATLAB Code for 16-QAM 🧮 MATLAB Code for m-ary QAM (4-QAM, 16-QAM, 32-QAM, ...) 🧮 Simulator for constellation diagrams of m-ary PSK 🧮 Simulator for constellation diagrams of m-ary QAM 🧮 Overview of Energy per Bit (Eb / N0) 🧮 Online Simulator for constellation diagrams of ASK, FSK, and PSK 🧮 Theory behind Constellation Diagrams of ASK, FSK, and PSK 🧮 MATLAB Codes for Constellation Diagrams of ASK, FSK, and PSK QAM Unlike M-ary PSK, where the signal is modulated with diff...

    MATLAB Code for Zero-Forcing (ZF) Beamforming in 4×4 MIMO Systems

    MATLAB Code for Zero-Forcing (ZF) Beamforming in 4×4 MIMO Systems clc; clear; close all; %% Parameters Nt = 4; % Transmit antennas Nr = 4; % Receive antennas (must be >= Nt for ZFBF) numBits = 1e4; % Number of bits per stream SNRdB = 0; % SNR in dB numRuns = 100; % Number of independent runs for averaging %% Precompute noise standard deviation noiseSigma = 10^(-SNRdB / 20); %% Accumulator for total errors totalErrors = 0; for run = 1:numRuns % Generate random bits: [4 x 10000] bits = randi([0 1], Nt, numBits); % BPSK modulation: 0 → +1, 1 → -1 txSymbols = 1 - 2 * bits; % Rayleigh channel matrix: [4 x 4] H = (randn(Nr, Nt) + 1j * randn(Nr, Nt)) / sqrt(2); %% === Zero Forcing Beamforming at Transmitter === W_zf = pinv(H); % Precoding matrix: [Nt x Nr] txPrecoded = W_zf * txSymbols; % Apply ZF precoding % Normalize transmit power (optional but useful) txPrecoded = txPrecoded / sqrt(mean(abs(txPrecoded(:)).^2)); %% Channel transmission with AWGN noise = noiseSigma * (randn(...

    Constellation Diagram of FSK in Detail

    📘 Overview 🧮 Simulator for constellation diagram of FSK 🧮 Theory 🧮 MATLAB Code 📚 Further Reading   Binary bits '0' and '1' can be mapped to 'j' and '1' to '1', respectively, for Baseband Binary Frequency Shift Keying (BFSK) . Signals are in phase here. These bits can be mapped into baseband representation for a number of uses, including power spectral density (PSD) calculations. For passband BFSK transmission, we can modulate signal 'j' with a lower carrier frequency and signal '1' with a higher carrier frequency while transmitting over a wireless channel. Let's assume we are transmitting carrier signal fc1 for the transmission of binary bit '1' and carrier signal fc2 for the transmission of binary bit '0'. Simulator for 2-FSK Constellation Diagram Simulator for 2-FSK Constellation Diagram SNR (dB): ...

    Power Spectral Density Calculation Using FFT in MATLAB

    📘 Overview 🧮 Steps to calculate the PSD of a signal 🧮 MATLAB Codes 📚 Further Reading Power spectral density (PSD) tells us how the power of a signal is distributed across different frequency components, whereas Fourier Magnitude gives you the amplitude (or strength) of each frequency component in the signal. Steps to calculate the PSD of a signal Firstly, calculate the first Fourier transform (FFT) of a signal Then, calculate the Fourier magnitude of the signal The power spectrum is the square of the Fourier magnitude To calculate power spectrum density (PSD), divide the power spectrum by the total number of samples and the frequency resolution. {Frequency resolution = (sampling frequency / total number of samples)}  Sampling frequency (fs): The rate at which the continuous-time signal is sampled (in Hz). Total number of samples (N): The number of samples in the time-domain signal used for the DFT/FFT.   Suppose:    ...

    Theoretical BER vs SNR for BPSK

    Let's simplify the explanation for the theoretical Bit Error Rate (BER) versus Signal-to-Noise Ratio (SNR) for Binary Phase Shift Keying (BPSK) in an Additive White Gaussian Noise (AWGN) channel.  Key Points Fig 1: Constellation Diagrams of BASK, BFSK, and BPSK [↗] BPSK Modulation: Transmits one of two signals: +√Eb ​ or -√Eb , where Eb​ is the energy per bit. These signals represent binary 0 and 1 . AWGN Channel: The channel adds Gaussian noise with zero mean and variance N0/2 (where N0 ​ is the noise power spectral density). Receiver Decision: The receiver decides if the received signal is closer to +√Eb​ (for bit 0) or -√Eb​ (for bit 1) . Bit Error Rate (BER) The probability of error (BER) for BPSK is given by a function called the Q-function. The Q-function Q(x) measures the tail probability of the normal distribution, i.e., the probability that a Gaussian random variable exceeds a certain value x.  Understanding the Q...