90 likes | 201 Views
Ultralydposisjonering med lydkort. Prosjekt i digital signalbehandling og akustikk Inf3460 – vår ’08. Henning Vangli. Utstyr. Hardware: Et stykk 8-kanals EDIROL UA-101 USB-lydkort 6 transducere(ryggesensorer) En pc med USB Software: Lydkortdrivere MATLAB™ Egenskrevet matlabkode.
E N D
Ultralydposisjoneringmed lydkort Prosjekt i digital signalbehandling og akustikk Inf3460 – vår ’08 Henning Vangli
Utstyr • Hardware: • Et stykk 8-kanals EDIROL UA-101 USB-lydkort • 6 transducere(ryggesensorer) • En pc med USB • Software: • Lydkortdrivere • MATLAB™ • Egenskrevet matlabkode
Gjennomføring Oppgaven baserer seg på at Matlab skal kunne måle avstanden mellom flere mottagere og en sender, og ved å vite posisjonen til mottagerne kunne finne posisjonen til senderen. Dette forutsetter at Matlab klarer å starte og sende på samtlige kanaler samtidig. Dette oppnår man ved først å laste data inn i cachen på lydkortet, før man sender ett startsignal kalt ’trigger’. Dette skulle vise seg å være særdeles vanskelig å få stabilt.
I Matlab’s hjelpetekst finner jeg i ”Data Acquisition Toolbox” en ”property” jeg er helt avhengig av(grønn pil). Beklageligvis inneholder den et lite problem(rød pil):
Jeg kan derfor ikke sende en ny trigger til lydkortet før den forrige er ferdig behandlet. Dette begrenser dessverre hastigheten. Av andre begrensninger i prosjektet kan nevnes: • Liten følsomhet i inngangene gjør at bevegelsesområdet blir svært lite, og at en del av sensorene ofte faller ut. • Jeg har lagt inn korreksjon for sensortreghet ved økende støynivå, men pga liten følsomhet vil ofte støyen være høyere en signalet. • Plott i Matlab bruker mye prosesseringstid. Begrenser hastigheten, men kan slås av. • Grunnet usporadiske forsinkelser i prosessorplanlegningen og/eller buffere, blir en del av målingene nesten alltid forsinket. Dette har jeg prøvd å rette på(se neste slide).
Avstandsdeteksjon Avstandsmåling gjøres ved å finne første forekomst av en sample som er høyere enn støynivået som antas å være det høyeste blant de første 118 samplene
Posisjonsbestemmelse For å finneposjonen, brukerjeg LSQ-metoden: • % Using trilateration w/minimum squared error • noError = find(measuredDist > 0);%Finding all positive and nonzero entries • noErrorl = length(noError) %Number of assumed funtional distance measurements • A = zeros(noErrorl-1,3); • b = zeros(noErrorl-1,1); • if(noErrorl >= 3) • xyztopsq = sum((Xm(noError(noErrorl),:)).^2);%Saving comp. time by precomputing this value • disttopsq = measuredDist(noError(noErrorl))^2;%Same with this one • for(i = 1:(noErrorl-1)) • b(i) = (measuredDist(noError(i))^2) - disttopsq - sum((Xm(noError(i),:)).^2) + xyztopsq; • A(i,:) = 2.*( Xm(noError(noErrorl),:) - Xm(i,:)); • end • %Estimatingposition: • if(rank(A) < 3) • pos = lsqr(A,b,[],[],[],[],[0;0;lastpos(3)])%If a sensor that normally makes Xm non-singular fails, last found z-coordinate is used. • else • pos = lsqr(A,b) • lastpos = pos; • end • else • 'Feil i for mange målinger' • pos = [0 00] • end • end
Konklusjon Alt i alt virker programmet. Men den har fortsatt store begrensninger. Selv med 5 sensorer: