test_OverLoad_menu.m
上传用户:hnyfjx
上传日期:2013-06-30
资源大小:2149k
文件大小:4k
源码类别:

传真(Fax)编程

开发平台:

Matlab

  1. %****************************************************************
  2. % 内容概述:TURBO译码计算速对测试(菜单式)
  3. %          设定计算时长,检测单位时间内的译码bit数
  4. %          该程序用于定性分析各种译码算法在不同条件下的计算速度
  5. %          其计算比特率是对算法复杂性的直观反映。
  6. % 创 建 人:朱殿荣/QQ:235347/MSN:njzdr@msn.com
  7. % 单    位:南京邮电大学,通信工程系
  8. % 创建时间:2005年10月29日
  9. % 修改时间:
  10. % 参考文献:《数字通信--基础与应用》
  11. %          《High performace parallelised 3GPP Turbo Decoder》
  12. %          《改进的Turbo码算法及其FPGA实现过程的研究》,天津大学,张宁,赵雅兴
  13. %        K.K.Loo, T.Alukaidey, S.A.Jimaa “High Performance Parallelized
  14. %           3GPP Turbo Decoder”, Personal Mobile Communications
  15. %        Conference 2003. 5th European (Conf. Publ. No. 492)
  16. %        3GPP TS 25.212 V6.6.0 (2005-09)
  17. %        3GPP TS 25.222 V6.2.0 (2004-12) 
  18. %        刘东华。Turbo码原理与应用技术。电子工业出版社,2004.1
  19. % 版权声明:任何人均可复制、传播、修改此文件,同时需保留原始版权信息。
  20. %****************************************************************
  21. clc;
  22. clear all;
  23. timerLimit = input('测试时长【60秒】:');
  24. if isempty(timerLimit)
  25.    timerLimit = 60;
  26. end
  27. length_interleave = input('交织长度=帧长-尾比特长度【1024】:');
  28. if isempty(length_interleave)
  29.    length_interleave = 1024;
  30. end
  31. iter = input('迭代次数【10】:');
  32. if isempty(iter)
  33.    iter =10;
  34. end
  35. algorithm = input('译码算法【1:LOG-MAP,2:MAX-LOG-MAP(缺省),3:SEMITH-LOG-MAP)】:');
  36. if isempty(algorithm)
  37.    algorithm =2;
  38. end
  39. save_mat = input('是否保存测试结果到MAT文件 【1-保存,0-不保存(缺省)】:');
  40. if isempty(save_mat)
  41.    save_mat=0;
  42. end
  43. if save_mat==1
  44.     matFileName = input('MAT文件名 【''运算时长临时测试数据.mat''】:');
  45.     if isempty(matFileName)
  46.         matFileName='运算时长临时测试数据.mat';
  47.     end
  48. end
  49. fprintf('----------------------测试参数----------------------n'); 
  50. fprintf(' 交织长度=%4dbit;迭代次数=%2dn',length_interleave,iter);
  51. fprintf(' 运算时长=%4d秒n',timerLimit);
  52. switch algorithm
  53.     case 1
  54.         fprintf(' 译码算法:LOG-MAPn');
  55.     case 2
  56.         fprintf(' 译码算法:MAX-LOG-MAPn');
  57.     case 3
  58.         fprintf(' 译码算法:门限MAX-LOG-MAPn');
  59. end
  60. if save_mat==1
  61.     fprintf(' 保存测试结果到 : %4sn',matFileName);
  62. else
  63.     fprintf(' 不保存测试结果到文件n');
  64. end    
  65. fprintf('----------------------------------------------------n'); 
  66. rate=1/3;           %码率
  67. m=3;                    %尾比特数
  68. fading_a=1;             %Fading amplitude
  69. EbNo=1.0;                            %EbNo的采样点
  70. EbNoLinear=10.^(EbNo.*0.1);
  71. num_block_size=length_interleave+m;     %测试的块尺寸,指包含尾比特的软输入系统系列长度
  72. random_in=round(rand(1,length_interleave));  %随机数
  73. [turbod_out,alphain]=turbo(random_in);      %编码
  74. L_c=4*fading_a*EbNoLinear*rate;
  75. sigma=1/sqrt(2*rate*EbNoLinear);
  76. nframe = 0;    % clear counter of transmitted frames
  77. time_begin=clock;
  78. while etime(clock,time_begin)<timerLimit        %nferr:当前迭代次数、EbNo点的错误帧数
  79.     nframe = nframe + 1; 
  80.     noice=randn(4,num_block_size);    %噪声
  81.     soft_in=L_c*(turbod_out+sigma*noice);            %信息噪声叠加
  82.     [hard_out,soft_out]=decoder_all_algorithm(soft_in,alphain,iter,algorithm)%译码
  83.     %注意:提高速度请给上句加上分号--看不到译码结果,但可以更快译码。
  84. end
  85. if save_mat==1
  86.     save (matFileName,'length_interleave','iter','nframe','timerLimit');
  87. end
  88. fprintf('----------------------测试结果----------------------n');  
  89. fprintf(' 交织长度=%4dbit; 迭代次数=%2dn',length_interleave,iter);
  90. fprintf(' 运算帧数=%2d;运算bit数=%6dn',nframe,nframe*length_interleave);
  91. fprintf(' 运算时长=%4d秒;运算bit速率=%6.2e bit/sn',timerLimit,nframe*length_interleave/timerLimit);
  92. switch algorithm
  93.     case 1
  94.         fprintf(' 译码算法:LOG-MAPn');
  95.     case 2
  96.         fprintf(' 译码算法:MAX-LOG-MAPn');
  97.     case 3
  98.         fprintf(' 译码算法:门限MAX-LOG-MAPn');
  99. end
  100. if save_mat==1
  101.     fprintf(' 保存测试结果到 : %4sn',matFileName);
  102. else
  103.     fprintf(' 未保存测试结果到文件n');
  104. end    
  105. fprintf('----------------------------------------------------n');