?? test_wyf.m
字號:
%****************************************************************
% 內容概述:AWGN信道測試
% 每個SNR采樣點的測試幀數是隨snr指數上升的,
% 這樣不僅減少了計算量而且可以保證精度。
% 每幀的輸入是相同的,(不是每幀都不一樣,這樣可以大幅降低計算量)
% 在幀比特足夠多的情況下,應該可以保證隨機性(未理論證實)
% 創 建 人:朱殿榮/QQ:235347/MSN:njzdr@msn.com
% 單 位:南京郵電大學,通信工程系
% 創建時間:2005年7月24日
% 修改時間:
% 參考文獻:
% 版權聲明:任何人均可復制、傳播、修改此文件,同時需保留原始版權信息。
%****************************************************************
clear;
clc;
time_begin=datestr(now);
rate=1/3; %碼率
m=3; %尾比特數
fading_a=1; %Fading amplitude
snr=0:0.2:2.4; %snr的采樣點
EbNoLinear=10.^(snr.*0.1);
iter=[1 2 3 6]; %迭代次數
ferrlim=10; %誤幀限,達到此限即可停止當前SNR點的測試
%num_frame=round(10.^(snr+1)); %測試的幀數;
num_block_size=1024; %測試的塊尺寸,指包含尾比特的軟輸入系統系列長度
err_counter=zeros(max(iter),length(snr)); %初始化錯誤比特計數器
nferr= zeros(max(iter),length(snr)); %初始化錯誤幀計數器
ber=zeros(max(iter),length(snr)); %初始化錯誤比特率
random_in=round(rand(1,num_block_size-m)); %隨機數
[turbod_out,alphain]=turbo(random_in); %編碼
for ii=1:length(iter)
for nEN=1:length(snr)
L_c=4*fading_a*EbNoLinear(nEN)*rate;
sigma=1/sqrt(2*rate*EbNoLinear(nEN));
nframe = 0; % clear counter of transmitted frames
if nEN==1 | ber(iter(ii),nEN-1)>9.0e-6
while nferr(iter(ii),nEN)<ferrlim %nferr:當前迭代次數、snr點的錯誤幀數
nframe = nframe + 1;
noice=randn(3,num_block_size); %噪聲
soft_in=L_c*(turbod_out+sigma*noice); %信息噪聲疊加
[hard_out,soft_out]=deturbo_cap(soft_in,alphain,iter(ii)); %譯碼
errs=length(find(hard_out(1:num_block_size-m)~=random_in));%當前點錯誤bit數
if errs>0
err_counter(iter(ii),nEN)=err_counter(iter(ii),nEN)+errs;
nferr(iter(ii),nEN)=nferr(iter(ii),nEN)+1;
end
end
ber(iter(ii),nEN) = err_counter(iter(ii),nEN)/nframe/(num_block_size-m);%誤比特率
%fer(iter,nEN) = nferr(iter,nEN)/nframe; %誤幀率
else
ber(iter(ii),nEN)=1.0e-7;
end
fprintf('迭代次數:%1.0f;snr:%1.2f;誤碼率:%8.4e;\n',...
iter(ii),snr(nEN),ber(iter(ii),nEN));
save cap算法06_WYF噪聲_max_log_map.mat snr ber;
end
end
semilogy(snr,ber(1,:),snr,ber(2,:),snr,ber(3,:),snr,ber(6,:));
xlabel('SNR(dB)');
ylabel('Bit Error Rate');
title('3GPP標準 max-log-map譯碼算法 譯碼性能圖,1024交織長度,WYF噪聲加法');
legend('1次迭代','2次迭代','3次迭代','6次迭代');
time_end=datestr(now);
disp(time_begin);
disp(time_end);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -