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.

Script of power control in Matlab. please help me to solve the error for this script.

Status
Not open for further replies.

nur_yusof

Newbie level 3
Joined
Oct 8, 2015
Messages
4
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
43
hai.there are script of power control in matlab. can someone correct the error of this script. i want to simulated the power algorithm in MIMO. there like havng problem at fading.

Code:
[CODE]clear all;
clc;
format long;
%------ Parameter-parameter ------
K=10;                                                   % jumlah pengguna
c_light = 3E8;                                          % cepat rambat cahaya (m/s)
R = 60;                                                 % rate simbol(ksps); QPSK=1/2 bitrate
T = 1/(R*1E3);                                          % durasi simbol (s)
f = 1.8;                                                % carrier frequency (GHz)
user = 1;                                               % user yang diamati

v=[0 0 0 0 0 0 0 0 0 0];
for k=1:K
fd(k) = (v(k)*1E3/3600)*f*1E9/c_light;                  % Doppler freq tiap user(Hz)
end

N=64;                                                   % processing gain
Tc = T/N;                                               % Durasi Chip (s)
Cps = 2560;                                             % chip per slot interval power control
                                                        % 3.84Mcps*0.667ms
B = Cps./N;                                             % simbol per timeslot (40)
SNR_dB = 7;                                             % operating SNR dalam dB (AWGN)
SNR = 10.^(SNR_dB/10);
Tp = 5000;                                              %Jumlah pengamatan
for loop = 1:10                                         %memulai loop
    
%------ Membangkitkan measurement error ------
% Jika yang divariasikan tiap loop adalah sir target:
s_dev_dB = 1;                                           % standar deviasi estimation error
me_error_dB=normrnd(0,s_dev_dB,K,Tp);
% Jika yang divariasikan tiap loop adalah estimation error:
%s_dev_dB = [1 2 3 4 5 6 7 8 9];
%me_error_dB=normrnd(0,s_dev_dB(1,loop),1,Tp);

for k = 1:K
sir_target_dB(k) = 15-0.5.*loop;
sir_target(k) = 10.^(sir_target_dB(k)./10);
end
sir_target_dB(loop) = 2.*loop+1;
sir_target(loop) =10.^(sir_target_dB(user)./10);

Tp = loop.^2+500;
%------ Membangkitkan Rayleigh fading channel untuk K users ------
a = zeros(B*Tp,K);
for k = 1:K
a(1,k) = fading(B*Tp,fd(k),T);
end
sir_reg=ones(K,4);                                      % untuk delay sampai 4Tp

%------ gain awal power control ------
for k=1:K
gain(k) =1;                                             % gain awal 1 watt
end
sir_total = 0;
be_total = 0;
step_size_dB = 0.5;
step_size = 10.^(step_size_dB/20);

%------ mulai loop TPC ------
for tp = 1:Tp                                               % memulai sir measurement dari 1 sampai Tp

%------ Pembangkitan simbol qpsk ------
s_baseb = sign(randn(B,K))+ i.*sign(randn(B,K));
s = s_baseb./sqrt(2);
for k=1:K
s(:,k) = gain(k).*s(:,k);                                   % mengendalikan mobile Tx power per slot
end

%------ efek fading ------
s_fade = s.*abs(a(1+(tp-1)*B:B+(tp-1)*B,:));

%------ Pembangkitan kode user dan aux ------
c = sign(randn(N*B,K)) + i.*sign(randn(N*B,K));             % NB chips/slot
c = c./sqrt(2);
c_aux = sign(randn(N*B,1)) + i.*sign(randn(N*B,1));
c_aux = c_aux./sqrt(2);

%------ membangkitkan AWGN ------
noise = randn(N,B) + i.*randn(N,B);                         % Amplitudo mean = 0, var = 1
noise = noise./sqrt(2);                                     % Amplitudo ternormalisasi
awgn= sqrt(1/SNR).*noise;                                   % obtain required SNR

%------ spreading ------
for b = 1:B                                                 % spread tiap simbol dgn N chip
x_symbol(:,b) = c(1+(b-1)*N:N+(b-1)*N,:)*s_fade(b,:).';
end

%------ Penambahan noise AWGN ------
r = x_symbol + awgn;                                        % sinyal plus AWGN (N x B)

%------ despread dengan aux sequence ------
for b=1:B
y_a(b) = c_aux(1+(b-1)*N:N+(b-1)*N)'*r(:,b); % hasil: matrix 1 x B
end
ya2av = mean(abs(y_a).^2); % estimasi MAI dengan aux

