• No se han encontrado resultados

Principales usos de las redes sociales en la educación

This code contains the simulation of the direction of arrival sensor based on a dual 1.5 GHz and 48 GHz model. The code simulates a dual-frequency waveform at a given sampling rate and how the wave would be received at the sensor for a set number of phase config- urations for the sensor. Based on the amplitude measurements according to the phase, a direction of arrival for the signal is estimated.

%% Rotating Pair Antenna Triangulation

% This program simulates the behavior of a 2D DOA sensor with a target in

% 3D space. This version sets out to find the direction of arrival with a

% wide search first, and then narrows down to a fine search.

%% Plot Option Plot = 1;

%% Geometry setup

% [deg] Angular positions used for the sensor S1.phaselims = [0,180];

S2.phaselims = [133,137];

% Number of phase steps S1.steps = 500;

S2.steps = 1;

% Number of repetitions S1.reps = 500;

S2.reps = 1;

% [deg] Direction in longitude

%Long = 90 + 3.5260;

Long = 90 + 0.05*randn(1,1);

% [m] Location of the center of a single sensor SensLoc = [0,0,0];

TransLoc = 2*[cosd(Long+90),sind(Long+90),0]; % [m] Vector connecting the two

ST = SensLoc - TransLoc;

% [m] Distance connecting the center of the sensor to each antenna SR = 0.05;

%% Wave Properties

% [Hz] Frequency of the waves used for the wide search S1.freq = 1.4986e9;

S2.freq = 48e9;

% [Arb] Amplitude of the wave used for the wide search S1.amp = 1;

S2.amp = 1;

% [Amp] Signal to Noise ratio for the wide search S1.snr = 500;

S2.snr = 1;

% [Hz] Sample Rate of the waves S1.rate = 2e3*S1.freq;

S2.rate = 2e3*S2.freq; % [s] Duration of the waves S1.duration = 100/S1.freq; S2.duration = 100/S2.freq;

% [s] Period of the waves S1.period = 1/S1.freq; S2.period = 1/S2.freq;

% [m/s] Speed of the wave in air, found using the index of refraction Speed = 2.99792e8/1.00028;

% Number of samples simulated

S1.samplesperwave = S1.period*S1.rate; S2.samplesperwave = S2.period*S2.rate; % [m] The wavelength of each wave S1.wavelength = Speed/S1.freq;

S2.wavelength = Speed/S2.freq;

% For conviniece of comparison S = [S1,S2];

%% Vector math for first wave

% This creates the phase arrays, representing the position of each antenna

S1.phaseA = linspace(S1.phaselims(1),S1.phaselims(2),S1.steps); S1.phaseB = S1.phaseA - 180;

% This creates the vectors connecting the center of the sensor to each % antenna, for every angle specified

SAV = [SR*cosd(S1.phaseA);SR*sind(S1.phaseA);zeros(1,S1.steps)]’; SBV = [SR*cosd(S1.phaseB);SR*sind(S1.phaseB);zeros(1,S1.steps)]’; ST = CoordRepeat(ST,S1.steps);

% This creates the vectors from the transmitter to each antenna for every

% angle specified, and finds the resultant distance TA = ST + SAV; TB = ST + SBV; TAd = Magnitude(TA); TBd = Magnitude(TB); %clear ST SAV SBV TA TB %% Wave mechanics

% This section deals with the broadcast and reception of wavelengths

% This finds the minimum number of wavelengths between the transmitter and

% the receiver antennas, which determines how much of the wave should be

% simulated at each angular position - The number is arbitrary MinWavesBetween = min([min(TAd),min(TBd)])/S1.wavelength; WavesAcquired = floor(MinWavesBetween);

% This cuts the number of samples simulated down WavesToWait = floor(WavesAcquired/2);

% This determines the statrting point for each wave

WavesToWaitRA = Dist2Waves(TAd,S1.wavelength)+WavesToWait; WavesToWaitRB = Dist2Waves(TBd,S1.wavelength)+WavesToWait;

% This finds the indicies needed for acquisition RecAL = ceil(WavesToWaitRA*S1.samplesperwave+1);

RecAU = ceil((WavesAcquired+WavesToWaitRA)*S1.samplesperwave+1); RecBL = ceil(WavesToWaitRB*S1.samplesperwave+1);

RecBU = ceil((WavesAcquired+WavesToWaitRB)*S1.samplesperwave+1);

% This is the number of samples actually acquired for each position window = length(RecAL:RecAU-1); % preallocation of memory RecSigA = zeros(S1.steps,window); RecSigB = zeros(S1.steps,window); % [s] Creation of timespace t = linspace(0,S1.duration,S1.duration*S1.rate); % Easy Constant tau = 2*pi; t0 = clock;

%% Beginning of random numbers territory

for X = 1:S1.reps

tic;

% Creation of waveform

TransSig = S1.amp*sin(t*tau*S1.freq+rand()*tau);

for j = 1:S1.steps

