📄 convolution_encoder.m
字号:
Convolutional(2,1,6) Encoder and soft decision Viterbi Decoder
>>
cla;
> Generate the trellis of convolutional(2,1,6)
codeRate = 1/2; constlen = 7; codegen = [171 133];
trellis = poly2trellis(constlen, codegen); > Define trellis.
>>
> Generate binary message
N = 6048; msg_orig = randsrc(N, 1, 0:1);
> Convolutional Encoder.
puncpat = [1 1 0 1]; > [X1 Y1 Y2] 2/3 puncture pattern
[msg_enc_bi] = convenc(msg_orig, trellis, puncpat);
> 64-QAM Gray Encoder
[msg_gr_enc_bi map] = bin2gray(msg_enc_bi,'qam',64);
> Mapping to QAM constellation
M = 64; k = log2(M); > 64-QAM
msg_gr_enc = bi2de(reshape(msg_gr_enc_bi,size(msg_gr_enc_bi,2)*k,size(msg_gr_enc_bi,1)/k)');
msg_tx = pskmod(msg_gr_enc, M, pi/4);
> Pulse shaping
Nsamp = 6; msg_tx = rectpulse(msg_tx, Nsamp);
> AWGN
SNR = 25; msg_rx = awgn(msg_tx,SNR);
h = scatterplot(msg_rx); hold on; grid on; > Scatter Plot
>>
> Demodulate &amt; Detect the transmitted symbols
msg_rx_int = intdump(msg_rx, Nsamp);
Downsample
msg_gr_demod = pskdemod(msg_rx_int, M, pi/4);
> Gray Decoder
msg_gr_demod_bi = de2bi(msg_gr_demod,k)'; msg_gr_demod_bi = msg_gr_demod_bi(:);
msg_demod_bi = gray2bin(msg_gr_demod_bi,'qam',64);
>>
> Viterbi Decoder
tblen = 96; nsdec = 1; > most confident [0 2^nsdec-1]
msg_dec = vitdec(msg_demod_bi, trellis, tblen, 'cont','soft',nsdec, puncpat);
>>
> Calculate the bit error rate.
[nChnlErrs BERChnl] = biterr(msg_enc, msg_demod);
[nCodErrs BERCoded] = biterr(msg_orig(1:end-tblen), msg_dec(1+tblen:end));
disp(['Channel Error BER ']); disp([nChnlErrs BERChnl]);
disp(['Decode Error BER ']); disp([nCodErrs BERCoded]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -