📄 sttc.m
字号:
% Program for Space Time Trellis Code (STTC)
% Just for 4 state trellis
% Program By: Rustam Efendi & Novie Eko
% Master Program of Telecommunication, STTTelkom, Bandung
% =======================================================
clear all,clc,close all
tic;
iteration = 1000; % jum
Ntx=2; Nrx=2;
SNR_max = 25;
snr=0:2:SNR_max;
if Nrx == 1
IM = 1; % identity matrix
elseif Nrx == 2
IM = [1 0; 0 1]; % identity matrix
end
% --- Parameter STTC ---
g1=[0 2;2 0]; % 1-st generator
g2=[0 1;1 0]; % 2-nd generator
M = 4; % M-PSK = QPSK
% ----------------------
% ****************************** Transmitter ******************************
% ==== Data ====
data=randint(1,48,2);
% ==== Encoder STTC ====
[s,data_mod,v] = encsttc(g1,g2,data,M);
input_kanal = data_mod;
for jum=1:iteration
jum
H=[randn(Nrx,Ntx) + i*randn(Nrx,Ntx)]; % MIMO channel
transmitted_signal=H*input_kanal;
singular(:,jum)=svd(H);
for oye = 1:length(snr)
% ==== Noise Addition ====
received_signal=awgn(transmitted_signal,snr(oye),'measured');
% ==== STTC Detection ====
map = symbolref(g1,g2,M);
allsum = ML(received_signal,map,H,Nrx);
[mindist,ind,survpath,dist,srx,data_topi] = viterbi (allsum,v,M,g1,g2);
% ==== Performance Evaluation ====
bit_error(1,oye) = sum(data~=data_topi); % BER
simbol_error(1,oye) = sum(sum(s~=srx)); % SER
pair_err1 = sum(s~=srx);
for q = 1:length(pair_err1)
if pair_err1(q) ~= 0
pair_err2(q) = 1;
else
pair_err2(q) = 0;
end
end
Eb_No=snr(oye)-3; EbNo=10^(Eb_No/10);
pair_err3(1,oye) = sum(pair_err2); % PEP
cap(1,oye)=log2(det(IM + (EbNo/Ntx)*H*H')); % MIMO channel capacity
% fprintf('Looping = %1d, SNR = %1d, BitError = %1d, SymbolError = %1d, PairError = %1d\n',...
% jum,snr(oye),bit_error(oye),simbol_error(oye),pair_err3(oye));
% if snr(oye) == max(snr)
% display('*****************************');
% end
end
for yipi=1:length(bit_error)
if bit_error(yipi)==0
fer(yipi)=0;
else
fer(yipi)=1;
end
end
total_fer(jum,:)=fer;
total_bit_error(jum,:) = bit_error;
total_simbol_error(jum,:) = simbol_error;
total_pep(jum,:) = pair_err3;
total_cap(jum,:) = cap;
end
BER = sum(total_bit_error)/(length(data)*iteration);
SER = sum(total_simbol_error)/((size(s,1))*(size(s,2))*iteration);
PEP = sum(total_pep)/(size(s,2)*iteration);
FER = sum(total_fer)/iteration;
CAP = abs(sum(total_cap)/iteration);
SIG = singular;
figure; % BER vs SNR in logaritmic value
semilogy(snr,BER,'b:*'); hold on
semilogy(snr,SER,'r:^'); hold on
semilogy(snr,PEP,'b-*'); hold on
semilogy(snr,FER,'g-o');grid
legend('BER','SER','PEP','FER')
figure; % BER vs SNR in linear value
plot(snr,BER,'b:*'); hold on
plot(snr,SER,'r:^'); hold on
plot(snr,PEP,'b-*'); hold on
plot(snr,FER,'g-o'); grid
legend('BER','SER','PEP','FER')
figure; % MIMO channel capacity
plot(snr,CAP,'r-*');grid
figure; % singular value
[y,x]=hist(reshape(SIG,[1,min(Ntx,Nrx)*iteration]),100);
plot(x,y/iteration); grid
toc
waktu_jam=toc/3600;
% save STTC_1x2 BER SER PEP CAP SIG snr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -