Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

How to change this program from MIMO to SIMO

Status
Not open for further replies.

Kareem Hamed

Newbie level 4
Joined
Oct 22, 2014
Messages
5
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
125
How to change this problem from MIMO to SIMO ?


Code dot - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
clear all 
SP.FFTsize=128; 
numSymbols=SP.FFTsize; 
m1=4; 
SP.inputBlockSize=32; 
N=64; 
Q=numSymbols/SP.inputBlockSize;
SP.detection_type='ZFE';
SP.sucariermapping='IFDMA'; 
SP.CPsize=20; 
SP.subband = 0; 
SP.numRun =100;
M=16; 
 
SP.ep1=0;
SP.ep2=0;
SP.ep3=0; 
SP.ep4=0;
numSymbols = SP.FFTsize; 
A1=exp((1*1i*2*piSP.ep1/(numSymbols))(0:(numSymbols-1))); 
A2=exp((1*1i*2*piSP.ep2/(numSymbols))(0:(numSymbols-1))); 
CT1=diag(A1)*ifft(eye(numSymbols)); 
CT2=diag(A2)*ifft(eye(numSymbols)); 
SP.SNR=0:5:40;
for n = 1:length(SP.SNR)
for k = 1:SP.numRun
SP.channel=(1/sqrt(7))*(randn(4,8)+sqrt(-1)*randn(4,8))/sqrt(2);
h1=SP.channel(1,:);
h2=SP.channel(2,:);
h3=SP.channel(3,:);
h4=SP.channel(4,:);
H_channel11=fft(h1,SP.FFTsize);
H_channel12=fft(h2,SP.FFTsize);
H_channel21=fft(h3,SP.FFTsize);
H_channel22=fft(h4,SP.FFTsize);
 
data1=randi([0 M-1],1,48);
data1=data1.';
inputSymbols1=qammod(data1,M);
I1=eye(N);
v_phi=1:4:64;
I1(:,v_phi)=[];
inputSymbols11=I1*inputSymbols1;
m2=4;
data2=randi([0 M-1],1,48); 
data2=data2.';
inputSymbols2=qammod(data2,M);
I2=eye(N); 
v_phi2=2:4:64;
I2(:,v_phi2)=[]; 
inputSymbols22=I2*inputSymbols2; 
inputSymbols_freq1=fft(inputSymbols11(1:2:end)); 
inputSymbols_freq2=fft(inputSymbols11(2:2:end)); 
inputSamples_ifdma1=zeros(1,numSymbols); 
inputSamples_ifdma2=zeros(1,numSymbols);
inputSamples_lfdma1=zeros(1,numSymbols); 
inputSamples_lfdma2=zeros(1,numSymbols); 
if SP.sucariermapping=='IFDMA' inputSamples_ifdma1(1+SP.subband:Q:numSymbols)=inp utSymbols_freq1; inputSamples_ifdma2(1+SP.subband:Q:numSymbols)=inp utSymbols_freq2; inputSamples_lfdma3=ifft(inputSamples_ifdma1); inputSamples_lfdma4=ifft(inputSamples_ifdma2); else inputSamples_lfdma1(1:SP.inputBlockSize)=inputSymb ols_freq1; inputSamples_lfdma2(1:SP.inputBlockSize)=inputSymb ols_freq2; inputSamples_lfdma3=ifft(inputSamples_lfdma1); inputSamples_lfdma4=ifft(inputSamples_lfdma2); 
end
TxSamples_lfdma1= [inputSamples_lfdma3(numSymbols-SP.CPsize+1:numSymbols) inputSamples_lfdma3]; TxSamples_lfdma2 = [inputSamples_lfdma4(numSymbols-SP.CPsize+1:numSymbols) inputSamples_lfdma4];
RxSamples_lfdma11 = filter(h1, 1, TxSamples_lfdma1); % Multipath Channel
RxSamples_lfdma12= filter(h2, 1,TxSamples_lfdma2 ); % Multipath Channel
RxSamples_lfdma21= filter(h3, 1,TxSamples_lfdma1 ); % Multipath Channel
RxSamples_lfdma22= filter(h4, 1,TxSamples_lfdma2 ); % Multipath Channel
 
