⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vithard.m

📁 关于
💻 M
字号:
%clear all;
%clc;
tic

%单次仿真的信息长度
slen=64;

%每种信噪比仿真迭代次数
simNum=1000;

%(2, 1, 7)卷积码生成多项式O(133, 171)
%(n, k, N)即1个信息比特生成2个编码比特,约束长度N为7比特
%O(133, 171)为用八进制表示的生成多项式,即[1 0 1 1 0 1 1;1 1 1 1 0 0 1 ]
constlen=[7];
codegen=[133 171];
tblen=64
t=poly2trellis(constlen,codegen);
%tnumInputSymbols=t.numInputSymbols
%tnumOutputSymbols=t.numOutputSymbols
%tnumStates=t.numStates
%tnextStates=t.nextStates
%toutputs=t.outputs

%bpsk调制,每符号用1比特表示
k=1;

%编码码率
codeRate=1/2;

%信噪比矩阵,单位为dB
EbNo=2:0.5:5;
SNR=EbNo-10*log10(1/codeRate)+10*log10(k);

%初始化BER矩阵
BER=zeros(1, length(SNR));

for snrloop=1:length(SNR)

    disp(['EbNo(' num2str(snrloop) ')=' num2str(EbNo(snrloop))]);

    %计算噪声方差σ^2(bpsk调制后信号均值为0,平均功率为1)
    noise_var=1/(10^(SNR(snrloop)/10));

    totErr=0;

    for simcnt=1:simNum

        % Set Random number generators initial state
        % reset random number generators based on current clock value
        rand('state',sum(100*clock));
        randn('state',sum(100*clock));

        %产生取值为0或1的均匀分布的随机序列作为信息序列
        s=round(rand(1,slen));

        %卷积编码
        coded_bits=convenc(s,t);

        %bpsk调制,映射为0->-1 1->+1
        bpsk_mod=coded_bits*2-1;

        %接收信号为bpsk调制信号加上噪声
        rx_waveform=awgn(bpsk_mod,SNR(snrloop),'measured');

        %硬判决
        decided=double(rx_waveform>0);

        %Viterbi译码
        uhat=vitdec(decided,t,tblen,'trunc','hard');

        %误码统计
        [errNum errRat]=biterr(s,uhat);
        totErr=errNum+totErr;

    end

    BER(snrloop)=totErr/simNum/slen;

end

result=[EbNo; SNR; BER]
save vithard_simNum1000_result result;

%绘制误码率曲线
semilogy(EbNo,BER,'m-');
title('Convolution coded bpsk simulation');
xlabel('Eb/No (dB)');
ylabel('BER');
legend('Viterbi hard decision',0);
grid on;

toc

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -