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

传真(Fax)编程

开发平台:

Matlab

  1. %****************************************************************
  2. % 内容概述:AWGN信道测试
  3. %          每个SNR采样点的测试帧数是随snr指数上升的,
  4. %          这样不仅减少了计算量而且可以保证精度。
  5. %          每帧的输入是相同的,(不是每帧都不一样,这样可以大幅降低计算量)
  6. %          在帧比特足够多的情况下,应该可以保证随机性(未理论证实)
  7. % 创 建 人:朱殿荣/QQ:235347/MSN:njzdr@msn.com
  8. % 单    位:南京邮电大学,通信工程系
  9. % 创建时间:2005年7月24日
  10. % 修改时间:
  11. % 参考文献:
  12. % 版权声明:任何人均可复制、传播、修改此文件,同时需保留原始版权信息。
  13. %****************************************************************
  14. clear;
  15. clc;
  16. rate=1/3;           %码率
  17. wear=1;             %损耗系数
  18. time_begin=datestr(now);
  19. snr=0:0.5:3;                              %snr的采样点
  20. EbNo=10.^(snr.*0.1);
  21. num_frame=round(10.^(snr+1));         %测试的帧数;
  22. num_block_size=1024;                    %测试的块尺寸,指包含尾比特的软输入系统系列长度
  23. err_counter(3,1:length(snr))=0;         %初始化错误比特计数器
  24. guage=0;                                %初始化计算量
  25. counter_guage=0;                        %初始化计算量计数器
  26. for num_it=1:1:3
  27.     for ii=1:length(snr)
  28.         guage=guage+num_frame(ii);      %统计计算量
  29.     end
  30. end
  31. random_in=round(rand(1,num_block_size-3));  %随机数
  32. [turbod_out,alphain]=turbo(random_in);      %编码
  33. for num_it=1:1:3
  34.     for ii=1:length(snr)
  35.         L_c=4*wear*EbNo(ii)*rate;
  36.         sigma=1/sqrt(2*rate*EbNo(ii));
  37.                
  38.         for frame=1:num_frame(ii)
  39.         
  40.             noice=randn(3,num_block_size);    %噪声
  41.             soft_in=turbod_out+sigma*noice;            %信息噪声叠加
  42.             soft_in=L_c*soft_in;
  43.             %soft_in=awgn(turbod_out,snr(ii),'measured');    %通过AWGN信道,加入噪声
  44.             counter_guage=counter_guage+1;
  45.             fprintf('总帧数:%6.0f;完成帧数:%6.0f;当前snr点总帧数:%4.0f;当前snr点完成帧数:%4.0f;计算进度:%2.1f%% n',...
  46.                 guage,counter_guage,num_frame(ii),frame,counter_guage*100/guage);            
  47.             [hard_out,soft_out]=deturbo_cap(soft_in,alphain,num_it);
  48.             err_counter(num_it,ii)=err_counter(num_it,ii)+...
  49.             length(find(hard_out(1:num_block_size-3)~=random_in));
  50.         end
  51.         ber(num_it,ii)=err_counter(num_it,ii)/((num_block_size-3)*num_frame(ii));
  52.     end
  53. end
  54. semilogy(snr,ber(1,:),snr,ber(2,:),snr,ber(3,:));
  55. xlabel('SNR(dB)');
  56. ylabel('BER');
  57. title('3GPP标准 max-log-map译码算法 译码性能图,1024交织长度,楚宛琴噪声加法');
  58. legend('1次迭代','2次迭代','3次迭代');
  59. save cap算法06_楚宛琴噪声加法.mat snr ber soft_out;
  60. time_end=datestr(now);
  61. disp(time_begin);
  62. disp(time_end);
  63. %plot(snr,ber);
  64. %counter_ber
  65. %soft_in(1,1:10);
  66. %hard_out(1:10);
  67. %soft_out(1:10);
  68. %--------------------------
  69. %soft_in2(1,:)=soft_in(1,alphain);
  70. %soft_in2(2,:)=soft_in(3,:);
  71. %soft_out=decoder_3GPP_MAX_new(soft_in2);
  72. %soft_out(alphain)=soft_out;
  73. %----------------------------
  74. %soft_out=decoder_3GPP_MAX_new(soft_in);
  75. %for ii=1:num_block_size
  76. %    if soft_out(ii)>0
  77. %        hard_out(ii)=1;
  78. %    else
  79. %        hard_out(ii)=-1;
  80. %    end
  81. %end
  82. %----------------------------