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
Download

Apresentação