Conceitos de Sinais e Sistemas Mestrado em Ciências da Fala e da Audição António Teixeira 15 Janeiro 2005 Aula • Obtenção de F0 e Formante Obtenção da Frequência Fundamental Determinação de F0 • F0 é uma propriedade fundamental dos sons vozeados • Estimar F0 é muito mais difícil do que se possa imaginar !! – A excitação é apenas quase-periódica • Alguns Métodos – Método da autocorrelação – Método usando predição linear – Método cepstral Pitch e frequência • Pitch é a qualidade subjectiva relacionada com a frequência – No entanto, outros factores afectam a percepção de pitch • por exemplo: o pitch depende em certa medida da intensidade com que um tom é apresentado ao ouvinte Determinação do pitch pelo método da autocorrelação 1 0.5 0 -0.5 0 2 4 6 8 10 12 14 16 A janela deve conter pelo menos dois períodos de pitch 18 20 close all;clear all [x,fs]=wavread('seg4'); t=(1:length(x))/fs*1000; plot(t,x) %Defina janela de observaçao de 20ms N=floor(0.02*fs); t1=(1:N)/fs*1000; rx=xcorr(x,N,'coeff'); figure(2) plot(t1,rx(N+1:2*N)) %determine o maximo da autocorrelaçao para %desvios superiores a 2ms(500Hz) N1=floor(0.002*fs); [x0,imax]=max(rx(N+N1:2*N+1)); imax=imax+N1; t0=imax/fs*1000; f0=1/t0*1000; fprintf(1,'O pitch e´: %6.2f ms\n',t0) fprintf(1,'A frequencia fundamental e´: %6.1f Hz\n',f0) O pitch e´: 8.00 ms Determinação da autocorrelação 0.3 0.2 0.1 0 -0.1 -0.2 -0.3 -0.4 0 50 100 150 200 250 300 350 400 450 500 -3 6 • Estimativa biased 5 4 12 x 10 • Estimativa unbiased 10 8 3 6 2 4 1 2 0 0 -2 -1 -4 -2 -6 -3 0 100 200 300 400 500 600 700 800 900 1000 -8 0 100 200 300 400 500 600 700 800 900 1000 • A utilização directa da autocorrelação pode resultar em múltiplos máximos – Tornando difícil a decisão • Um método para tentar resolver o problema é utilizar “center-clipping” – Colocando a zero as amostras que se situem abaixo de um certa percentagem da amplitude máxima (por exemplo Sondhi usou 30 %) exemplo autocorrelação 0.08 0.06 0.04 1 0.02 0 -0.02 -0.04 0.5 -0.06 -0.08 0 200 400 600 800 1000 1200 1400 0 Center-clipped 50 % -0.5 0 2 4 6 8 10 12 14 16 18 20 O pitch e´: 4.60 ms A frequencia fundamental e´: 217.4 Hz Determinação do pitch pelo cepstrum Determinação do pitch pelo cepstrum 0.3 0.2 0.1 0 -0.1 -0.2 -0.3 -0.4 0 10 20 30 40 50 60 70 0.5 0 -0.5 -1 -1.5 -2 0 50 100 150 200 250 close all;clear all [x,fs]=wavread('seg4'); N=length(x); t=(1:length(x))/fs*1000; plot(t,x) z=rceps(x); figure(2) plot(z(1:length(x)/2)) N1=0.02*N [z0,imax]=max(z(N1:N/2)); imax=imax+N1 t0=imax/fs*1000; f0=1/t0*1000; fprintf(1,'O pitch e´: %6.2f ms\n',t0) O pitch e´: 7.88 ms fprintf(1,'A frequencia fundamental A frequencia fundamental e´: 127.0 Hz e´: %6.1f Hz\n',f0) Outro exemplo 0.4 • Mesmo sinal usado em center-clipped 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -1.2 -1.4 -1.6 0 100 200 300 O pitch e´: 4.59 ms A frequencia fundamental e´: 218.1 Hz 400 500 600 700 • O cepstrum contém harmónicos da frequência fundamental • Os valores baixos de quefrency representam a forma do tracto • Os valores elevados de quefrency representam a excitação – E no caso de sinais vozeados a frequência fundamental AMDF • AMDF – Average N Magnitude Difference Function 1 N | s ( n) s ( n i ) | i 0 • Mais rápido, em especial quando se utiliza aritmética inteira – Não necessita de multiplicações Determinação do pitch por filtragem inversa Filtro passa baixo Filtro inverso Janela Autocor relação Análise LPC -3 0.25 4 0.2 x 10 1 3 0.15 0.8 2 0.6 0.1 1 0.05 0.4 0 0 -1 -0.05 -2 -0.1 0 -0.15 -3 -0.2 -4 -0.25 0.2 0 5 10 15 20 25 30 -5 -0.2 0 2 4 6 8 10 12 14 16 18 20-0.4 0 2 4 6 8 10 12 14 O pitch e´: 8.13 ms A frequencia fundamental e´: 123.1 Hz 16 18 20 Determinação do pitch por filtragem inversa close all;clear all [x,fs]=wavread('seg1'); t=(1:length(x))/fs*1000; plot(t,x) %filtragem passa baixo [b,a]=butter(3,0.25); x=filter(b,a,x); %Defina janela de observaçao de 20ms N=floor(0.02*fs); y=x(1:N).*hamming(N); t=(1:N)/fs*1000; %Determine o modelo LPC de ordem 16 p=16; a=real(lpc(y,p)); %determinação do residuo por filtragem figure(2) plot(t,e) ry=xcorr(y,N,'coeff'); figure(3) plot(t,ry(N+1:2*N)) %determine o maximo da autocorrelaçao para %desvios superiores a 2ms(500Hz) N1=floor(0.002*fs); [x0,imax]=max(ry(N+N1:2*N+1)); imax=imax+N1; t0=imax/fs*1000; f0=1/t0*1000; fprintf(1,'O pitch e´: %6.2f ms\n',t0) fprintf(1,'A frequencia fundamental e´: %6.1f Hz\n',f0) Pós-processamento • Os métodos expostos podem cometer erros – Produzindo variações bruscas do valor do pitch que são incorrectas • Muitas vezes recorre-se a pósprocessamento – Filtro de mediana • • • • Filtro de comprimento L (3 ou 5) entrada L valores de pitch saída a mediana (L-1)/2 valores abaixo, (L-1)/2 valores acima Pode usar-se um filtro passa baixo depois do filtro de mediana – Programação dinâmica • Algoritmo de optimização F0 usando SFS Formantes Porquê calcular as formantes ? • As formantes são definidas perceptualmente • A propriedade física correspondente é a frequência de ressonância do tracto vocal • Análise de formantes é útil para posicionar os fonemas em termos das primeiras 2 ou 3 formantes – As duas primeiras formantes identificam/caracterizam bastante bem as vogais Obter valores candidatos • Procura de picos no espectro – Designado em Inglês de “peak picking” • Procura de picos no espectro obtido de análise LPC – Várias alternativas: • • • • Reter os N maiores picos, Os N picos com menores frequências Todos os picos Pontos onde a segunda derivada é mais negativa • Factorização das raízes do polinómio resultante da análise LPC Processos habituais Pré - ênfase 1-0.95 z-1 Janela Hamming Cálculo dos ak Peak picking Cálculo de |A(ejw )|2 usando FFT Cálculo das raizes de A(z) Procura de máximos Decisão 1 p 1 ak z k k 1 p 1 p (1 z z k k 1 1 Ck 1 k 1 (1 z k z ) ) Fk, Bk Melhorado pela utilização de Interpolação Parabólica (Boite et al. P 92) Cálculo de Fk e Bk • Uma raiz zk k .e j k circulo • Próxima do unitário corresponde a Fk k f amostragem uma formante, 2 com: Bk ( f ,3dB ) 1 / .(1 k ) f amostragem F1 = 326.40 Hz Exemplo “seg6” close all;clear all 0.15 [x,fs]=wavread('seg6'); 0.1 F2 = 1133.75 Hz 0.05 t=(1:length(x))/fs*1000; 0 %Defina janela de observaçao de 20ms -0.05 F3 = 2824.89 Hz N=floor(0.02*fs); -0.1 y=x(1:N).*hamming(N); -0.15 -0.2 0 10 20 30 40 F4 = 4039.82 Hz 50 60 70 t=(1:N)/fs*1000; %Determine o modelo LPC de ordem 12 p=12; a=real(lpc(y,p)); % raizes 1 zplane(1,a); rs=roots(a); Miuk=abs(rs);tetak=angle(rs) % eliminar metade Imaginary part 0.5 ind=find(tetak<=0);miuk(ind)=[];tetak(ind)=[]; % Fk 0 fk=tetak/(2*pi)*fs; [fk,ind]=sort(fk); -0.5 % mostar resultados fprintf(1,'F1 = %6.2f Hz\n',fk(1)) -1 fprintf(1,'F2 = %6.2f Hz\n',fk(2)) -1 -0.5 0 Real part 0.5 1 fprintf(1,'F3 = %6.2f Hz\n',fk(3)) fprintf(1,'F4 = %6.2f Hz\n',fk(4)) No SFS F1= 355 F2=1168 F3=2809