António Teixeira 15 Janeiro 2005 Conceitos de Sinais e Sistemas Mestrado em Ciências da Fala e da Audição António Teixeira 15 Janeiro 2005
Aula 13 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 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 A frequencia fundamental e´: 125.0 Hz A janela deve conter pelo menos dois períodos de pitch
Determinação da autocorrelação Estimativa biased Estimativa unbiased
Um método para tentar resolver o problema é utilizar “center-clipping” 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 %)
A frequencia fundamental e´: 217.4 Hz exemplo autocorrelação Center-clipped 50 % 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 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) fprintf(1,'A frequencia fundamental e´: %6.1f Hz\n',f0) O pitch e´: 7.88 ms A frequencia fundamental e´: 127.0 Hz
Outro exemplo Mesmo sinal usado em center-clipped O pitch e´: 4.59 ms A frequencia fundamental e´: 218.1 Hz
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 Magnitude Difference Function 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 Janela Filtro inverso Análise LPC Autocorrelação O pitch e´: 8.13 ms A frequencia fundamental e´: 123.1 Hz
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 %inversa e=filter(a,1,y); 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ós-processamento 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 Peak picking Melhorado pela utilização de Interpolação Parabólica (Boite et al. P 92)
Cálculo de Fk e Bk Uma raiz Próxima do circulo unitário corresponde a uma formante, com:
Exemplo “seg6” F1 = 326.40 Hz F2 = 1133.75 Hz F3 = 2824.89 Hz close all;clear all [x,fs]=wavread('seg6'); t=(1:length(x))/fs*1000; %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 12 p=12; a=real(lpc(y,p)); % raizes zplane(1,a); rs=roots(a); Miuk=abs(rs);tetak=angle(rs) % eliminar metade ind=find(tetak<=0);miuk(ind)=[];tetak(ind)=[]; % Fk fk=tetak/(2*pi)*fs; [fk,ind]=sort(fk); % mostar resultados fprintf(1,'F1 = %6.2f Hz\n',fk(1)) fprintf(1,'F2 = %6.2f Hz\n',fk(2)) 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