tmpn = randn(2,numSymbols+SP.CPsize);
complexNoise = (tmpn(1,:) + 1i*tmpn(2,:))/sqrt(2);
noisePower =(10^(-SP.SNR(n)/10));
rx1=RxSamples_lfdma11+RxSamples_lfdma12+sqrt(noise Power/Q)*complexNoise ;
rx2= RxSamples_lfdma21+ RxSamples_lfdma22+sqrt(noisePower/Q)*complexNoise;
RxSamples_ifdma1= rx1.*exp((-1i*2*pi*SP.ep1/(numSymbols))*(-SP.CPsize:(numSymbols-1)));
RxSamples_ifdma2= rx2.*exp((-1i*2*pi*SP.ep1/(numSymbols))*(-SP.CPsize:(numSymbols-1)));
rx1_ = rx1(SP.CPsize+1:numSymbols+SP.CPsize);
rx2_ = rx2(SP.CPsize+1:numSymbols+SP.CPsize);
Y_lfdma11=fft(rx1_,SP.FFTsize);
Y_lfdma22=fft(rx2_,SP.FFTsize);
if SP.sucariermapping=='IFDMA'
Y_lfdma1=Y_lfdma11(1+SP.subband:Q:numSymbols);
Y_lfdma2=Y_lfdma22(1+SP.subband:Q:numSymbols);
H_eff11=H_channel11(1+SP.subband:Q:numSymbols);
H_eff12=H_channel12(1+SP.subband:Q:numSymbols);
H_eff21=H_channel21(1+SP.subband:Q:numSymbols);
H_eff22=H_channel22(1+SP.subband:Q:numSymbols);
else
Y_lfdma1=Y_lfdma11(1:SP.inputBlockSize);
Y_lfdma2=Y_lfdma22(1:SP.inputBlockSize);
H_eff11=H_channel11(1:SP.inputBlockSize);
H_eff12=H_channel12(1:SP.inputBlockSize);
H_eff21=H_channel21(1:SP.inputBlockSize);
H_eff22=H_channel21(1:SP.inputBlockSize);
end
A1=diag(H_eff11);
A2=diag(H_eff12);
A3=diag(H_eff21);
A4=diag(H_eff22);
AT=[A1 A2;A3 A4];
alpha_1=0.1;
alpha_2=0.1;
c1=A3*inv(A1);
c2=A2*inv(A4);
%ZF DETECTOR
if SP.detection_type=='ZFE'
C=inv(AT);
Y_lfdma33=( C*[Y_lfdma1,Y_lfdma2].').';
elseif SP.detection_type=='RZF'
C=inv(AT'*AT+1/10^(SP.SNR(n)/10)*eye(2*SP.inputBlockSize))*AT';
Y_lfdma33=(C*[Y_lfdma1,Y_lfdma2].').';
end 
EstSymbols_lfdma=zeros(1,2*SP.inputBlockSize);
EstSymbols_lfdma(1:2:end)=ifft(Y_lfdma33(1:end/2));
EstSymbols_lfdma(2:2:end)=ifft(Y_lfdma33(1+end/2:end));
demodata_lfdma=qamdemod(EstSymbols_lfdma,M);
 
Y_ofdmaC=I1.'*demodata_lfdma.'; 
end 
[~,ber_ofdm(k)]=biterr(data1,Y_ofdmaC); 
BER_ofdm(n) =mean(ber_ofdm);
end 
semilogy(SP.SNR,BER_ofdm,'k--s');
legend('SM SC-FDMA')
xlabel('SNR (dB)'); ylabel('BER'); 
title('MMSE Equalization,QAM')
axis([0 35 1e-4 1 ]) 
grid

 
Last edited by a moderator:

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top