Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
普通会员
注册日期: 2009-03-05
年龄: 37
帖子: 34
声望力: 17 ![]() |
![]()
大家好,我编了一个程序,如下:
clear all; clc; cycl = 50; snr_db = 0:1:10; % 输入信息 msg = randint(1,1024); ber0 = zeros(cycl,length(snr_db)); ber1 = zeros(cycl,length(snr_db)); ber2 = zeros(cycl,length(snr_db)); % Trellises trel = poly2trellis(3,[5 7]); %Define trellis for rate 1/2 code. for n = 1:cycl for x = 1:length(snr_db) % Code words code = convenc(msg,trel); % Encode. % Interleaver state = 20; inter = randintrlv(code,state); % BPSK 调制 s0 = sign(msg - 0.5); s1 = sign(inter-0.5); s2 = sign(code-0.5); % AWGN Channel add_noise0=awgn(s0,snr_db(x),'measured'); add_noise1=awgn(s1,snr_db(x),'measured'); add_noise2=awgn(s2,snr_db(x),'measured'); % Deinterleaver with noise for soft decoding deinter_noise = randdeintrlv(add_noise2,state); % 解调 r_0 = 0.5*sign(add_noise0) + 0.5; r_1 = 0.5*sign(add_noise1) + 0.5; r_2 = 0.5*sign(add_noise2) + 0.5; % Deinterleaver deinter_1 = randdeintrlv(r_1,state); % Traceback length tblen = 5; % vitdec 硬判决 decoded1 = vitdec(deinter_1,trel,tblen,'cont','hard'); % vitdec 软判决 [y,qcode] = quantiz(deinter_noise,[-.75 -.5 -.25 0 .25 .5 .75],7:-1:0); decoded2 = vitdec(qcode',trel,tblen,'cont','soft',3); % 比较误码率 [num0,rat0] = biterr(r_0,msg); [num1,rat1] = biterr(double(decoded1(tblen+1:end)),msg(1:end-tblen)); [num2,rat2] = biterr(decoded2(tblen+1:end),(msg(1:end-tblen)')); ber0(n,x) = rat0; ber1(n,x) = rat1; ber2(n,x) = rat2; end end ber0 = mean(ber0); ber1 = mean(ber1); ber2 = mean(ber2); semilogy(snr_db,ber0,'b-o',snr_db,ber1,'r-s',snr_db,ber2,'k-p'); xlabel('SNR (dB)'); ylabel('BER'); legend('Uncoded','Hard Coded','Soft Coded'); title('Performance of convolutional code with rate 1/2'); 运行后发现软判决为一条直线,不知哪里出错了?应该如何修改程序呢?急啊,请高人指点 另外如果想定义高斯信道,若不想用awgn函数,该如何从定义出发编写高斯信道呢? |
![]() |
![]() |