📄 conv_vit_qam.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 & 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 + -