انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کاهش دادن زمان اجرای برنامه در متلب

کاهش دادن زمان اجرای برنامه در متلب

#1
سلام. من یک برنامه در متلب نوشتم ولی اجرای این برنامه خیلی خیلی طول میکشه مثلا یک بار که Run کردم بعد از گذشت یک روز همچنان اجرای برنامه ادامه داشت و من هم کنسل کردم. چه تغییراتی باید در برنامه ایجاد کنم که سریع تر به نتیجه برسه؟ سوال دوم این که وقتی سیستم در حالت Sleep هست برنامه همچنان اجرا میشود یا تا وقتی سیستم از حالت Sleep خارج بشه اجرای برنامه متوقف میشه؟
%% Initialization
clc
clear all
close all
tau_0 = 2e-3; % channel delay spread (maximum channel delay) (sec)
Nu_0 = 10; % channel dopler spread (Hz)
Bandwidth = 5e3; % channel bandwidth (Hz)
% N = 64; % number of subcarriers
% M = 9; % number of timeslots
Ts = .2e-3; % sampling time(1/B)(sec)
N0 = 32;
K0 = 8;
M_G = 5;
K_G = 128;
Lh = 3200;
% Wf = abs(pi*1e-3*sin(pi*1e-3*f));
% Wt(t) = abs(40*pi*sin(40*pi*t));
% N_message = 100;
channel_iterration = 2000;
a = .5;
%%
% Phi_T Matrix
Phi_T = zeros(Lh,Lh);
for a = 1:Lh
   if abs(a-(Lh/2)) >= N0
       Phi_T(a,a) = abs(40*pi*sin(40*pi*a));
   end
end
%%
% Phi_F Matrix
Phi_F = zeros(Lh,Lh);
for b = 1:Lh
   if abs(b-(Lh/2)) >= K0
       Phi_F(a,a) = abs(pi*1e-3*sin(pi*1e-3*b));
   end
end
%%
% B Matrix
B1 = zeros((Lh/2)+1,(Lh/2)+1);
B11 = fliplr(B1);
for d = 1SadLh/2)+1
   B11(d,d) = 1;
end
B1 = fliplr(B11);
B2 = [zeros((Lh/2)-1,1),eye((Lh/2)-1),zeros((Lh/2)-1,1)];
B = [B1;B2];
%%
% W Matrix (FFT matrix)
W = zeros(Lh,Lh);
for a1 = 0:Lh-1
   for b1 = 0:Lh-1
       W(a1+1,b1+1) = (1/sqrt(Lh))*exp(((-1)*(1i)*2*pi*a1*b1)/Lh);
   end
end
%%
% H_T Matrix
H_T = ones((Lh/2)+1,1);
H_T = H_T./sqrt(H_T'*H_T);
% crit_P_T
crit_P_T = H_T'*B'*W*Phi_T*W'*B*H_T;
%%
% H_F Matrix
h_F = ones((Lh/2)+1,1);
H_F = fft(h_F);
H_F = H_F./sqrt(H_F'*H_F);
% crit_P_F
crit_P_F = H_F'*B'*Phi_F*B*H_F;
%%
% Psi Matrix
Psi1 = ((1/crit_P_F).*Phi_F+(1/crit_P_T).*(W*Phi_T*W'));
Psi_I = B'*Psi1*B;
% H_I Matrix
[eig_vec_I,eig_val_I] = eig(Psi_I);
min_eig_val_I = min(diag(eig_val_I));
[row_I,column_I] = find(eig_val_I == min_eig_val_I);
H_I = eig_vec_I(:,column_I);
% A Matrix
A = zeros(Lh,Lh);
for l = 1:K_G
   for n = 1:M_G
       G = zeros(Lh,Lh);
       for e = 1:Lh
           G(e,e) = cos(2*l*pi*K0*(e-(Lh/2))+(l+n)*(pi/2));
       end
       if n >= 0
           C = [zeros(n,Lh);eye(Lh-n),zeros((Lh-n),n)];
       else
           C = [zeros((Lh-n),n),eye(Lh-n);zeros(n,Lh)];
       end
       A = A + G*C*W'*B*H_I*H_I'*B'*W*C'*G';
   end
end
% crit_P_I
crit_P_I = H_I'*B'*W*A*W'*B*H_I;
%% Algorithm
H = H_I; % The Initial value of vector H
for i = 1:15
   A = zeros(Lh,Lh);
   for l = 1:K_G
       for n = 1:M_G
           G = zeros(Lh,Lh);
           for e = 1:Lh
               G(e,e) = cos(2*l*pi*K0*(e-(Lh/2))+(l+n)*(pi/2));
           end
           if n >= 0
               C = [zeros(n,Lh);eye(Lh-n),zeros((Lh-n),n)];
           else
               C = [zeros((Lh-n),n),eye(Lh-n);zeros(n,Lh)];
           end
           A = A + G*C*W'*B*H*H'*B'*W*C'*G';
       end
   end
   Psi = B'*((1/crit_P_I).*(W*A*W')+(1/crit_P_F).*Phi_F+(1/crit_P_T).*(W*Phi_T*W'))*B;
   [eig_vec,eig_val] = eig(Psi);
   min_eig_val = min(diag(eig_val));
   [row,column] = find(eig_val == min_eig_val);
   H_hat = eig_vec(:,column);
   H = a.*H_hat+(1-a).*H;
end
پاسخ
 سپاس شده توسط شماره مجازی امارات


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان