?? channel_link.m
字號:
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 + -