⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sttc.m

📁 主要时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 + -