m基于matlab的光通信的信道估计,均衡,抑制papr误码率仿真,对比ZF,RLS,MMSE三种算法

1.算法描述

可见光通信的信道估计,均衡,抑制papr。


不考虑光信道,用传统的无线通信的OFDM的信道估计,均衡,抑制papr  信道估计,均衡最好有两个以上的方法比较


%本次仿真载频为2GHz,带宽1MHz,子载波数128个,cp为16

%子载波间隔为7.8125kHz

%一个ofdm符号长度为128us,cp长度为16us

%采用16QAM调制方式

%最大doppler频率为132Hz

%多径信道为5径,功率延迟谱服从负指数分布~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.仿真效果预览

matlab2022a仿真如下:


3.MATLAB核心程序

clc;

clear all;

close all;

warning off;

addpath 'func\'



sel    = 3;

%FFT长度

FFTLen = 64;

%循环前缀长度

CPLen  = 16;

%QAM

M      = 4;

%子载波个数

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

%发送数据

input              = rand(1,FFTLen*M) > 0.5;

store_input(sym,:) = input;

%发送

[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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容