«« ( Date ) »» // «« ( Thread ) »» // csidc - 2004

FIR

by Dusan Grujic
četvrtak, 26. februar 2004 - 11:44.

Cao.

Koeficijente Hilbertovog transformatora ces dobiti iz (u Matlabu):

Nr=10;
b=remez(Nr,[0.05 0.95],[1 1],'h');

Ispisi ove koeficijente u fajl jer po defaultu Matlab ispisuje samo 4-5 decimala. U nizu b se nalaze koeficijenti - ukupno 11. Nr je red filtra. Mora da bude paran broj (tj. broj koeficijenata je neparan). Ostavi mogucnost promene reda filtra. Matrica y je matrica koja se prosledjuje funkciji obrada.

U Matlabu filtriranje izgleda ovako:

   iq=filter(b,1,y(:,ii));

sto je ekvivalentno sa:

   niz=y(:,ii);
   D=zeros(1,length(b));
   IQ=zeros(length(niz),1);
   for jj=1:length(niz)
       D=[niz(jj) D(1:(length(D)-1))];
       for kk=1:length(b)
           IQ(jj)=IQ(jj)+D(kk).*b(kk);
       end
   end

Posle ovoga u nizu IQ se nalaze filtrirani podaci (podaci u kvadraturi = iq). (operator .* znaci mnozenje clan po clan, tj. prvi sa prvim, drugi sa drugim itd.)

Kasnjenje filtra (u semplovima) je Nr/2 (o ovome se mora voditi racuna pri racunanju daljine!), pa je potrebno zakasniti originalne podatke:

ip=[zeros(1,Nr/2) y(1:length(iq)-Nr/2,ii).'].';                 - ovo su podaci u fazi

Kompleksni podaci su:

   y(:,ii)=ip+j*iq;

   qq=0:Nsam-1;

    y(:,ii)=y(:,ii).*exp(-j*2*pi*qq/4).';
 

i oni se dalje obradjuju u minvar. Ovo je potrebno izvrsiti za svaki mikrofon posebno. Cela procedura izgleda ovako:

%Obrada podataka sa sonara
function [Z,Q]=obrada(n,dl,f,fs,tping,snr,K,nth,y,nsb)
c=350;
%Broj blokova
[Nsam,Nsen]=size(y);
nblock=ceil(Nsam/nsb);
Q=zeros(nblock,nth);
qq=0:Nsam-1;

%Remezova aproksimacija Hilbertovog transformatora
Nr=10;
b=remez(Nr,[0.05 0.95],[1 1],'h');

for ii=1:Nsen
   iq=filter(b,1,y(:,ii));                         %Funkcija Matlaba

%Rucno izracunavanje komponentne u kvadraturi

   niz=y(:,ii);
   D=zeros(1,length(b));
   IQ=zeros(length(niz),1);
   for jj=1:length(niz)
       D=[niz(jj) D(1:(length(D)-1))];
       for kk=1:length(b)
           IQ(jj)=IQ(jj)+D(kk).*b(kk);
       end
   end
           
%Komponenta u fazi (zakasnjeni podaci)

   ip=[zeros(1,Nr/2) y(1:length(iq)-Nr/2,ii).'].';
%Kompleksni podaci

   y(:,ii)=ip+j*iq;

%Spustanje u osnovni opseg

   y(:,ii)=y(:,ii).*exp(-j*2*pi*qq/4).';

end

%Ovo je isto u svim verzijama

for ii=1:floor(length(y)/nsb)
    %Dolazni signali u ii-tom bloku
    q=minvar(dl,nth,K,y((ii-1)*nsb+1:ii*nsb,:));
    Q(ii,:)=q;
    z=music3(dl,nth,K,y((ii-1)*nsb+1:ii*nsb,:));
    Z(ii,:)=z;
end


--

___________________________________________________________
Sign-up for Ads Free at Mail.com
http://www.mail.com/?sr=signup