📄 juanji_test.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 卷积码模块的性能测试 %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
close all;
% 信噪比测试范围为-4~+6dB
snr_in_dB1=[-4:1:6];
snr_in_dB2=[-4:0.1:6];
E=1; % 噪声功率
for i=1:length(snr_in_dB1)
snr(i)=10^(snr_in_dB1(i)/10); % 转化单位
sgma(i)=sqrt((E/snr(i))/2); % 噪声方差
bit_err_num1=0;
bit_err_num2=0;
N=20; % 帧数
for n=0:(N-1)
sequence=round(rand(1,224)); % 随机产生外编码后的得到的224bits序列
input=[sequence,zeros(1,4)]; % 加尾比特0000
viterbi_enc=SDC_IN_EN(input); % 卷积码编码,编码后输出序列长度456bits
% 经过高斯信道传输
A=2*sequence-1; % 将单极性信号转化为双极性信号
A=sign(A+sgma(i)*randn(size(A))+eps); % 未经过卷积编码的信号加高斯噪声并进行接收判决
A=(A+1)/2;
B=2*viterbi_enc-1; % 将单极性信号转化为双极性信号
B=sign(B+sgma(i)*randn(size(B))+eps); % 经过卷积编码后的信号加高斯噪声并进行接收判决
B=(B+1)/2;
viterbi_out=SDC_IN_DE(B); % Viterbi译码,输出序列长度228bits
viterbi_dec=viterbi_out(1:224); % 去掉四位尾比特
original_bit_err_num=length(find(sequence~=A)); % 找出原始误码个数
current_bit_err_num=length(find(sequence~=viterbi_dec)); % 找出有编译码改善后的误码个数
if original_bit_err_num~=0
bit_err_num1=bit_err_num1+original_bit_err_num; % 累计每一帧的原始误码个数
end
if current_bit_err_num~=0
bit_err_num2=bit_err_num2+current_bit_err_num; % 累计每一帧改善后的误码个数
end
end
bit_err_rate1(i)=bit_err_num1/(N*224) % 计算并显示原始误码率
bit_err_rate2(i)=bit_err_num2/(N*224) % 计算并显示改善后的误码率
end
for i=1:length (snr_in_dB2)
SNR=exp(snr_in_dB2(i)*log(10)/10);
theo_err_rate(i)=(1/2)*erfc(sqrt(2*SNR)/sqrt(2)); % 理论误码率
end
% 绘制曲线图
semilogy(snr_in_dB1,bit_err_rate1,'r*-');
hold on
semilogy (snr_in_dB1,bit_err_rate2,'g*-');
semilogy (snr_in_dB2,theo_err_rate);
xlabel('信噪比(dB)')
ylabel('误码率')
title('在高斯信道下原始误码特性、卷积码改善后的误码特性及理论误码特性比较')
hold off
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -