📄 main12.m
字号:
clear all;
EbN0=4;
snr=EbN0;
%单个码块的信息长度
leng=256;
%码块总数
blocknum=10000;
%L至少取为编码器状态数的5~7倍
L=64;
%随机信息序列
msg=randint(1,leng*blocknum,2);
%网格图
t=poly2trellis(7,[171,133]);
code=zeros(blocknum,leng*2);
modu=zeros(1,leng*blocknum);
init_state=zeros(1,blocknum);
final_state=zeros(1,blocknum);
final=zeros(1,blocknum);
%编码并调制
for i=1:blocknum
%编码前首先得到各个码块的编码器初始状态(用每个码块的最后6比特计算,最后一比特为最高位)
init_state(i)=msg(i*leng)*32+msg(i*leng-1)*16+msg(i*leng-2)*8+msg(i*leng-3)*4+msg(i*leng-4)*2+msg(i*leng-5);
[code(i,:),final(i)]=convenc(msg((i-1)*leng+1:i*leng),t,init_state(i));
[modu((i-1)*leng+1:i*leng),index]=modulation(code(i,:),24);
end
num=zeros(1,length(snr));
ratio=zeros(1,length(snr));
num1=zeros(1,blocknum);
ratio1=zeros(1,blocknum);
%加噪声,解调,译码,统计误码率
for i=1:length(EbN0)
noise=awgn(modu,snr(i),'measured');
demodu=demodulation(noise,index);
for j=1:blocknum
%此处对解调结果取反译码与调制方式有关,如果0->-1,1->1需要取反,0->1,1->-1则不用取反
decode=vitdec_new(-demodu((j-1)*leng*2+1:j*leng*2),t,L,leng);
[num1(j),ratio1(j)]=biterr(decode,msg((j-1)*leng+1:j*leng));
num(i)=num(i)+num1(j);
end
ratio(i)=num(i)/leng/blocknum;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -