matlab图像卷积编码,[转载]卷积编码和维特比译码的MATLAB实现

% 2011-3-29 从matlab demos 当中找来的关于卷积编码和维特比译码的实例

figure(1) %

subplot(211) %

EbNo = 4.5:.5:7; linEbNo = 10.^(EbNo(:).*0.1);

M = 4; codeRate = 1/2; constlen = 7; k = log2(M); codegen = [171

133];

tblen =

32; % traceback length

trellis = poly2trellis(constlen, codegen);

dspec = distspec(trellis, 7);

expVitBER = bercoding(EbNo, 'conv', 'hard', codeRate, dspec);

semilogy(EbNo, expVitBER, 'g'); xlabel('Eb/No

(dB)'); ylabel('BER');

title('Performance for R=1/2, K=7 Conv. Code and QPSK with Hard

Decision');

grid on; axis([4 8 10e-7 10e-3]); legend('Union Bound', 0);

figure(2) %

subplot(311) %

numSymb = 100; numPlot = 20;

Nsamp =

4; % oversampling rate

EbNoDemo = 3; EsN0 = EbNoDemo + 10*log10(k);

seed = [654321 123456];

rand('state', seed(1)); randn('state',

seed(2));

msg_orig = randsrc(numSymb, 1, 0:1);

stem(0:numPlot-1, msg_orig(1:numPlot),'bx');

axis([ 0 numPlot -0.2 1.2]); xlabel('时间');

ylabel('幅度');

title('卷积编码前的二进制符号' );

legend off

subplot(312) %

[msg_enc_bi] = convenc(msg_orig, trellis);

numEncPlot = numPlot / codeRate; tEnc = (0:numEncPlot-1) *

codeRate;

stem(tEnc, msg_enc_bi(1:length(tEnc)),'rx');

axis([min(tEnc) max(tEnc) -0.2 1.2]); xlabel('时间'); ylabel('幅度');

title('卷积编码后的二进制符号' );

figure(3) %

subplot(211) %

randn('state', seed(2));

msg_enc = bi2de(reshape(msg_enc_bi, ...

size(msg_enc_bi,2)*k,size(msg_enc_bi,1) / k)');

grayencod = bitxor(0:M-1, floor((0:M-1)/2));

msg_gr_enc = grayencod(msg_enc+1);

msg_tx = modulate(modem.pskmod(M, pi/4), msg_gr_enc);

msg_tx = rectpulse(msg_tx, Nsamp);

msg_rx = awgn(msg_tx,

EsN0-10*log10(1/codeRate)-10*log10(Nsamp));

numModPlot = numEncPlot * Nsamp ./ k;

tMod = (0:numModPlot-1) ./ Nsamp .* k;

plot(tMod, real(msg_tx(1:length(tMod))),'c-', ...

tMod,

imag(msg_tx(1:length(tMod))),'m-');

axis([ min(tMod) max(tMod) -1.5 1.5]); xlabel('时间'); ylabel('幅度');

title('QPSK基带调制后的编码符号');

legend('同相分量', '正交分量', 0);

subplot(212) %

msg_rx_int = intdump(msg_rx, Nsamp);

msg_gr_demod = demodulate(modem.pskdemod(M, pi/4),

msg_rx_int);

[dummy graydecod] = sort(grayencod); graydecod = graydecod -

1;

msg_demod = graydecod(msg_gr_demod+1)';

msg_demod_bi = de2bi(msg_demod,k)'; msg_demod_bi =

msg_demod_bi(:);

stem(tEnc, msg_enc_bi(1:numEncPlot),'rx'); hold on;

stem(tEnc, msg_demod_bi(1:numEncPlot),'bo'); hold off;

axis([0 numPlot -0.2 1.2]);

xlabel('时间'); ylabel('幅度'); title('解调符号' );

figure(2) %

subplot(313) %

msg_dec = vitdec(msg_demod_bi, trellis, tblen, 'cont',

'hard');

stem(0:numPlot-1, msg_orig(1:numPlot), 'rx'); hold on;

stem(0:numPlot-1, msg_dec(1+tblen:numPlot+tblen), 'bo'); hold

off;

axis([0 numPlot -0.2 1.2]); xlabel('时间');

ylabel('幅度');

title('译码符号' );

% cla; %

figure(1) %

subplot(212) %

load('vitsimresults.mat');

semilogy(EbNo, expVitBER, 'g', EbNo, ratio, 'b*-');

xlabel('Eb/No (dB)'); ylabel('BER');

title('Performance for R=1/2, K=7 Conv. Code and QPSK with Hard

Decision');

axis([4 8 10e-7 10e-3]); legend('Union Bound', 'Simulation

Results', 0); grid on;

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卷积码是在信息序列通过有限状态移位寄存器的过程中产生的。通常,移存器包含N级(每级A比特),并对应有基于生成多项式的m个线性代数方程,输入数据每次以A位(比特)移入移位寄存器,在此同时有n位(比特)数据作为己编码序列输出,编码效率为A/n。参数N被称作约束长度,它指明了当前的输出数据与多少输入数据有关。它决定了编码的复杂度。 译码器的功能就是,运用一种可以将错误的发生减小到最低程度的规则或方法,从已编码的码字中解出原始信息。在信息序列和码序列之间有一对一的关系。此外,任何信息序列和码序列将与网格图中的唯一一条路径相联系。因而,卷积译码器的工作就是找到网格图中的这一条路径。 Viterbi算法可被描述如下; 把在时刻i,状态 所对应的网格图节点记作 ,每个网相节点被分配一个值 。节点值按如下方式计算: (1)设 , 。 (2)在时刻i,对于进入每个节点的所有路径计算其不完全路径的长度。 (3)令 为在i时刻,到达与状态 。相对应的节点 的最小不完全路径长度。通过在前一节点随机选择一条路径就可产生新的结果。非存留支胳将从网格图中删除。以这种方式,可以从 。处生成一组最小路径。 (4)当L表示输入编码段的数目,其中每段为k比特,m为编码器中的最大穆存器的长度,如果 ,那么令 ,返回第二步。 一旦计算出所有节点值,则从 时刻,状态 。开始,沿网格图中的存留支路反向追寻即可。这样被定义的支路与解码输出将是一一对应的。关于不完全路径长度,硬判决解码将采用Hamming距离,而软判决解码将采用Euclidean距离。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值