m 基于 Matlab 的无线光通信 CDMA 闭环链路功率控制算法仿真,比较 OOK、2PPM、4PPM、8PPM 和 16PPM
最编程
2024-03-21 08:54:52
...
【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”
1.算法描述
加入功率控制PCE模块,其基本结构如下所示:
对OOK,2PPM,4PPM,8PPM,16PPM五种方法进行仿真。
2.仿真效果预览
matlab2022a仿真结果如下:
3.MATLAB部分代码预览
PACKET_LENGTH = 1000; %Packet size
PEEK_POWER = 1;
SYMBOL_LENGTH = 36; %here symbol length= packet length
SLOT_LENGTH = 4;
TRANS_LENGTH = 9*SLOT_LENGTH*PACKET_LENGTH;
pulse_drtn = 4;
CHANNELS = 3;
ELECTRON = 1.6e-19;
INTERFERENCE = 1e-3;
RECEIVER_RES = 0.53;
COEF_RED = 0.1550;
COEF_GREEN = 1.7309;
COEF_BLUE = 1.1142;
RES_RED = 0.5200;
RES_GREEN = 0.4800;
RES_BLUE = 0.4000;
%Derived parameters
bit_rate = 16e8; % bit rate [100Mbps]
rms_delay = 2e-9; % delay spread (1 ns)
multipath = 3; % multi-path dispersion
sample_rate = bit_rate / 3.0 * SLOT_LENGTH;
%struct built
for i=1:CHANNELS
sentbit(i,:) = zeros(1,3*PACKET_LENGTH);
signal(i,:) = zeros(1,12*PACKET_LENGTH);
recivbit(i,:) = zeros(1,3*PACKET_LENGTH);
end
dwTransmitPower = 7;
dShadowFadingStd = 4;
dUserVelocity = 0;
MAX_Dis = 7;
STEP = 0.2;
MIN_Dis = 1;
DIS = [MIN_Dis:STEP:MAX_Dis];
MTKL = 20;
Avgtime = 200;
Delay = 5;
startpow = -70;
endpow = -40;
powstep = 5;
%**************************************************************************
E1 = zeros(PACKET_LENGTH,1);
E2 = zeros(PACKET_LENGTH,1);
E3 = zeros(PACKET_LENGTH,1);
cnt = 0;
for jj = 0.1:0.05:0.5
cnt = cnt + 1;
for mm = 1:MTKL
jj
mm
PASS_LOSS = -25;
snr_red = 10*log10(power((power(10,PASS_LOSS/10)*1e-3)*(COEF_RED /(COEF_RED+COEF_GREEN+COEF_BLUE)),2)/((ELECTRON*INTERFERENCE/RES_RED) *(bit_rate*(SLOT_LENGTH/pulse_drtn)/3.0)));
snr_green = 10*log10(power((power(10,PASS_LOSS/10)*1e-3)*(COEF_GREEN/(COEF_RED+COEF_GREEN+COEF_BLUE)),2)/((ELECTRON*INTERFERENCE/RES_GREEN)*(bit_rate*(SLOT_LENGTH/pulse_drtn)/3.0)));
snr_blue = 10*log10(power((power(10,PASS_LOSS/10)*1e-3)*(COEF_BLUE /(COEF_RED+COEF_GREEN+COEF_BLUE)),2)/((ELECTRON*INTERFERENCE/RES_BLUE) *(bit_rate*(SLOT_LENGTH/pulse_drtn)/3.0)));
VarR = calc_snr(snr_red);
VarG = calc_snr(snr_green);
VarB = calc_snr(snr_blue);
%产生随机数作为发送数据
for i=1:CHANNELS
sentbit(i,:) = round(rand(1,3*PACKET_LENGTH));
end
for times = 1:3*PACKET_LENGTH%每一时刻,发送一个数据包
S1 = 1*(times-1) + 1;
F1 = 1*times;
S2 = 4*(times-1) + 1;
F2 = 4*(times);
%对应公式Pt(t) = Pt(t-D)/E(t-D) = 1/r(t-D)
Coff(1,times) = 1/jj;
Coff(2,times) = 1/jj;
Coff(3,times) = 1/jj;
%调制,OOK
for i=1:CHANNELS
signal(i,S2:F2) = func_1in4(sentbit(i,S1:F1),Coff(i,times));
end
%加多径
if multipath~=1
for i=1:CHANNELS
signa2(i,S2:F2) = add_multipath_dispersion1(signal(i,S2:F2),4,sample_rate,rms_delay);
end
end
%加噪声
signal(1,S2:F2)=add_gauss_noise(signal(1,S2:F2),length(S2:F2), VarR);
signal(2,S2:F2)=add_gauss_noise(signal(2,S2:F2),length(S2:F2), VarG);
signal(3,S2:F2)=add_gauss_noise(signal(3,S2:F2),length(S2:F2), VarB);
%解调
for i=1:CHANNELS
recivbit(i,S1:F1) = func_de1in4(signal(i,S2:F2),Coff(i,times));
end
end
for i=1:CHANNELS
error(i,:) = size(find(recivbit(i,:)~=sentbit(i,:)),2);
end
ERR(mm) = (error(1,:)+error(2,:)+error(3,:))/(CHANNELS*3*PACKET_LENGTH);
end
ber(cnt) = mean(ERR);
end
01_057_m