--------------------------------------------------------------------------------
hi guys
I'm a final year student, in engineering.
i've just signed up to this forum. Hope all is good. i'd appreciate any help.
I have a piece of matlab code which used to work like last year. but i am having some trouble with it now.
Before i f i entered values for theta0 and thetai. in the figures produced the main beam would move to theta0 value and a null placed for thetai value.
doing this now moves the beam but not to the values i want to.
for instance if i type in theta0=10; and thetai=50; the main beam moves in the negative direction by some other value. plz help me solve this problem. If you copy and paste this in matlab u'll see what i mean.
thanks for n e replies
%--------------------------------------------------------------------------------------------------------
% CODE FOR IMPLEMENTATION OF LMS ALGORITHM FOR DIRECTING
% BEAM TOWARDS THE DESIRED USER IN THE PRESENCE OF INTERFERERS
%---------------------------------------------------------------------------------------------------------
function arrayfact = lms_alg(K,d,lamda,f1,f2,theta0,thetai,SNR,SIR,Ni,no_samples)
K=8;
lamda=1;
d=lamda/2;
f1=0.1;
f2=0.23;
theta0=10;
thetai=50;
SNR=10;
SIR=5;
Ni=1;
no_samples=1000;
%--------------------------
%Variable Declaration
%--------------------------
conv_factor = 0.0011;kap = (2*pi)/lamda;
%--------------------
%Generating x(t)
%--------------------
alpha1 = kap*d*sin(theta0);
index1 = 0:K-1;
vtranspose = exp(j*(index1)*alpha1);
%----------------------------------------------------
%Generation of signal with Signal Power = 1
%----------------------------------------------------
index2 = 1:no_samples;
signal = sqrt(2)*cos(2*pi*f1*index2); % A = 1
%----------------------------------
%Addition of Gaussian noise
%----------------------------------
sig_noisepower = 1/(10^(SNR/10));
sig_noise = randn(1,no_samples);
sig_noise = sqrt(sig_noisepower)*sig_noise;
%-------------------------------------------------
%Generating Signal corrupted with Noise
%-------------------------------------------------
s = signal+sig_noise;
%-----------------------------------------------------------
%Generating Inteferer with Signal Power = A^2/2
%----------------------------------------------------------
for index3 = 1:Ni
alpha2 = kap*d*sin(thetai(index3));
ntranspose = exp(j*(index1)*alpha2);
interferer = cos(2*pi*f2*index2);
%-----------------------------------------------------------
%Generating Inteferer with Signal Power = A^2/2
%-----------------------------------------------------------
interferer = cos(2*pi*f2*index2);
int_noisepower = 1/(10^(SIR(index3)/10));
int_noise = sqrt(2*int_noisepower);
%-------------------------------------------------------------------------------
%Generating Interferer Signal multiplied with respective amplitude
%-------------------------------------------------------------------------------
u = int_noise*interferer; % Signal = Acos(wt)
end
%-------------------------------------
%Generating the actual signal
%-------------------------------------
signal_vector = [];
interferer_vector = [];
for temp = 1:no_samples
signal_vector = [signal_vector s(temp).*vtranspose'];
interferer_vector = [interferer_vector u(temp).*ntranspose'];
end
x = signal_vector+interferer_vector;
%------------------------------
%LMS Algorithm
%------------------------------
curr_wt = zeros(K,no_samples+1);
lms_error = zeros(1,no_samples);
updated_signal = zeros(1,no_samples);
for index4 = 1:no_samples
updated_signal = x(:,index4)'*curr_wt(:,index4);
lms_error(index4) = ((s(1,index4))- (x(:,index4)'*curr_wt(:,index4)));
curr_wt(:,index4+1)=curr_wt(:,index4)+(conv_factor.*lms_error(index4)*x(:,index4));
end
%-------------------------------------------------
%Plots (calling the function “arrayplot)
%--------------------------------------------------
figure;
plot([1:no_samples],abs(lms_error));
xlabel('Time');ylabel('LMS Error');
title('LMS Error Variation over time');
grid on
count = no_samples+1;
arrayplot(K,d,lamda,curr_wt,count,no_samples);
%------------------------------------------------------------------------
% Function to plot & generate the Array Factor with weights
%------------------------------------------------------------------------
function [arrfact] = arrayplot(K,d,lamda,curr_wt,count,no_samples)
%Variable Declaration
% K = No. of Array elements
% d = Inter-element spacing
kap = 2*pi/lamda;
l = 1;
for index = 1:length(count)
N = 2*no_samples;
wt = curr_wt(:,count(index));
arrfact = zeros(1,N*2+1);
for theta = -pii/Ni
n = 0:K-1;
v = exp(j.*n*kap*d*sin(theta));
arrfact(l) = wt'*v';
l = l+1;
end
arrfact = arrfact/max(arrfact);
theta = -pii/Ni;
theta = theta(N/2:3*N/2); % Plot from -90->90
arrfact = arrfact(N/2:3*N/2);
%Plots
figure;
polar(theta,abs(arrfact));
grid on;
title('Polar Plot of Array Factor');
figure;
plot(theta*180/pi,20*log10(abs(arrfact)));
grid on;
title('Rectangular Plot of Array Factor');
xlabel('theta(deg)');
ylabel('|Array Factor|');
axis([-90 90 -30 0]);
end