📄 ofdm_rlsvslms.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 + -