%------ despread oleh user yang sesuai ------
y_k = zeros(B,K);
for k =1:K
for b=1:B
y_k(b,k) = c(1+(b-1)*N:N+(b-1)*N,k)'*r(:,b);
end

%------ SIR estimasi dengan aux spread sequence ------
% yk2av(k) = mean(abs(y_k(:,k)).^2);
% ykav2(k) = mean(abs(y_k(:,k))).^2;
% G(k) = ykav2(k)/ya2av;
% sir(k)=G(k)/(1-G(k)/N); %SIR aux
end

%------ Mendapatkan nilai SIR true ------
for k=1:K
fade(k)=mean(abs(s_fade(:,k))).^2;
end

for k=1:K
sir_true(k)=fade(k).*N./(sum(fade)-fade(k)+1./SNR);
sirtrue_dB(k) = 10.*log10(sir_true(k));
end


%------ SIR Estimasi dengan estimation error ------
% for k = 1:K
% sir_dB(k)=sirtrue_dB(k) + me_error_dB(k,tp);
% sir(k) = 10.^(sir_dB(k)./10);
% end

%------ Efek feedback delay ------
% for k=1:K
% sir_reg(k,:) = [sir_reg(k,(2:end)) sir(k)];
% sir(k) = sir_reg(k,3); % delay 2 tp
% sir_dB(k) = 10.*log10(sir(k));
% end
%------ statistik estimation error ------
%if tp>500
% me_error_dB(tp,1) = sir_dB(user) - sirtrue_dB(user);
%end

%------ Probability of False Power Control Command (PFC) ------
%if tp>200
% if sign(sir_target_dB(user) - sir_dB(user)) ==
%sign(sir_target_dB(user) - sirtrue_dB(user))
% PFC_tot=PFC_tot;
% else
% PFC_tot=PFC_tot+1;
% end
%end

%------ Statistik Power Control Error (PCE) ------
%if tp>500
% PCE_dB(tp,1) = sirtrue_dB(user) - sir_target_dB(user);
%end

%------ Power Control ------
for k=1:K
if sir_true(k) < sir_target(k)
gain(k) = gain(k).*step_size;
else
gain(k) = gain(k)./step_size;
end
end

%Variable Step size (q=4)
for k=1:K
err_dB(k) = sirtrue_dB(k)-sir_target_dB(k);
index(k)=err_dB(k)./step_size_dB;
if index(k) < -3.5
gain(k) = gain(k).*10.^(4.*step_size_dB./20);
elseif index(k) > -3.5 && index(k) < -2.5
gain(k) = gain(k).*10.^(3.*step_size_dB./20);
elseif index(k) > -2.5 && index(k) < -1.5
gain(k) = gain(k).*10.^(2.*step_size_dB./20);
elseif index(k) > -1.5 && index(k) < -0.5
gain(k) = gain(k).*10.^(step_size_dB./20);
elseif index(k) > -0.5 && index(k) < 0.5
gain(k) = gain(k).*1;
elseif index(k) > 0.5 && index(k) < 1.5
gain(k) = gain(k)./(10.^(step_size_dB./20));
elseif index(k) > 1.5 && index(k) < 2.5
gain(k) = gain(k)/(10.^(2.*step_size_dB./20));
elseif index(k) > 2.5 && index(k) < 3.5
gain(k) = gain(k)/(10.^(3.*step_size_dB./20));
elseif index(k) > 3.5
gain(k) = gain(k)/(10.^(4.*step_size_dB./20));
end
end

%------ BER dan SIR ------
I_ph = sign(real(y_k(:,user)));                             % deteksi I-phase
Q_ph = sign(imag(y_k(:,user)));                             % deteksi Q-phase
be_I = sum(abs(real(s_baseb(:,user)) - I_ph))./2;
be_Q = sum(abs(imag(s_baseb(:,user)) - Q_ph))./2;
be = be_I + be_Q;
if tp>300
sir_total = sir_total + sir_true(user);
be_total = be_total + be;
end
end % end of TPC loop
sirmerr1050dB(loop) = sir_total./(Tp-300)                    % SIR
bermerr1050dB(loop) = be_total./(2*B*(Tp-300))               % BER
%PFC = PFC_tot./(Tp-200); % PFC
%PCE(loop)=PCE;
%me_error_dB = me_error_dB(501:Tp,1);
%PCE_dB = PCE_dB (501:Tp,1);
end                                                         % akhir variasi SIR target atau STD estimation error

save sirmerr1050dB
save bermerr1050dB]
[/CODE]
 

Attachments

  • Untitled1.jpg
    Untitled1.jpg
    263.2 KB · Views: 105

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top