1.算法描述
可見光通信的信道估計,均衡,抑制papr。
不考慮光信道,用傳統(tǒng)的無線通信的OFDM的信道估計,均衡,抑制papr ?信道估計,均衡最好有兩個以上的方法比較
%本次仿真載頻為2GHz,帶寬1MHz,子載波數(shù)128個,cp為16
%子載波間隔為7.8125kHz
%一個ofdm符號長度為128us,cp長度為16us
%采用16QAM調(diào)制方式
%最大doppler頻率為132Hz
%多徑信道為5徑,功率延遲譜服從負(fù)指數(shù)分布~exp(-t/trms),trms=(1/4)*cp時長,各徑延遲取為delay=[0 2e-6 4e-6 8e-6 12e-6]
Zero forcing, ZF:簡單,但放大了噪聲,性能最差
Minimum Mean Square Error, MMSE:考慮了噪聲因素,性能比ZF好
2.仿真效果預(yù)覽
matlab2022a仿真如下:

3.MATLAB核心程序
clc;
clear all;
close all;
warning off;
addpath 'func\'
sel ???= 3;
%FFT長度
FFTLen = 64;
%循環(huán)前綴長度
CPLen ?= 16;
%QAM
M ?????= 4;
%子載波個數(shù)
Ns ????= 8; ?
w ?????= ones(FFTLen,1);
SNRdB ?= [0:2:26];
for ii = 1:length(SNRdB)
ii
SNRS = SNRdB(ii);
NUM ?= 0;
ERR ?= 0;
while ERR <= 2000
ERR
NUM ?????????= NUM + 1;
store_input ?= zeros(Ns,FFTLen*M);
store_output = zeros(Ns,FFTLen*M);
store_error ?= zeros(Ns,FFTLen);
for sym=1:Ns
%發(fā)送數(shù)據(jù)
input ?????????????= rand(1,FFTLen*M) > 0.5;
store_input(sym,:) = input;
%發(fā)送
[signal_tx,input_symbols] = func_transmitter(input,FFTLen,CPLen,M);
%通過信道
signal_rx ????????????????= func_channel(signal_tx,SNRS);
%估計,均衡,
if sel == 1
[signal_recovered,w,error_sym] = func_receiver_mmse(signal_tx,signal_rx,input_symbols,FFTLen,CPLen,M,w);
end
if sel == 2
[signal_recovered,w,error_sym] = func_receiver_zf(signal_tx,signal_rx,input_symbols,FFTLen,CPLen,M,w);
end ??
if sel == 3
w = zeros(3,1);
[signal_recovered,w,error_sym] = func_receiver_rls(signal_tx, signal_rx, FFTLen, CPLen, M, w, 3);
end ???????????????
store_output(sym,:) ???????????= signal_recovered;
store_error(sym,:) ????????????= error_sym.';
end
errors_ext = abs(store_input - store_output);
errors ????= errors_ext(FFTLen+1:length(errors_ext));
num_errors = sum(sum(errors));
ERR ???????= ERR + num_errors;
end
BER(ii) = ERR/NUM/(FFTLen*M*(Ns-1));
end
% figure;
% semilogy(SNRdB,BER,'b-o');
% grid on;
% ylabel('Error');
% xlabel('SNR');
if sel == 1
save rmmse.mat SNRdB BER
end
if sel == 2
save rzf.mat SNRdB BER
end
if sel == 3
save rls.mat SNRdB BER
end
figure;
load rmmse.mat
semilogy(SNRdB,BER,'b-o');
hold on
load rzf.mat
semilogy(SNRdB,BER,'r-o');
hold on
load rls.mat
semilogy(SNRdB,BER,'k-o');
hold on
legend('MMSE','ZF','RLS');
grid on;
ylabel('Error');
xlabel('SNR');
01_099m