📄 miso.m
字号:
%%%%%%%%%%%%%%%% miso simulates the ser for different miso systemms 2*1,3*1 4*1 and 8*1
clear
clc
% declaration
numOfBlk = 1000;
qamOrder = 2;
Eb_N0_dB = [0:25];
errRate = zeros(size(Eb_N0_dB));
%% AlamoutiSpace Time Code 2*1
for i = 1 : length(Eb_N0_dB)
%%%%%%%% data generation
txData = randint(numOfBlk*2,1,qamOrder);
%%%%%%%%
temp = reshape(txData,numOfBlk,2);
temp = qammod(temp,qamOrder);
%channel definition
H = 1/sqrt(2) * (randn(numOfBlk,2) + sqrt(-1)*randn(numOfBlk,2));
% transmission
txMod(:,1) = H(:,1).* 1/sqrt(2).*temp(:,1) + H(:,2).* 1/sqrt(2).*temp(:,2) ;
txMod(:,2) = -H(:,1).*(1/sqrt(2).*temp(:,2)').' + H(:,2).*(1/sqrt(2).*temp(:,1)').' ;
% noise addition
txMod = awgn(txMod,Eb_N0_dB(i),'measured');
%%%reception
temp(:,1) = sqrt(2)*(H(:,1)'.' .* txMod(:,1) + H(:,2) .* txMod(:,2)'.')./(abs(H(:,1)).^2 + abs(H(:,2)).^2);
temp(:,2) = sqrt(2)*(H(:,2)'.' .* txMod(:,1) - H(:,1) .* txMod(:,2)'.')./(abs(H(:,1)).^2 + abs(H(:,2)).^2);
%%%%%% demodulation
rxData(:,1) = qamdemod(temp(:,1),qamOrder);
rxData(:,2) = qamdemod(temp(:,2),qamOrder);
[numErr errRate(i)] = symerr(rxData,reshape(txData,numOfBlk,2));
end
% observations
f1 = figure(1);
semilogy(Eb_N0_dB,errRate,['k',':','o']);
xlabel('Eb/No en dB');
ylabel('BER');
%% AlamoutiSpace Time Code3*1
for i = 1:length(Eb_N0_dB)
txData = randint(numOfBlk*3,1,qamOrder);
temp3 = reshape(txData,numOfBlk,3);
temp3 = qammod(temp3,qamOrder);
H11 = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
H12 = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
H13 = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
H21 = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
H22 = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
H23 = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
r1(:,1) = H11.* 1/sqrt(3).*temp3(:,1) - H13.* 1/sqrt(3).*conj(temp3(:,2));
r1(:,2) = H12.* 1/sqrt(3).*temp3(:,1) - H13.* 1/sqrt(3).*temp3(:,3) ;
r1(:,3) = H11.* 1/sqrt(3).*temp3(:,2) + H12.* 1/sqrt(3).*conj(temp3(:,3)) +H13.* 1/sqrt(3).*conj(temp3(:,1));
r1(:,4) = -H11.*1/sqrt(3) .*temp3(:,3) + H12.*(1/sqrt(3).*conj(temp3(:,2)));
r2(:,1) = H21.* 1/sqrt(3).*temp3(:,1) - H23.* 1/sqrt(3).*conj(temp3(:,2));
r2(:,2) = H22.* 1/sqrt(3).*temp3(:,1) - H23.* 1/sqrt(3).*temp3(:,3) ;
r2(:,3) = H21.* 1/sqrt(3).*temp3(:,2) + H22.* 1/sqrt(3).*conj(temp3(:,3)) +H23.* 1/sqrt(3).*conj(temp3(:,1));
r2(:,4) = -H21.*1/sqrt(3) .*temp3(:,3) + H22.*(1/sqrt(3).*conj(temp3(:,2))) ;
r1 = awgn(r1,Eb_N0_dB(i),'measured');
r2 = awgn(r2,Eb_N0_dB(i),'measured');
s11=r1(:,1).*conj(H11)+r1(:,2).*conj(H12)+H13.*conj(r1(:,3));
s12=-conj(r1(:,1)).*H13+r1(:,3).*conj(H11)+H12.*conj(r1(:,4));
s13=-r1(:,2).*conj(H13)+conj(r1(:,3)).*H12-conj(H11).*r1(:,4);
sv11=sqrt(3)*(s11./((abs(H11)).^2+(abs(H12)).^2+(abs(H13)).^2));
sv12=sqrt(3)*s12./((abs(H11)).^2+(abs(H12)).^2+(abs(H13)).^2);
sv13=sqrt(3)*(s13./((abs(H11)).^2+(abs(H12)).^2+(abs(H13)).^2));
rxData(:,1) = qamdemod(sv11,qamOrder);
rxData(:,2) = qamdemod(sv12,qamOrder);
rxData(:,3) = qamdemod(sv13,qamOrder);
[numErr errRate(i)] = symerr(rxData,reshape(txData,numOfBlk,3));
end
f1 = figure(1);
hold on
semilogy(Eb_N0_dB,errRate,['b','-']);
xlabel('Eb/No en dB');
ylabel('BER');
%% Space Time Code4*1
for i = 1:length(Eb_N0_dB)
txData = randint(numOfBlk*3,1,qamOrder);
temp3 = reshape(txData,numOfBlk,3);
temp3 = qammod(temp3,qamOrder);
H11 = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
H12 = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
H13 = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
H14 = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
H21 = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
H22 = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
H23 = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
H24 = 1/sqrt(2) * (randn(numOfBlk,1) + sqrt(-1)*randn(numOfBlk,1));
r1(:,1) = H11.* 1/sqrt(4).*temp3(:,1) - H13.* 1/sqrt(4).*conj(temp3(:,2))+H14.* 1/sqrt(4).*conj(temp3(:,3));
r1(:,2) = H12.* 1/sqrt(4).*temp3(:,1) - H13.* 1/sqrt(4).*temp3(:,3)- H14.* 1/sqrt(4).*temp3(:,2);
r1(:,3) = H11.* 1/sqrt(4).*temp3(:,2) + H12.* 1/sqrt(4).*conj(temp3(:,3)) +H13.* 1/sqrt(4).*conj(temp3(:,1));
r1(:,4) = -H11.* 1/sqrt(4).*temp3(:,3) + H12.*(1/sqrt(4).*conj(temp3(:,2)))+H14.* 1/sqrt(4).*conj(temp3(:,1));
r2(:,1) = H21.* 1/sqrt(4).*temp3(:,1) - H23.* 1/sqrt(4).*conj(temp3(:,2))+H24.* 1/sqrt(4).*conj(temp3(:,3));
r2(:,2) = H22.* 1/sqrt(4).*temp3(:,1) - H23.* 1/sqrt(4).*temp3(:,3)- H24.* 1/sqrt(4).*temp3(:,2);
r2(:,3) = H21.* 1/sqrt(4).*temp3(:,2) + H22.* 1/sqrt(4).*conj(temp3(:,3)) +H23.* 1/sqrt(4).*conj(temp3(:,1));
r2(:,4) = -H21.* 1/sqrt(4).*temp3(:,3) + H22.*(1/sqrt(4).*conj(temp3(:,2)))+H24.* 1/sqrt(4).*conj(temp3(:,1));
r1 = awgn(r1,Eb_N0_dB(i),'measured');
r2 = awgn(r2,Eb_N0_dB(i),'measured');
s11=r1(:,1).*conj(H11)+r1(:,2).*conj(H12)+H13.*conj(r1(:,3))+H14.*conj(r1(:,4));
s12=-conj(r1(:,1)).*H13-conj(H14).*r1(:,2)+r1(:,3).*conj(H11)+H12.*conj(r1(:,4));
s13=conj(r1(:,3)).*H12-r1(:,2).*conj(H13)-conj(H11).*r1(:,4)+H14.*conj(r1(:,1));
sv11=sqrt(4)*(s11./((abs(H11)).^2+(abs(H12)).^2+(abs(H13)).^2)+(abs(H14)).^2);
sv12=sqrt(4)*(s12./((abs(H11)).^2+(abs(H12)).^2+(abs(H13)).^2)+(abs(H14)).^2);
sv13=sqrt(4)*(s13./((abs(H11)).^2+(abs(H12)).^2+(abs(H13)).^2)+(abs(H14)).^2);
rxData(:,1) = qamdemod(sv11,qamOrder);
rxData(:,2) = qamdemod(sv12,qamOrder);
rxData(:,3) = qamdemod(sv13,qamOrder);
[numErr errRate(i)] = symerr(rxData,reshape(txData,numOfBlk,3));
end
f1 = figure(1);
hold on
semilogy(Eb_N0_dB,errRate,['b',':']);
xlabel('Eb/No en dB');
ylabel('BER');
%% Space Time Code 8*1
for i = 1:length(Eb_N0_dB)
txData = randint(numOfBlk*4,1,qamOrder);
temp4 = reshape(txData,numOfBlk,4);
temp4 = qammod(temp4,qamOrder);
H8 = 1/sqrt(2) * (randn(numOfBlk,8) + sqrt(-1)*randn(numOfBlk,8));
r1(:,1) = H8(:,1).* 1/sqrt(8).*temp4(:,1) - H8(:,5).* 1/sqrt(8).*conj(temp4(:,4))-H8(:,7).* 1/sqrt(8).*conj(temp4(:,2))+H8(:,8).* 1/sqrt(8).*conj(temp4(:,3));
r1(:,2) = H8(:,2).* 1/sqrt(8).*temp4(:,1) - H8(:,6).* 1/sqrt(8).*conj(temp4(:,4))- H8(:,7).* 1/sqrt(8).*temp4(:,3)- H8(:,8).* 1/sqrt(8).*temp4(:,2);
r1(:,3) = H8(:,3).* 1/sqrt(8).*temp4(:,1) + H8(:,5).* 1/sqrt(8).*conj(temp4(:,2)) +H8(:,6).* 1/sqrt(8).*conj(temp4(:,3))-H8(:,7).*1/sqrt(8).*temp4(:,4);
r1(:,4) = H8(:,4).*1/sqrt(8).*temp4(:,1) - H8(:,5).*(1/sqrt(8).*temp4(:,3))+H8(:,6).* 1/sqrt(8).*conj(temp4(:,2))- H8(:,8).*(1/sqrt(8).*temp4(:,4));
r1(:,5) = H8(:,1).* 1/sqrt(8).*temp4(:,4) - H8(:,3).* 1/sqrt(8).*conj(temp4(:,2))+H8(:,4).* 1/sqrt(8).*conj(temp4(:,3))+H8(:,5).* 1/sqrt(8).*conj(temp4(:,1));
r1(:,6) = H8(:,2).* 1/sqrt(8).*temp4(:,4) - H8(:,3).* 1/sqrt(8).*temp4(:,3) -H8(:,4).* 1/sqrt(8).*temp4(:,2)+H8(:,6).*1/sqrt(8).*conj(temp4(:,1));
r1(:,7) = H8(:,1).* 1/sqrt(8).*temp4(:,2) + H8(:,2).* 1/sqrt(8).*conj(temp4(:,3))+H8(:,3).* 1/sqrt(8).*conj(temp4(:,4))+H8(:,7).* 1/sqrt(8).*conj(temp4(:,1));
r1(:,8) = -H8(:,1).* 1/sqrt(8).*temp4(:,3) + H8(:,2).* 1/sqrt(8).*conj(temp4(:,2))+H8(:,4).* 1/sqrt(8).*conj(temp4(:,4))+H8(:,8).* 1/sqrt(8).*conj(temp4(:,1));
r1 = awgn(r1,Eb_N0_dB(i),'measured');
s1=r1(:,1).*conj(H8(:,1))+r1(:,2).*conj(H8(:,2))+conj(H8(:,3)).*r1(:,3)+conj(H8(:,4)).*r1(:,4)+H8(:,5).*conj(r1(:,5))+H8(:,6).*conj(r1(:,6))+H8(:,7).*conj(r1(:,7))+H8(:,8).*conj(r1(:,8));
s2=-H8(:,7).*conj(r1(:,1))-r1(:,2).*conj(H8(:,8))+conj(H8(:,5)).*r1(:,3)+conj(H8(:,6)).*r1(:,4)-H8(:,3).*conj(r1(:,5))-conj(H8(:,4)).*r1(:,6)+conj(H8(:,1)).*r1(:,7)+H8(:,2).*conj(r1(:,8));
s3=H8(:,8).*conj(r1(:,1))-r1(:,2).*conj(H8(:,7))+H8(:,6).*conj(r1(:,3))-conj(H8(:,5)).*r1(:,4)+H8(:,4).*conj(r1(:,5))-conj(H8(:,3)).*r1(:,6)+H8(:,2).*conj(r1(:,7))-conj(H8(:,1)).*r1(:,8);
s4=-H8(:,5).*conj(r1(:,1))-H8(:,6).*conj(r1(:,2))-conj(H8(:,7)).*r1(:,3)-conj(H8(:,8)).*r1(:,4)+conj(H8(:,1)).*r1(:,5)+conj(H8(:,2)).*r1(:,6)+H8(:,3).*conj(r1(:,7))+H8(:,4).*conj(r1(:,8));
sv1=sqrt(8)*(s1./((abs(H8(:,1)).^2)+(abs(H8(:,2)).^2)+(abs(H8(:,3)).^2)+(abs(H8(:,4)).^2)+(abs(H8(:,5)).^2)+(abs(H8(:,6)).^2)+(abs(H8(:,7)).^2)+(abs(H8(:,8)).^2)));
sv2=sqrt(8)*(s2./((abs(H8(:,1)).^2)+(abs(H8(:,2)).^2)+(abs(H8(:,3)).^2)+(abs(H8(:,4)).^2)+(abs(H8(:,5)).^2)+(abs(H8(:,6)).^2)+(abs(H8(:,7)).^2)+(abs(H8(:,8)).^2)));
sv3=sqrt(8)*(s3./((abs(H8(:,1)).^2)+(abs(H8(:,2)).^2)+(abs(H8(:,3)).^2)+(abs(H8(:,4)).^2)+(abs(H8(:,5)).^2)+(abs(H8(:,6)).^2)+(abs(H8(:,7)).^2)+(abs(H8(:,8)).^2)));
sv4=sqrt(8)*(s4./((abs(H8(:,1)).^2)+(abs(H8(:,2)).^2)+(abs(H8(:,3)).^2)+(abs(H8(:,4)).^2)+(abs(H8(:,5)).^2)+(abs(H8(:,6)).^2)+(abs(H8(:,7)).^2)+(abs(H8(:,8)).^2)));
rxData(:,1) = qamdemod(sv1,qamOrder);
rxData(:,2) = qamdemod(sv2,qamOrder);
rxData(:,3) = qamdemod(sv3,qamOrder);
rxData(:,4) = qamdemod(sv4,qamOrder);
[numErr errRate(i)] = symerr(rxData,reshape(txData,numOfBlk,4));
end
f1 = figure(1);
hold on
semilogy(Eb_N0_dB,errRate,['r',':']);
xlabel('Eb/No en dB');
ylabel('BER');
%%2*1 Without 'space time coding'
for i = 1 : length(Eb_N0_dB)
txData = randint(numOfBlk*2,1,qamOrder);
temp = qammod(txData,qamOrder);
H = 1/sqrt(2) * (randn(numOfBlk*2,1) + sqrt(-1)*randn(numOfBlk*2,1));
txMod = H.*temp;
txMod = awgn(txMod,Eb_N0_dB(i),'measured');
temp = txMod./H;
rxData = qamdemod(temp,qamOrder);
[numErr errRate(i)] = symerr(rxData,txData);
end
figure(1);
hold on
semilogy(Eb_N0_dB,errRate,['r','-','o']);
xlabel('Eb/No en dB');
ylabel('BER');
grid on
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -