📄 main_backer.m
字号:
%加高斯信道以及交织
clear
echo off
n=14; k=10; % Codeword and message word length
m=4; % Number of bits per symbol
N=840; %帧的长度
M=2^4;
snr=5:1:15;
for j=1:length(snr)
for i=1:N %多进制信源
temp=rand;
msource(i)=floor(M*temp);
end
[primsg,t]=decommsg(msource,k); %将信息分帧,primsg是t*k的矩阵,即帧结构
msg = gf(primsg,m); % 将多进制符号映射到伽逻华域,
encode_out = rsenc(msg,n,k); % 对多进制符号进行编码
ss=encode_out.x; %将伽逻华域映射到多进制符号
ss_16=reshape(ss,1,t*n); % ss_16是十六进制
interweaver_out=ss(:)'; %交织
ss_2=Hex2Two(interweaver_out); %16进制变为2进制
add_head=add_frame_head1313(ss_2(:)'); %加同步帧头
channel_out=AWGN_Channel(add_head,snr(j)); % 经过AWGN信道
for q=1:N*m*n/k+52
if channel_out(q)>0.5 %判决
channel_out(q)=1;
else channel_out(q)=0;
end
end
sub_head_2=backercode65(channel_out); %去同步帧头
sub_head_16=Two2Hex(sub_head_2); %把二进制转换成十六进制
rsdec_in=reshape(sub_head_16 ,t,n);
[code_out,cnumerr] = rsdec(gf(rsdec_in,m),n,k); %对多进制符号进行译码
cc=code_out.x;
receivetemp=code_out.x; %将译码输出的码字进行合并成一串多进制符号
receive=reshape(receivetemp',1,k*t);
receive_2=reshape(Hex2Two(receive),1,m*N);
msource_2=reshape(Hex2Two(msource),1,m*N);
sumerror(j)=0;
for i=1:N*m
if(msource_2(i)~=receive_2(i)) %译码输出与信源比较
sumerror(j)=sumerror(j)+1;
end
end
ber2(j)=sumerror(j)/(N*m); %计算误码率
end
semilogy(snr,ber2,'-ro')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -