?? test_overload_menu.m
字號:
%****************************************************************
% 內容概述:TURBO譯碼計算速對測試(菜單式)
% 設定計算時長,檢測單位時間內的譯碼bit數
% 該程序用于定性分析各種譯碼算法在不同條件下的計算速度
% 其計算比特率是對算法復雜性的直觀反映。
% 創 建 人:朱殿榮/QQ:235347/MSN:njzdr@msn.com
% 單 位:南京郵電大學,通信工程系
% 創建時間:2005年10月29日
% 修改時間:
% 參考文獻:《數字通信--基礎與應用》
% 《High performace parallelised 3GPP Turbo Decoder》
% 《改進的Turbo碼算法及其FPGA實現過程的研究》,天津大學,張寧,趙雅興
% K.K.Loo, T.Alukaidey, S.A.Jimaa “High Performance Parallelized
% 3GPP Turbo Decoder”, Personal Mobile Communications
% Conference 2003. 5th European (Conf. Publ. No. 492)
% 3GPP TS 25.212 V6.6.0 (2005-09)
% 3GPP TS 25.222 V6.2.0 (2004-12)
% 劉東華。Turbo碼原理與應用技術。電子工業出版社,2004.1
% 版權聲明:任何人均可復制、傳播、修改此文件,同時需保留原始版權信息。
%****************************************************************
clc;
clear all;
timerLimit = input('測試時長【60秒】:');
if isempty(timerLimit)
timerLimit = 60;
end
length_interleave = input('交織長度=幀長-尾比特長度【1024】:');
if isempty(length_interleave)
length_interleave = 1024;
end
iter = input('迭代次數【10】:');
if isempty(iter)
iter =10;
end
algorithm = input('譯碼算法【1:LOG-MAP,2:MAX-LOG-MAP(缺省),3:SEMITH-LOG-MAP)】:');
if isempty(algorithm)
algorithm =2;
end
save_mat = input('是否保存測試結果到MAT文件 【1-保存,0-不保存(缺省)】:');
if isempty(save_mat)
save_mat=0;
end
if save_mat==1
matFileName = input('MAT文件名 【''運算時長臨時測試數據.mat''】:');
if isempty(matFileName)
matFileName='運算時長臨時測試數據.mat';
end
end
fprintf('----------------------測試參數----------------------\n');
fprintf(' 交織長度=%4dbit;迭代次數=%2d\n',length_interleave,iter);
fprintf(' 運算時長=%4d秒\n',timerLimit);
switch algorithm
case 1
fprintf(' 譯碼算法:LOG-MAP\n');
case 2
fprintf(' 譯碼算法:MAX-LOG-MAP\n');
case 3
fprintf(' 譯碼算法:門限MAX-LOG-MAP\n');
end
if save_mat==1
fprintf(' 保存測試結果到 : %4s\n',matFileName);
else
fprintf(' 不保存測試結果到文件\n');
end
fprintf('----------------------------------------------------\n');
rate=1/3; %碼率
m=3; %尾比特數
fading_a=1; %Fading amplitude
EbNo=1.0; %EbNo的采樣點
EbNoLinear=10.^(EbNo.*0.1);
num_block_size=length_interleave+m; %測試的塊尺寸,指包含尾比特的軟輸入系統系列長度
random_in=round(rand(1,length_interleave)); %隨機數
[turbod_out,alphain]=turbo(random_in); %編碼
L_c=4*fading_a*EbNoLinear*rate;
sigma=1/sqrt(2*rate*EbNoLinear);
nframe = 0; % clear counter of transmitted frames
time_begin=clock;
while etime(clock,time_begin)<timerLimit %nferr:當前迭代次數、EbNo點的錯誤幀數
nframe = nframe + 1;
noice=randn(4,num_block_size); %噪聲
soft_in=L_c*(turbod_out+sigma*noice); %信息噪聲疊加
[hard_out,soft_out]=decoder_all_algorithm(soft_in,alphain,iter,algorithm)%譯碼
%注意:提高速度請給上句加上分號--看不到譯碼結果,但可以更快譯碼。
end
if save_mat==1
save (matFileName,'length_interleave','iter','nframe','timerLimit');
end
fprintf('----------------------測試結果----------------------\n');
fprintf(' 交織長度=%4dbit; 迭代次數=%2d\n',length_interleave,iter);
fprintf(' 運算幀數=%2d;運算bit數=%6d\n',nframe,nframe*length_interleave);
fprintf(' 運算時長=%4d秒;運算bit速率=%6.2e bit/s\n',timerLimit,nframe*length_interleave/timerLimit);
switch algorithm
case 1
fprintf(' 譯碼算法:LOG-MAP\n');
case 2
fprintf(' 譯碼算法:MAX-LOG-MAP\n');
case 3
fprintf(' 譯碼算法:門限MAX-LOG-MAP\n');
end
if save_mat==1
fprintf(' 保存測試結果到 : %4s\n',matFileName);
else
fprintf(' 未保存測試結果到文件\n');
end
fprintf('----------------------------------------------------\n');
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -