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

📄 weave_test.m

📁 实现了信道编码
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%  重排与交织模块对突发干扰的改善测试 %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear all;
close all;
clear all;
close all;
% 信噪比测试范围为-4~+6dB
snr_in_dB1=[-4:1:6];
snr_in_dB2=[-4:0.1:6];
E=1;    % 噪声功率
N_Interval=100;    % 突发间隔
N_Length=6;        % 突发长度
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
        X=INTER_WEAVE_4(viterbi_enc);         % 交织
        
        % 信道传输
        X=2*X-1;                              % 将单极性信号转化为双极性信号
        X=sign(X+sgma(i)*randn(size(X))+eps); % 经过重排和交织后的信号加高斯噪声并进行接收判决
        X=(X+1)/2;
        Y=2*viterbi_enc-1;                    % 将单极性信号转化为双极性信号
	    Y=sign(Y+sgma(i)*randn(size(Y))+eps); % 未经过重排和交织的信号加高斯噪声并进行接收判决
	    Y=(Y+1)/2; 
        % 经过重排和交织后的信号加入突发干扰
	    Noise1=BurstNoise(N_Interval,N_Length,length(X));     
        X=mod(X+Noise1,2);
        % 未经过重排和交织的信号加入突发干扰
        Noise2=BurstNoise(N_Interval,N_Length,length(Y));
	    Y=mod(Y+Noise2,2);
        
        X=COUNTER_WEAVE_4(X);                 % 反交织
        % Viterbi译码,输出序列长度228bits
        viterbi_out1=SDC_IN_DE(X);             
        viterbi_out2=SDC_IN_DE(Y);
        % 去掉四位尾比特
        viterbi_dec1=viterbi_out1(1:224);
        viterbi_dec2=viterbi_out2(1:224);
        
        weave_bit_err_num=length(find(sequence~=viterbi_dec1));     % 找出经过重排和交织后的误码个数
        noweave_bit_err_num=length(find(sequence~=viterbi_dec2));   % 找出未经过重排和交织的误码个数
        if weave_bit_err_num~=0
            bit_err_num1=bit_err_num1+weave_bit_err_num;            % 累计经过重排和交织后每一帧的误码个数
        end
        if noweave_bit_err_num~=0
            bit_err_num2=bit_err_num2+noweave_bit_err_num;          % 累计未经过重排和交织每一帧的误码个数
	    end
    end
    bit_err_rate1(i)=bit_err_num1/(N*224)  % 计算并显示经过重排和交织后的误码率
    bit_err_rate2(i)=bit_err_num2/(N*224)  % 计算并显示未经过重排和交织的误码率
end

% 绘制曲线图
semilogy(snr_in_dB1,bit_err_rate1,'g*');
hold on
semilogy (snr_in_dB1,bit_err_rate2,'r*');
xlabel('信噪比(dB)')
ylabel('误码率')
title('重排与交织对突发干扰的改善作用比较')
hold off

⌨️ 快捷键说明

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