Lokalizace polohy zdroje zvuku Cíl: Určit polohu zdroje zvuku na základě vyhodnocení signálů zachycených mikrofonním polem Mikrofonní pole Mikrofonní pole si lze představit jako jeden mikrofon nebo soustavu mikrofonů, ze kterých získáváme informace. Tyto informace jsou podle různých potřeb zpracovány. V souvislosti s různými požadavky musí být mikrofonní pole správně navrženo. Jestliže chceme lokalizovat zdroj zvuku, pak musíme znát polohu jednotlivých mikrofonů. Právě pro případ lokalizace se mikrofony nejčastěji umísťují do pravidelného geometrického útvaru. Tyto útvary můžeme rozdělit do tří skupin: Lineární – všechny mikrofony leží na jedné přímce a úhel určení zdroje je 0° až 180°.
Rovinné – mikrofony leží v jedné rovině a jejich uspořádání je nejčastěji kruhové nebo pravoúhlé. Takto rozmístěné mikrofony nám mohou poskytnout informaci o celém 2-D prostoru.
Prostorové – toto uspořádání umožňuje nejen získání azimutu, ale zároveň i elevace. Díky znalosti těchto důležitých informací můžeme následně získat informaci o poloze v 3-D prostoru.
Problémy: zvuk je širokospektrální, v místnostech vzniká mnohacestné šíření, signály i prostředí jsou velmi nestacionární, šum se velmi blíží svými spektrálními vlastnostmi řeči.
Metody lokalizace Beamforming Beamformer je (přeloženo do češtiny) tvarovač a technika Beamforming tedy vyplývá z tvarování paprsku mikrofonového pole. Primární funkcí tvarovače je propouštění signálů v určitém směru a v jiném směru je tlumit. Jestliže je energie dopadající na hlavní svazek vysoká, tvarovač ji propustí. Na obrázcích níže jsou uvedeny příklady charakteristik tvarovače a to jak v kartézské soustavě, tak v polárních souřadnicích.
High resolutions spectral estimation Metody z této kategorie jsou založeny na prostorové spektrální korelační matici signálů přicházejících na senzory (mikrofony). O této matici většinou nemáme žádné informace, takže musí být vytvořena z pozorovaných dat. Matici vytvoříme pomocí průměrování signálů přes určitý interval, ve kterém se předpokládá, že signál i šum jsou stacionární a přepokládá se, že jejich parametry (v tomto případě umístění) jsou stálé.
Time Differention of Arrival (TDOA) TDOA (Time Differention of Arrival) je metoda měření časových rozdílů v příchodech signálů. Lokalizační metoda je založena na zjištění časového zpoždění mezi jednotlivými mikrofonovými páry, které jsou od sebe vzdáleny o známou délku. Díky těmto zpožděním a ze znalosti rozložení mikrofonů se stanoví hyperbolické křivky, které se protnou v optimálním bodě.
Hyperbolu je možné popsat její definicí: množina všech bodů v rovině o daném rozdílu vzdáleností od dvou pevných ohnisek. Rovnici hyperboly je možno popsat vzorcem:
Kde: a – je reálná poloosa hyperboly, 𝑎 =
𝑐.𝜏 12 2
b – je imaginární poloosa hyperboly 𝑏 = 𝑒 2 − 𝑎2 e – je délková výstřednost hyperboly, což je polovina vzdálenosti stanic ϒ – je úhel asymptoty, tg(ϒ) = b/a F1 a F2 – jsou ohniska hyperboly, což jsou stanoviště přijímačů
Přesný a robustní odhad rozdílu příchodu signálu na jednotlivé senzory je klíčem k efektivní lokalizaci. Přesný odhad je ztěžován dvěma problémy. První problém je způsoben šumem na pozadí a druhý problém je dán mnohocestným šířením signálu, které vzniká např. v místnostech nebo v zástavbě. Je patrné, že metoda TDOA je metodou dvoukrokovou. V prvním kroku se určí časový rozdíl v příchodu signálu mezi jednotlivými mikrofony, ve druhém kroku se vypočítá poloha zdroje zvuku na základě znalosti geometrie rozložení mikrofonů.
Určení rozdílů ve zpožděních v časové oblasti určíme jeden mikrofon jako referenční vstupní signál může být bipolární, proto bude před následnou detekcí umocněn a vznikne unipolární signál
Na nástupné hraně umocněného vstupního signálu detekujeme okamžik náběhu 1.2
1
0.8
0.6
0.4
0.2
0
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8
2 6
x 10
je potřeba nastavit detekční úroveň na určitou předpokládanou hodnotu napětí a v případě, kdy bude vstupní signál větší, než detekční úroveň, zaznamená se index, na kterém je vstupní signál roven detekční úrovni. Jestliže se hodnoty detekční úrovně a amplitudy vzorku nerovnají, bude vybrán vzorek, jehož amplituda je nejblíže detekční úrovni.
Takto detekujeme jednotlivé okamžiky i na ostatních mikrofonech.
amplituda [-]
amplituda [-]
amplituda [-]
amplituda [-]
Indexy odpovídající časovým okamžikům dosadíme do vztahu, jehož výsledkem budou jednotlivá zpoždění určená pro další zpracování. mikrofon1 5 0 -5
0
0.2
0.4
0.6
0.8
1 1.2 vzorek [-]
1.4
1.6
1.8
2 6
x 10
mikrofon2 5 0 -5
0
0.2
0.4
0.6
0.8
1 1.2 vzorek [-]
1.4
1.6
1.8
2 6
x 10
mikrofon3 5 0 -5
0
0.2
0.4
0.6
0.8
1 1.2 vzorek [-]
1.4
1.6
1.8
2 6
x 10
mikrofon4 5 0 -5
0
0.2
0.4
0.6
0.8
1 1.2 vzorek [-]
clc clear all; close all; % načtení zadaných naměřených dat load( 'telocvicna_200ks_3.mat');
% vykreslení dat na jednotlivých mikrofonech figure subplot(4,1,1) ,plot(ch(:,1)); title ('mikrofon1'); xlabel ('vzorek [-]') ylabel ('amplituda [-]'); subplot(4,1,2) ,plot(ch(:,2)); title ('mikrofon2'); xlabel ('vzorek [-]') ylabel ('amplituda [-]'); subplot(4,1,3) ,plot(ch(:,3));
1.4
1.6
1.8
2 6
x 10
title ('mikrofon3'); xlabel ('vzorek [-]') ylabel ('amplituda [-]'); subplot(4,1,4) ,plot(ch(:,4)); title ('mikrofon4'); xlabel ('vzorek [-]') ylabel ('amplituda [-]'); %vykreslení kanálů přes sebe figure plot(ch); title ('všechny kanály přes sebe'); xlabel ('vzorek [-]') ylabel ('amplituda [-]'); fs=200e3; %vzorkovací frekvence v_c=3.3152e2; % rychlost zvuku AA=spectrogram(ch(:,1),512,256,512,fs,'yaxis'); %spectrogram
a2ch=ch.^2; %umocnění signálu na druhou [rows cols]=size(a2ch); %alokace místa prah=.05; % nastavení detekční úrovně for ii = 1:cols norma2ch(:,ii)=a2ch(:,ii)/max(a2ch(:,ii)); %normování signálu nn(:,ii)=norma2ch(:,ii)-prah; %odečtení prahu od normovaného signálu end % % % % %
figure plot(norma2ch); title ('bipolární normovaný signál'); xlabel ('vzorek []') ylabel ('amplituda []');
for jj= 1:cols for ii = 1:1:length(nn(:,jj)) if nn(ii,jj)>0 prahXX(jj)=ii; break end end end
Pro další zpracování je vhodné vypočítat zpoždění mezi jednotlivými mikrofony zp1of = [prahXX(1),prahXX(1),prahXX(1),prahXX(2),prahXX(2),prahXX(3)]; zp2of = [prahXX(2),prahXX(3),prahXX(4),prahXX(3),prahXX(4),prahXX(4)]; zp=zp1of-zp2of; %výpočet zpoždění mezi jednotlivými mikrofony zp=zp*(1/fs)*v_c;%přepočet na metry
Určení časového zpoždění pomocí korelace signálů signál získaný na i-tém mikrofonu zapsat jako konvoluci
Kde: τi – je čas šíření gi – je odezva kanálu mezi zdrojem a i-tým mikrofonem na akustický impulz vn – je aditivní šum K určení časového zpoždění τ = τi - τj mezi dvěma mikrofony i a j můžeme spočítat obecnou korelační funkci
Určení jednotlivých zpoždění mezi mikrofonními páry se provede následovně.
Jeden mikrofon bude sloužit jako referenční a k němu budou vztaženy jednotlivé korelační funkce. function [ kor ] = korel( data ) ch=data; % korelace signálu na prvním kanálu se všemi kor(:,1)=xcorr(ch(:,1),ch(:,1),'coef'); kor(:,2)=xcorr(ch(:,1),ch(:,2),'coef'); kor(:,3)=xcorr(ch(:,1),ch(:,3),'coef'); kor(:,4)=xcorr(ch(:,1),ch(:,4),'coef'); % kor(:,5)=xcorr(ch(:,2),ch(:,3),'coef'); % kor(:,6)=xcorr(ch(:,2),ch(:,4),'coef'); % kor(:,7)=xcorr(ch(:,3),ch(:,4),'coef');
end
Korelace mezi signálem příchozím na referenční mikrofon a signálem příchozím na jiný mikrofon v mikrofonovém poli, bude mít maximum vzdálené o určitý počet prvků (vzorků signálu). Pro další zpracování je vhodné vypočítat zpoždění mezi jednotlivými mikrofony function [ zp ] = vyp_zpozdeni( korelace ) for i=1:4; [maxy1oh(i) maxx1oh(i)]=max(korelace(:,i)); end zp1of = [maxx1oh(1),maxx1oh(1),maxx1oh(1),maxx1oh(2),maxx1oh(2),maxx1oh(3)];
zp2of = [maxx1oh(2),maxx1oh(3),maxx1oh(4),maxx1oh(3),maxx1oh(4),maxx1oh(4)]; zp=zp1of-zp2of; end
Použití jednotlivých funkcí %výpočet zpoždění pomocí korelace chkor = korel(ch); zpchor = vyp_zpozdeni(chkor); zpchor=zpchor*(1/fs)*v_c;%přepočet na metry
Stejnou korelační metodu můžeme uplatnit i na umocněný signál %výpočet zpoždění pomocí korelace umocněného signálu chkor2 = korel(a2ch); zpchor2 = vyp_zpozdeni(chkor2); zpchor2=zpchor2*(1/fs)*v_c;%přepočet na metry
Výpis a uložení jednotlivých rozdílů časů příchodu signálu pomocí všech metod %výpis vypočtených zpoždění do Command Window fprintf('prah \t\t\t%4.2f %4.2f %4.2f %4.2f %4.2f %4.2f\n', zp) fprintf('vs sig \t\t\t%4.2f %4.2f %4.2f %4.2f %4.2f %4.2f\n', zpchor) fprintf('mocnina vs sig \t\t\t%4.2f %4.2f %4.2f %4.2f %4.2f %4.2f\n', zpchor2) %uložení jednotlivých zpoždění do souboru delay1 save ('delay1','zp','zpchor','zpchor2');
Předností korelační metody je fakt, že při výskytu bílého nekorelovaného šumu se nezmění pozice maxima výsledné korelační funkce. Nevýhoda této metody spočívá v tom, že je potřeba zpracovávat velmi podobné signály, které jsou z pohledu zpracování akustického signálu širokopásmové.