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
    263.2 KB · Views: 105

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…