⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ofdm_rlsvslms.m

📁 OFDM信道估计和均衡的仿真程序
💻 M
字号:
%+----------------------------------------------------------------+
%|                                                                |
%|  Name: ofdm_rlsvslms.m                                         |
%|  Author: James Shen                                            |
%|  Description: Basic OFDM model used for simulation purposes.   |    
%|  Compares LMS to RLS equalizer.                                |
%|                                                                |
%+----------------------------------------------------------------+
clear all;
close all;
%=============== Some standard Hyperlan Params ==================
T = 50e-9; % System sampling period 
fs = 1/T; % System sampling freq = 20MHz 
Tcp = 16*T; % CP period
Tu = 64*T; % Useful symbol period
Ts = Tu+Tcp; % OFDM Symbol period 80 samples
delta_f = 0.3125e6; % Frequency spacing

FFTLen = 64; % Length of FFT.
CPLen = 16;  % Length of Cyclic Prefix
M = 4;       % Bits encoded in a QAM symbol.
Ns = 5;      % Number of Symbols/Carrier
F = 3;        % Order of the filter
R = zeros(F,1);   % Filter coefficients, initialised to zero order 10 by default.
L = zeros(F,1);   % Filter coefficients, initialised to zero order 10 by default.

store_input = zeros(Ns, FFTLen*M); % Used to calculate BER at the end.
store_output_rls = zeros(Ns, FFTLen*M);
store_output_lms = zeros(Ns, FFTLen*M);
store_error_rls = zeros(Ns, FFTLen+CPLen);
store_error_lms = zeros(Ns, FFTLen+CPLen);
%=================== Simulation ===============================
for sym=1:Ns
    %----------- Data genration ------------------
    input = rand(1,FFTLen*M) > 0.5; %transmits one symbol
    store_input(sym,:) = input;
    %----------- Transmit Data -------------------
    signal_tx = transmitter(input, FFTLen, CPLen, M);
    %----------- Channel the data ----------------
    signal_rx = channel(signal_tx);
    %-------------- Receiver ---------------------
    [signal_recovered, R, error_sym] = ...
        receiver_rls(signal_tx, signal_rx, FFTLen, CPLen, M, R, F);
    store_output_rls(sym,:) =  signal_recovered;
    store_error_rls(sym,:) = error_sym;
    [signal_recovered, L, error_sym] = ... 
        receiver_lms(signal_tx, signal_rx, FFTLen, CPLen, M, L, F);
    store_output_lms(sym,:) =  signal_recovered;
    store_error_lms(sym,:) = error_sym;
end
%=============== Simulation End ============================

%==================== BER Calculation =========================
error_rls = abs(store_input - store_output_rls);
error_lms = abs(store_input - store_output_lms);
num_error_rls = sum(sum(error_rls));
num_error_lms = sum(sum(error_lms));
BER_rls = num_error_rls/(FFTLen*M*Ns)
BER_lms = num_error_lms/(FFTLen*M*Ns)

%=================== Plot Equlaizer Convergence ==================
figure(10);
error_samples_rls = reshape(store_error_rls.',1,(FFTLen+CPLen)*Ns);
error_samples_lms = reshape(store_error_lms.',1,(FFTLen+CPLen)*Ns);
semilogy(abs(error_samples_rls).^2,'r'), title('LMS vs RLS Receivers'); hold on;
semilogy(abs(error_samples_lms).^2,'b'), title('LMS vs RLS Receivers') ...
    ,legend('RLS algorithm','LMS algorithm') ...
    ,ylabel('Mean Squared Erorr'), xlabel('Number of Iteration'); hold off;

%======================= END FILE ================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -