m基于光纤光栅传感网接入GPON的光纤通信系统matlab性能仿真,包括解码,解封装,分接,码率恢复,解帧,拆包,译码
创始人
2024-02-11 23:00:37
0

目录

1.算法描述

2.仿真效果预览

3.MATLAB部分代码预览

4.完整MATLAB程序


1.算法描述

接入处理系统模块化设计: 

 ·传感器接收到的信息转换为二进制信息(这个我们可以直接模拟出随机的二进制序列来表示传感器的数据,首先设置一组数据,然后进行量化,最后进行转换为二进制。这个部分的仿真结果对应你提供论文的3.2.1部分)

  ·封装,将编码后的数据进行封装,即将数据变为数据包,再把数据包转换为数据帧

     ·码率调整,主要将瞬时数码率不同的多个数码流调整为具有同一较高的数码率的数码流,然后再进行时分复接。

  ·最后由时分复接得到传感复用帧结构。

  ·码分编码封装发送(二进制数据编码,这里,编码方式我们选择性能非常好的LDPC编码)

在发送端,这里根据仿真要求,模拟五个子网

接收部分:

码分解码,解封装,分接,码率恢复,解帧,拆包,译码。。。。。

       最后对整个系统进行误码率的分析,对五个子网的数据进行误码率分析,眼图以及Q因子分析。

2.仿真效果预览

matlab2022a仿真结果如下:

 

3.MATLAB部分代码预览

for jj1 = 1:length(EbN0)jj1Ind = Ind + 1;Err_Rate2 = zeros(1,TIMES);for jj2 = 1:TIMESjj2Num_NET = 5;%模拟子网的个数Lens    = 500;%传感器采集数据长度%传感信息的净荷值相关参数A       = -40;B       = 120;Delta   = 0.2;Ld      = (ceil(log2((B-A)/Delta)));%传感子网数据帧的封装Preamble=[0,1,1,1,1,1,1,0];%帧前导码取特殊字符串01111110,表示帧同步,便于传感监控中心判断出帧的起始位置,%子网ID号,本案为5个子网,所以ID为三bit数据,但是为了具有扩展性,ID用四个bit表示ID      =[0,0,0,0;0,0,0,1;0,0,1,0;0,0,1,1;0,1,0,0];%HEC为帧头校验码HEC     = [0,1,0,1]; %包头Head    = [0,0,1,1,0,0,1,1];%address,地址,随着采集数据,地址逐渐加1%传感器类型,假设五个子网,每个子网就一种类型type1   = [0,0,0,1;0,0,1,0;0,0,1,1;0,1,0,0;0,1,0,1];%包尾Trail   = [1,1,0,0,1,1,0,0];Bao_Size= 10;%最后的复用帧的相关参数Sync      = [0,0,0,0,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0,0,0,0,1,0,1,1,1,0,1,0,1,0,0];Separator = [0,1,0,1];FCS       = [1,0,0,1,1,0,1,1,1,0,0,1,1,0,0,1];N         = 5;M         = 5;%第一部分,系统发送部分%第一部分,系统发送部分%本案共有五个子网,所以模拟五组数据for nn = 1:Num_NET%模拟产生传感器采集到的数据,这里,为了模拟不同的码率,将采集的数据长度设置为不同y     = func_sensor_samples(Lens,A,B);YY{nn} = y;if is_show(1) == 1figure(1);plot(y,'b');xlabel('times');ylabel('amplitude')title('模拟传感器采集到的数据');pause(0.1);end%光纤光栅传感信号的净荷值的二进制转换Lp = func_value2realvalue(y,A,B,Delta);if is_show(2) == 1figure(2);plot(Lp,'b');xlabel('times');ylabel('amplitude')title('模拟传感器采集到的数据的净荷值');pause(0.1);end%计算转换为二进制V2 = func_dec2bin(Lp,Ld);%将二进制转换为串行流Signal{nn} = (reshape(V2',size(V2,1)*size(V2,2),1))';%通过上面的步骤,我们模拟了实际要发送的二进制码流end
...................................................%对五个子网的数据进行时分复接%码率调整Out1 = func_Rate_sync(Signal3{1});Out2 = func_Rate_sync(Signal3{2});Out3 = func_Rate_sync(Signal3{3});Out4 = func_Rate_sync(Signal3{4});Out5 = func_Rate_sync(Signal3{5});%时分复接Out  = func_tdma(Out1,Out2,Out3,Out4,Out5,Len_zhen);%传感复用帧tmps2   = [];tmps    = [];for i = 1:length(Out)/(M*Len_zhen)tmps      = [Sync,Separator,Out((i-1)*M*Len_zhen+1:i*M*Len_zhen),Separator,FCS];Len_zhen2 = length(tmps);tmps2     = [tmps2 tmps];endSignal4 = tmps2;%进行编码,编码矩阵为96*192,每次取80,并补充16个0作为虚拟填充符进行编码,共96个数据进行编码load H;load G;Trans_Signal = [];for i = 1:length(Signal4)/80Trans_data   = [zeros(1,16),Signal4((i-1)*80+1:(i)*80)];%编码data_code    = mod(Trans_data*G,2); %BPSKTrans_BPSK   = 2*data_code-1; Len_code     = length(Trans_BPSK);Trans_Signal = [Trans_Signal,Trans_BPSK];end%第二部分,信道,信道部分,由于是光纤传输,且您论文中没有详细说明这个部分内容,所以这里暂时仅考虑高斯白噪声%第二部分,信道,信道部分,由于是光纤传输,且您论文中没有详细说明这个部分内容,所以这里暂时仅考虑高斯白噪声sigma      = sqrt(1./(10^(EbN0(Ind)/10)*0.5)); Rec_Signal = Trans_Signal + sigma*randn(1,length(Trans_Signal));   %第三部分,监控中心——接收端%第三部分,监控中心——接收端%译码R_Signal = [];for i = 1:length(Signal4)/80z_hat       = func_Dec(Rec_Signal((i-1)*Len_code+1:i*Len_code),sigma,H,50);x_hat       = z_hat(size(G,2)+1-size(G,1):size(G,2));R_Signal    = [R_Signal,x_hat(17:end)'];%去掉16个填充符endif is_show(5) == 1st = func_eye(Trans_Signal);eyediagram(st,40)ylabel('信号幅度');title('原始信号眼图');     pause(0.1);end        if is_show(6) == 1st = func_eye(Rec_Signal);eyediagram(st,40)ylabel('信号幅度');title('接收带噪声干扰信号眼图');  pause(0.1);end          if is_show(7) == 1st = func_eye(R_Signal*2-1);eyediagram(st,40)ylabel('信号幅度');title('译码之后信号眼图'); pause(0.1);end         %解封装%通过搜索sync来确定每帧的帧头[R_Signal,Sync_pos] = func_find_sync(R_Signal,Sync);if is_show(4) == 1figure(4);plot(Sync_pos,'b');hold on;plot(find(Sync_pos>=40),Sync_pos(find(Sync_pos>=40)),'r*');hold off;xlabel('times');ylabel('amplitude')title('解封装sync位置');pause(0.1);end%判断当前帧位置能否检测到帧头if_sync = zeros(1,length(Out)/(M*Len_zhen));%这个变量用来存放是否检测到当前帧,如果为0,则该帧未检测到,直接丢弃,检测下一帧for i = 1:length(Out)/(M*Len_zhen)if Sync_pos(1+(i-1)*Len_zhen2) > 40if_sync(i)=1;endend%解封装tmps3   = [];tmps2   = [];tmps    = [];for i = 1:length(Out)/(M*Len_zhen)if if_sync(i) == 1tmps = R_Signal((i-1)*Len_zhen2+1:(i)*Len_zhen2);elsetmps = zeros(1,Len_zhen2);% 如果该帧没有检测到,那么直接赋值0end%解封装tmps2 = tmps(length(Sync)+length(Separator)+1:M*Len_zhen+length(Sync)+length(Separator));tmps3 = [tmps3 tmps2];endOuts = tmps3;%数字分接单元[I1,I2,I3,I4,I5] = func_tdma2(Outs,Len_zhen,M);%对五个子网的数据进行时分复接%码率调整Outr{1} = func_Rate_sync(I1);Outr{2} = func_Rate_sync(I2);Outr{3} = func_Rate_sync(I3);Outr{4} = func_Rate_sync(I4);Outr{5} = func_Rate_sync(I5);%将5路传感帧转换为数据帧,进一步拆封%由数据帧转换为传感帧for nn = 1:Num_NETtmps2   = [];tmps    = [];LL = length(Preamble)+length(ID(nn,:))+length(HEC);for i = 1:length(Signal2{nn})/(N*Len_bao)tmps     = Outr{nn}((i-1)*Len_zhen+1:i*Len_zhen);tmps2    = [tmps2 tmps(LL+1:end)];endOutr2{nn} = tmps2;end%将数据包中数据提取%Signal即为实际要发送的二进制码流%产生数据包数据包,这里,我们假设每个数据包中为10个采样数据,即100bit数据address = 0;for nn = 1:Num_NETtmps2   = [];tmps    = [];LL      = length(Head)+length(address2)+length(type1(nn,:));for i = 1:length(Signal{nn})/(Bao_Size*Ld)tmps  = [Outr2{nn}((i-1)*Len_bao+1:i*Len_bao)];tmps2 = [tmps2 tmps(LL+1:end-length(Trail))];endOutr3{nn} = tmps2;end%误码率统计在转换为十进制之前计算[nberr1,rat1] = biterr(Outr3{1},Signal{1});[nberr1,rat2] = biterr(Outr3{2},Signal{2});[nberr1,rat3] = biterr(Outr3{3},Signal{3});[nberr1,rat4] = biterr(Outr3{4},Signal{4});[nberr1,rat5] = biterr(Outr3{5},Signal{5});Err_Rate0(jj2) = (rat1+rat2+rat3+rat4+rat5)/5;   Err_Rate1(jj2) = rat1;   Err_Rate2(jj2) = rat2;   Err_Rate3(jj2) = rat3;   Err_Rate4(jj2) = rat4;   Err_Rate5(jj2) = rat5;   endErr_Rate0s(Ind) = mean(Err_Rate0);Err_Rate1s(Ind) = mean(Err_Rate1);Err_Rate2s(Ind) = mean(Err_Rate2);Err_Rate3s(Ind) = mean(Err_Rate3);Err_Rate4s(Ind) = mean(Err_Rate4);Err_Rate5s(Ind) = mean(Err_Rate5);Q0(Ind)         = sqrt(2)*erfcinv(2*Err_Rate0s(Ind)/10);Q1(Ind)         = sqrt(2)*erfcinv(2*Err_Rate1s(Ind)/10);Q2(Ind)         = sqrt(2)*erfcinv(2*Err_Rate2s(Ind)/10);Q3(Ind)         = sqrt(2)*erfcinv(2*Err_Rate3s(Ind)/10);Q4(Ind)         = sqrt(2)*erfcinv(2*Err_Rate4s(Ind)/10);Q5(Ind)         = sqrt(2)*erfcinv(2*Err_Rate5s(Ind)/10);disp('over a cycle');end
01_068_m

4.完整MATLAB程序

matlab源码说明_我爱C编程的博客-CSDN博客

V

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...