Języki Modelowania i Symulacji Przetwarzanie sygnałów fonicznych Marcin Ciołek Katedra Systemów Automatyki WETI, Politechnika Gdańska 3 listopada 211
O czym będziemy mówili? 1 2
wavrecord wavplay y = wavrecord(n, F s, ch, dtype ) y = wavplay(y, F s ) N - liczba próbek F s - częstotliwość próbkowania (domyślnie 1125Hz) ch - liczba kanałów wejściowych: 1 lub 2 (mono lub stero) dtype - typ danych wejściowych (np:. int16-16 bitów na próbkę, 32768 <= y <= +32767, double - 16 bitów na próbkę, 1. <= y < +1.) Typowe częstotliwości próbkowania sygnałów audio: 8, 1125, 225, i 441 Hz
wavrecord wavplay y = wavrecord(n, Fs) y = wavplay(y, Fs) Fs = 8; % częstotliwość próbkowania t = 4; % ile sekund N = Fs*t; display('naciśnij klawisz i nagraj wyraz') pause() y = wavrecord(n,fs,'double'); %nagrywanie wavplay(y,fs) %odtwarzanie
wavrecord.7 na----sze----go.6.5.4.3 (na---sze---go).2.1 -.1 -.2 -.3.5 1 1.5 2 2.5 3 3.5 4 czas [sek]
wavrecord.1 na----sze----go.8.6.4.2 -.2 -.4 -.6 -.8 -.1.5 1 1.5 2 2.5 czas [sek]
Wykres ts = 1/Fs:1/Fs:t; h=plot(ts,y) title('na----sze----go','fontsize',18) xlabel('czas [sek]','fontsize',16) xp =.3; xk = 2.8; yp = -.1; yk =.1; axis([xp,xk,yp,yk]) text(.4,.4,'(na---sze---go)',... 'FontName','Times New Roman','FontSize',48) set(gca,'ygrid','off','fontsize',16) set(h,'linewidth',1) set(gca,'ticklength',[.1;.25])
wavrecord.1 na.8.6.4.2 -.2 -.4 -.6 -.8 -.1.5.55.6.65.7.75.8 czas [sek]
wavrecord.1 sze.8.6.4.2 -.2 -.4 -.6 -.8 -.1 1 1.5 1.1 1.15 1.2 1.25 1.3 1.35 1.4 1.45 1.5 czas [sek]
wavrecord.1 go.8.6.4.2 -.2 -.4 -.6 -.8 -.1 1.6 1.8 2 2.2 2.4 2.6 czas [sek]
głoska a.1 a.8.6.4.2 s[n] -.2 -.4 -.6 -.8 -.1 2 4 6 8 1 n [numer próbki]
Funkcja autokorelacji N r(k) = s(n)s(n + k), k =, 1, 2,... n=1 Nr = 1; r = zeros(nr,1); for k=:nr r(k+1) = s(1:ns-k)'*s(k+1:ns); end r = r./max(r);
głoska a.1 głoska "a".5 s[n] -.5 -.1 2 4 6 8 1 n [numer próbki] r[k].14.12.1.8.6.4.2 -.2 Metoda funkcji autokorelacji -.4 1 2 3 4 5 6 7 8 9 1 k [wartość przesunięcia]
głoska a.1 głoska "a".5 s[n] -.5 -.1 2 4 6 8 1 n [numer próbki] 1 Metoda funkcji autokorelacji.8.6 r[k].4.2 -.2 -.4 1 2 3 4 5 6 k [wartość przesunięcia]
głoska a.1 głoska "a".5 s[n] -.5 -.1 2 4 6 8 1 n [numer próbki] 1 Metoda funkcji autokorelacji r[k].8.6.4.2 okres T = 181 2T 3T -.2 -.4 1 2 3 4 5 6 k [wartość przesunięcia]
głoska sz.1 głoska "sz".5 s[n] -.5 -.1 5 1 15 2 25 3 35 4 n [numer próbki] 1.8.6.4 Metoda funkcji autokorelacji r[k].2 -.2 -.4 -.6 2 4 6 8 1 12 14 16 k [wartość przesunięcia]
głoska a 1 głoska "a" - przetwarzanie segmentowe z użyciem okna Hamminga.5 s[n] -.5-1 2 4 6 8 1 n [numer próbki] 1 Metoda funkcji autokorelacji.8.6 r[k].4.2 -.2 -.4 5 1 15 2 25 3 35 4 45 k [wartość przesunięcia]
model Uproszczony model generacji sygnału mowy
koder Schemat uproszczonego kodera mowy
dekoder Algorytm dekodera mowy LPC-1 wejściowy strumień danych {T, G, a 1,..., a p } synteza fragmentów sygnału s 1 (n) = Ge(n) p a p s 1 (n k), k =, 1,..., M 1 k=1 Deemfaza - tłumienie wyższych częstotliwości metoda filtracji rekursywnej typu IIR s(n) = s 1 (n) +.9375 s(n 1)
Preemfaza Uwydatnienie wyższych częstotliwości (filtracja nierekursywna FIR) s 1 (n) = s(n).9375 s(n 1).2 Sygnał oryginalny.15.1.5 s[n] -.5 -.1 -.15 -.2.7.72.74.76.78.8.82.84.86.88 t [czas].2 Po preemfazie.15.1.5 s 1 [n] -.5 -.1 -.15 -.2.7.72.74.76.78.8.82.84.86.88 t [czas]
Okno Mnożenie sygnału z oknem Hamminga o długości N = 24 próbek (w = hamming(l)) w(n) =.54.46 cos( 2πn N ) s 2 (n) = s 1 (n)w(n) 6 x 1-3 Sygnał po preemfazie 4 2 s 1 [n] -2-4 -6 56 565 57 575 58 585 n [próbki] 6 x 1-3 Po zastosowaniu okna Hamminga 4 s 2 [n] 2-2 -4 56 565 57 575 58 585 n [próbki]
Filtr traktu głosowego W algorytmie LPC-1 przyjmuje się 1 rzad wielomianu mianownika H(z) = = G A(z) = G 1 + a 1 z 1 + a 2 z 2 + a p z p = G (1 p 1 z 1 )(1 p 1 z 1 )... (1 p 5 z 1 )(1 p 5 z 1 ) Równanie czasowe filtru syntezy 1 s(n) = G e(n) a k s(n k) k=1
Filtr traktu głosowego 6 Widmo filtru traktu głosowego 5 4 S 2 3 2 1 5 1 15 2 25 3 35 4 f [częstotliwość]
Filtr traktu głosowego Obliczanie współczynników filtru traktu głosowego i wzmocnienia G R a = r a = R 1 r r(k) = N 1 k n= s 2 (n)s 2 (n + k), G = r() + p a k r(k) k=1 Równanie Yule-Walker r() r(1)... r(p 1) r(1) r()... r(p 2)...... r(p 1) r(p 2)... r() k =, 1, 2,..., p a 1 a 2. a p = r(1) r(2). r(p)
help lpc Liniowy, predykcyjny filtr współczynników ustalanych po przez minimalizację błędów predykcji jednokrokowych w sensie średniokwadratowym a - wektor współczynników g - wariancja błędu predykcji [a, g] = lpc(x, p) ˆx(n) = a(2)x(n 1) a(3)x(n 2) a(p + 1)x(n p)
help lpc 5 Oryginalny sygnał i jego estymata Oryginalny sygnal Estymata LPC 4 3 2 Amplituda 1-1 -2-3 1 2 3 4 5 6 7 8 9 1 Numer próbki
help lpc randn('state',); noise = randn(5,1); x = filter(1,[1 1/2 1/3 1/4],noise); x = x(4594:5); [a,g] = lpc(x,3); g =.993 a = 1..4983.3287.22 % estymata sygnału est_x = filter([ -a(2:end)],1,x); % błąd predykcji e = x - est_x;
help lpc 1.2 Funkcja autokorelacji błędu predykcji 1.8 Znormalizowane wartości.6.4.2 -.2-5 -4-3 -2-1 1 2 3 4 5 Przesunięcie
help lpc [acs,lags] = xcorr(e,'coeff'); h2 = plot(lags,acs); title('funkcja autokorelacji błędu predykcji', 'FontName','Times New Roman','FontSize',16); xlabel('przesunięcie','fontname', 'Times New Roman','FontSize',16); ylabel('znormalizowane wartości', 'FontName','Times New Roman','FontSize',16); grid on; set(h2,'linewidth',1)
help lpc Algorytm LPC rozwjazuje problem najmnieszych kwadratów a = 1 a(2) Xa = b. a(p + 1), b = 1.
help lpc Dopisujemy p zer na poczatku i na końcu naszego wektora danych!!! Dlaczego???? X = x(1).... x(2) x(1)..... x(2)... x(p)... x(1). x(p + 1)... x(2)....... x(m)... x(m p + 1). x(m).. x(m p + 2)...... x(m)
help lpc s = [1 2 3 4 5 6]; p = 3; N = length(s); r = zeros(p+1,1); R = zeros(p,p); for k = :p for n = :N-1-k r(k+1) = r(k+1) + s(n+1)*s(n+1+k); end end % zbuduj macierz autokorelacji for m = 1:p R(m,1:p)=[r(m:-1:2)' r(1:p-(m-1))']; end R = 91 7 5 7 91 7 5 7 91
help lpc X = zeros(s-p+1,p); for i=p+1:n+1 X(i-p,:) = s(i-1:-1:i-p); end Q = X'*X; % Q > ale nie jest Toeplitz Q = 86 68 5 68 54 4 5 4 3 R = 91 7 5 7 91 7 5 7 91
help lpc s = [ 1 2 3 4 5 6 ]; N = length(s); X = zeros(s-p+1,p); for i=p+1:n+1 X(i-p,:) = s(i-1:-1:i-p); end Q = X'*X; % Q > i macierz Toeplitza Q = R = 91 7 5 7 91 7 5 7 91 91 7 5 7 91 7 5 7 91
help lpc X T Xa = X T b ˆRa = ˆr ˆR jest macierza Toeplitza i jest dodatnio określona Równanie Yule-Walker r() r(1)... r(p 1) r(1) r()... r(p 2)...... r(p 1) r(p 2)... r() a 1 a 2. a p = r(1) r(2). r(p)
help levinson Algorytm Levinson - Durbin rozwiazuje problem znalezienia współczynników wielomianu charakterystycznego, którego bieguny będa zawsze leżały wewnatrz okręgu jednostkowego na płaszczynie zespolonej Z, pod warunkiem, że podana macierz jest macierza Toeplitza i jest dodatnio określona [a, e] = levinson(r, p) r - wektor/macierz autoregresji p - liczba współczynników autoregresji a - wektor współczynników autoregresji e - wektor błędów predykcji
help levinson Rekurencyjny algorytm Levinson a-durbin a σ (t) = r (t) i = 1,... r κ i (t) = r i(t) i 1 j=1 âj,i 1(t)r i j (t) σ i 1 (t) σ i (t) = (1 κ 2 i (t))σ i 1(t) â i,i (t) = κ i (t) j = 1,..., i 1 â j,i (t) = â i,i 1 (t) κ i (t)â i j,i 1 (t) Jaka jest złożoność obliczeniowa względem rzędu modelu?
help levinson rr = zeros(p,1); R = 91 7 5 7 91 7 5 7 91 rr(1:p,1)=(r(2:p+1))'; rr = 7 5 32 a = R\rr a =.8399 -.297 -.87 a= levinson(r,p) a = 1. -.8399.297.87
Filtracja LP Filtracja dolnoprzepustowa filtrem o odpowiedzi impulsowej h(k) i górnej częstotliwości granicznej równej 9 Hz s 3 (n) = M h(k)s 2 (n k) k= Funkcje MATLAB-a: fir1() i filter() 6 x 1-3 Po zastosowaniu okna Hamminga 4 s 2 [n] 2-2 -4 56 565 57 575 58 585 n [próbki] 3 x 1-3 Po filtracji dolnopasmowej 2 1 s 3 [n] -1-2 -3 56 565 57 575 58 585 n [próbki]
Progowanie Progowanie sygnału s 3 (n) P dla s 3 (n) P s 4 (n) = s 3 (n) + P dla s 3 (n) P dla pozostałych P =.3 max(s 3 (n)) 3 x 1-3 Po filtracji dolnopasmowej 2 1 s 3 [n] -1-2 -3 56 565 57 575 58 585 n [próbki] 1.5.5 2 x 1-3 Po operacji progowania 1 s 4 [n] -.5-1 -1.5-2 56 565 57 575 58 585 n [próbki]
Autokorelacja Funkcja autokorelacji sygnału po sprogowaniu r(k) = N 1 k n= s 4 (n)s 4 (n + k), k =, 1, 2,..., p 1 Unormowana funkcja autokorelacji.5 r[k] -.5 2 4 6 8 1 12 14 16 18 2 k [przesunięcie]
Decyzja Klasyfikacja analizowanego fragmentu mowy na dźwięczny lub bezdźwięczny max(r p (k)) [.3.35] np:. k = 2,..., 16 Zakres k obejmuje przedział, w którym zmienia się okres tonu podstawowego. Przez k max oznaczamy indeks, dla którego funkcja autokorelacji przyjmuje wartość maksymalna.
Okres Okres tonu podstawowego dla fragmentu dźwięcznego T = k max zaś dla fragmentu bezdźwięcznego T =
Wyjście kodera Na wyjściu kodera mowy znajduja się: {T, G, a 1,..., a p }