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

📄 channel_link.asv

📁 实现了信道编码
💻 ASV
字号:
function [bit_err_rate1,bit_err_rate2]=channel_link(snr_in_dB)
% 连接整个信道的各个模块,测的试整个信道自环是否为0,测试在不同信噪情况
% 下信道加入高斯噪声和突发噪声后的误码率,并原始误码率和进行比较
% snr_in_dB为信噪比,单位是dB

E=1;    % 噪声功率
snr=10^(snr_in_dB/10);    % 转化单位
sgma=sqrt((E/snr)/2);     % 噪声方差
N_Interval=80;    % 突发间隔
N_Length=5;       % 突发长度
bit_err_num1=0;   
bit_err_num2=0;
N=20;     % 帧数
for n=0:(N-1)
	signal=round(rand(1,184));          % 原始信息序列
    %%%%%%%%%%%%%%%%%%%%%%%%
    %%        编码        %%
    %%%%%%%%%%%%%%%%%%%%%%%%
	fire_enc=fire_sys_encode(signal);   % 外编码(法尔码,编码后输出序列长度224bits)
    fire_enc=[fire_enc zeros(1,4)];     % 加尾比特0000
	viterbi_enc=SDC_IN_EN(fire_enc);    % 内编码(卷积码,编码后输出序列长度456bits)
	C=INTER_WEAVE_4(viterbi_enc);       % 交织
	
    %%%%%%%%%%%%%%%%%%%%%%%%
    %%      信道传输      %%
    %%%%%%%%%%%%%%%%%%%%%%%%
    A=2*signal-1;                        % 将单极性信号转化为双极性信号
    A=sign(A+sgma*randn(size(A))+eps);   % 未经过信道编码的信号加高斯噪声并进行接收判决
    A=(A+1)/2;
	C=2*C-1;                             % 将单极性信号转化为双极性信号
	C=sign(C+sgma*randn(size(C))+eps);   % 经过信道编码后的信号加高斯噪声并进行接收判决
	C=(C+1)/2;
    
    % 未经过信道编码的信号加入突发干扰
	Noise1=BurstNoise(N_Interval,N_Length,length(A));     
    A=mod(A+Noise1,2);
    % 经过信道编码后的信号加入突发干扰
    Noise2=BurstNoise(N_Interval,N_Length,length(C));
	C=mod(C+Noise2,2);
	
    %%%%%%%%%%%%%%%%%%%%%%%%
    %%        译码        %%
    %%%%%%%%%%%%%%%%%%%%%%%%
	D=COUNTER_WEAVE_4(C);               % 反交织
	viterbi_out=SDC_IN_DE(D);           % 内解码(Viterbi译码,输出序列长度228bits)
    viterbi_dec=viterbi_out(1:224);     % 去掉四位尾比特
	[fire_dec,sysinfo]=fire_sys_decode(viterbi_dec);    % 外解码(法尔码译码,译码后输出序列长度184bits)
    
    %%%%%%%%%%%%%%%%%%%%%%%%
    %%      统计误码      %%
    %%%%%%%%%%%%%%%%%%%%%%%%
    original_bit_err_num=length(find(signal~=A));         % 找出原始误码个数
    current_bit_err_num=length(find(signal~=fire_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=bit_err_num1/(N*184)  % 计算并显示原始误码率
bit_err_rate2=bit_err_num2/(N*184)  % 计算并显示改善后的误码率

⌨️ 快捷键说明

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