RecSigA(j,:) = TransSig(RecAL(j):(RecAL(j) + window - 1)); end

for j = 1:S1.steps

end

% Addition of noise

RecSigA = RecSigA + (1/S1.snr)*randn(size(RecSigA)); RecSigB = RecSigB + (1/S1.snr)*randn(size(RecSigB)); % Interference - simple addition

Interfered = RecSigA + RecSigB;

% These next few lines make an amplitude measurement of the interfered

% signal and then massage the data for curve purposes Fs = S1.rate; InterferedAmp = zeros(1,S1.steps); InterferedAmpOld = zeros(1,S1.steps); InterferedAmpOld = (max((Interfered’),[],1))’; for i = 1:S1.steps; I = fft(Interfered(i,:)); I = I(1:length(Interfered(i,:))/2+1); I = I/length(Interfered(i,:)); I(2:end-1) = 2*I(2:end-1); InterferedAmp(i) = max(abs(I)); end InterferedAmp = medfilt1(InterferedAmp,3); InterferedAmp = 100*InterferedAmp/max(InterferedAmp); InterferedAmpOld = medfilt1(InterferedAmpOld,100); InterferedAmpOld = 100*InterferedAmpOld/max(InterferedAmpOld);

% These lines find the peak of the signal for a single iteration of the

% program, and records the mean and standard deviation

[dummy,GuessIndex] = max(D); if isempty(A) Guess(X) = NaN; end if ˜isempty(A) Guess(X) = S1.phaseA(B(GuessIndex)); end gaussEqn = ’a*exp(-((x-b)/c)ˆ2)’; startPoints = [1 90 1]; if Guess(X) < 45 fitcurve = fit(S1.phaseA’,InterferedAmp’,gaussEqn,... ’Start’,startPoints, ’Exclude’, S1.phaseA > 90);

elseif Guess(X) > 135

fitcurve = fit(S1.phaseA’,InterferedAmp’,gaussEqn,... ’Start’,startPoints, ’Exclude’, S1.phaseA < 90); else fitcurve = fit(S1.phaseA’,InterferedAmp’,gaussEqn,... ’Start’,startPoints); end x(X,:) = coeffvalues(fitcurve); Guessnew(X) = x(X,2); t2 = toc; Message = Progress(X,S1.reps,t2,t0); disp(Message); end % G1 = abs(mean(Guess-Long)); % G1a = std(Guess); G2 = mean(abs(Guessnew-Long)); G2a = std(Guessnew);

% SimAccuracy1 = G1; % SimPrecision1 = G1a;

SimAccuracy = G2; SimPrecision = G2a;

% disp(strcat([’The old accuracy was ’,...

% num2str(SimAccuracy1,4),char(176)]))

% disp(strcat([’The old precision was ’,...

% num2str(SimPrecision1,4),char(176)]))

disp(strcat([’The accuracy was ’,...

num2str(SimAccuracy,4),char(176)])) disp(strcat([’The precision was ’,... num2str(SimPrecision,4),char(176)])) if any(Plot) font = 16; subplot(2,1,1) hold ’off’ scatter(S1.phaseA,InterferedAmp,’*’) hold ’on’ scatter(S1.phaseA,InterferedAmpOld) p = plot(fitcurve); set(p,’LineWidth’,2)

xlabel(strcat(’Angular Position (’,char(176),’)’),’FontSize’,font) ylabel(’Amplitude (%)’,’FontSize’,font)

grid(’on’)

legend(’New Signal’,’Old Signal’,’Gaussian Fit’) axis([S1.phaselims(1),S1.phaselims(2),0,100]) set(gca,’FontSize’,font) %set(gca,’XTick’,[S1.phaselims(1):tickincrement:S1.phaselims(2)]) set(gca,’Ytick’,[0:20:100]) subplot(2,1,2) hold ’off’ histogram(Guess,20)

hold ’on’ subplot(2,1,2)

histogram(Guessnew,20)

axis([S1.phaselims(1) S1.phaselims(2) 0 S1.reps/4]) legend(’Old Method’,’New Method’)

xlabel(strcat(’Guessed Direction (’,char(176),’)’),’FontSize’,font) ylabel(’Counts’,’FontSize’,font)

set(gca,’FontSize’,font) grid(’on’)

end

% Big vectors to clear memory

clear RecSigA RecSigB t TransSig I RecAL RecAU RecBL RecBU TAd TBd

clear WavesToWaitRA WavesToWaitRB

clear Interfered x

clear SAV SBV ST TA TB

% Unneeded scalars

clear Fs gaussEqn i j MinWavesBetween Message Plot Speed startPoints

clear SR tau WavesAcquired WavesToWait window X

clear G1 G1a G2 G2a

filename = strcat(’C:\Users\Mark\Documents\MATLAB\Results\RotPairV6\’,... num2str(c(1)),’_’,... num2str(c(2)),’_’,... num2str(c(3)),’_’,... num2str(c(4)),... num2str(c(5))); save(filename)

Documento similar