Conceitos de Sinais e Sistemas
Mestrado em Ciências da Fala e da Audição
António Teixeira
AT 2004
1
•
Som em Matlab
•
Aliasing
•
Quantização
–
SNR
•
Conversão D/A
•
Operações com sinais
Aula
AT 2004
2
Som em Matlab
Ver Matlab num Instante
AT 2004
3
Sumário
• Geração de som com o Matlab
– Funções do Matlab para manipular sons
• sound
• wavread
• wavwrite
– Geração de sons artificais
•
•
•
•
AT 2004
ruído
sinusóides
soma de duas sinusóides
sinusóides de frequência variável
4
Som no Matlab
• É possível utilizar o Matlab na manipulação e
geração de som.
• Existem funções para ler ficheiros de som para
um vector, gravar um vector para um ficheiro e
para reproduzir sons a partir de ficheiros.
• Podem-se ouvir os vectores!
AT 2004
5
Função sound
A função sound permite reproduzir um som
armazenado num vector.
Sintaxe
sound(x,fa)
em que x é um vector linha ou coluna
e fa é a frequência de amostragem que se
pretende utilizar.
AT 2004
6
Função wavread
A função wavread lê um ficheiro de som em
formato “wav” do Windows.
Sintaxe
[x,fa]= wavread(’ficheiro’)
em que x é um vector ,
fa é a frequência de amostragem utilizada
e ‘ficheiro’ é o ficheiro de som que se pretende
ler.
AT 2004
7
Função wavwrite
A função wavwrite escreve um ficheiro de
som em formato “wav” do Windows.
Sintaxe
wavwrite(x,fa,’ficheiro’)
em que x é um vector ,
fa é a frequência de amostragem utilizada
e ‘ficheiro’ é o ficheiro de som onde se pretende
guardar o som armazenado em x.
AT 2004
8
Exemplo: ficheiro de som
Neste exemplo pretende-se ler para um vector
um som armazenado num ficheiro e reproduzilo no Matlab
[x,fa]= wavread('som.wav');
sound(x,fa)
AT 2004
9
Exemplo: Gravar um som
• Neste exemplo lê-se para um vector
armazenado num ficheiro, manipula-se e
grava-se num ficheiro diferente.
[x,fa]= wavread('som.wav');
sound(x,fa)
y= x(end:-1:1);
% Inverte no tempo
wavwrite(y,fa,'som2.wav');
AT 2004
10
Alteração da freq. de amostragem
Ao reproduzir um som é possível alterar a
frequência de amostragem com que é
reproduzido.
Exemplo: utilizando o dobro da frequência de
amostragem do original.
sound(x,fa*2)
Exemplo: utilizando metade da frequência de
amostragem do original
sound(x,fa/2)
AT 2004
11
Geração de sons artificiais
O Matlab possui formas expeditas de gerar sons
artificais. Vamos ver como é que se geram
diferentes tipos de sons.
A função rand gera uma sequência pseudo
aleatória. Qual será o som produzido por um
vector gerado com este função?
x= rand(1,10000)-0.5;
sound(x,8000);
AT 2004
% Ruído de média nula
12
Geração de sons artificiais
A função seno desempenha um papel central na
geração de sons articiais. Vejamos qual o som
que obtemos.
fa= 8000; Ta= 1/fa;
t= 0:Ta:1; %Gera o sinal de tempo
x= sin(2*pi*400*t);
% sinusóide de 400Hz
sound(x,fa);
AT 2004
13
Geração de sons artificiais
Soma de duas sinusóides
Podemos gerar dois vectores com sinusóides
com frequências diferentes e somá-los para
ouvir o resultado
fa= 8000; Ta= 1/fa;
t= 0:Ta:1; %Gera o sinal de tempo
x= sin(2*pi*400*t);
% sinusóide de 400Hz
y= sin(2*pi*410*t);
% sinusóide de 410Hz
soundsc(x+y,fa);
AT 2004
14
Geração de sons artificiais
Multiplicação de sinusóides
Podemos gerar dois vectores com sinusóides de
frequências diferentes e realizar um produto
ponto-a-ponto entre eles.
fa= 8000; Ta= 1/fa;
t= 0:Ta:1; %Gera o sinal de tempo
x= sin(2*pi*400*t);
% sinusóide de 400Hz
y= sin(2*pi*80*t);
% sinusóide de 80Hz
soundsc(x.*y,fa);
AT 2004
15
Geração de sons artificiais
Sinusóides de frequência variável
Com o Matlab não é muito díficil gerar uma
sinusóide cuja frequência varia linearmente ao
longo do tempo.
fa= 8000; Ta= 1/fa;
t= [0:Ta:2 2:-Ta:0];
%Gera o
tempo
x= sin(2*pi*400*t.*t);
sound(x,fa)
AT 2004
16
Geração de sons artificiais
Sinusóides de frequência variável
Neste exemplo temos uma sinusóide cuja
frequência varia ao longo do tempo de forma
sinusóidal.
fa= 8000; Ta= 1/fa;
t= 0:Ta:2;
%Gera o sinal de tempo
s= 80*sin(2*pi*5*t);
x= sin(2*pi*400*t + s);
sound(x,fa)
AT 2004
17
Demos e links
• Demonstração de um efeito áudio de
modificação do sinal de voz
– Ficheiro Matlab
– Som original
– Som modificado
• Links para páginas interessantes sobre som
– Página sobre o som e a sua digitalização
– Página sobre a audição
– CoolEdit96 - demo de um programa de edição de
som mas que permite ouvir, visualizar e manipular
sons digitais
AT 2004
18
Aliasing
AT 2004
19
O que acontece se não se amostra
suficientemente rápido?
x(t)=A cos (2f0t+)
se amostramos com um período Ts obtemos
x[n]=x(nTs)=A cos (2f0nTs+)
Consideremos outra sinusóide com frequência f0+k fs, com k inteiro e fs=1/Ts
y(t)=A cos (2(f0+k fs)t + )
Amostrando y(t) com o mesmo Ts, obtemos
y[n]=y(nTs)
=A cos (2 (f0+k fs) nTs+)
= A cos (2f0 nTs+ 2 k fs Ts+)
= A cos (2f0 nTs+ 2 k +)
= A cos (2f0 nTs +)
= x[n]
y[n] tem as mesmas amostras que x[n] sendo impossível distingui-la de x[n].
Como k é um inteiro, positivo ou negativo, existem um número infinito de
sinusóides que resultam nas mesmas amostras x[n] quando amostradas com
a frequência fs !
AT 2004
20
alias
• As frequências f0+k fs são chamadas “alias” da frequência f0
• porque todas elas parecem ser a mesma quando amostradas
com frequência de amostragem fs
• No dicionário Inglês-Português da Porto Editora:
– alias [´eiliaes] , 1 adv. aliás
2 s. pseudónimo, nome falso, nome suposto
AT 2004
21
Uma segunda fonte de “aliasing” - “folding”
x(t)=A cos (2f0t+)
se amostramos com um período Ts obtemos
x[n]=x(nTs)=A cos (2f0nTs+)
Consideremos outra sinusóide com frequência -f0+k fs, com k inteiro e fs=1/Ts
w(t)=A cos (2(-f0+k fs)t + )
Amostrando y(t) com o mesmo Ts, obtemos
w[n]=y(nTs)
=A cos (2 (-f0+k fs) nTs+)
= A cos (-2f0 nTs+ 2 k fs Ts+)
= A cos (-2f0 nTs+ 2 k +)
= A cos (2f0 nTs +) % porque cos(- )=cos()
= x[n]
w[n] tem as mesmas amostras que x[n] sendo impossível distingui-la de x[n].
AT 2004
22
Porquê “folding”
freq.
aparente
1000
1000
2000
Frequência real
AT 2004
23
Aliasing
• Sendo f a frequência de um sinal e a frequência de
amostragem fs, as seguintes regras permitem calcular
a frequência
• f < ½fs
• Como a frequência do sinal se encontra abaixo do limite imposto
pelo teorema da amostragem, não ocorre “aliasing”; o sinal
amostrado possui a frequência correcta.
• ½fs < f < fs
• Existe “aliasing” sendo a frequência do sinal amostrado fa = fs - f
• f > fs
• Ocorre “aliasing”. Para obter a frequência do sinal amostrado obter
o resto da divisão de f por f. No final se ½fs < f < fs o sinal
amostrado fa = fs - f ; caso contrário fa = f
AT 2004
24
Quantização
AT 2004
25
Quantização
• Os valores contínuos da amplitude também
têm de ser convertidos em valores tratáveis
pelo computador
– Os computadores guardam os números usando 0s e
1s, os chamados bits
• Este processo designa-se por quantização
AT 2004
26
Capacidade de representação
•
•
•
•
•
AT 2004
1 Bit = 2 estados
2 Bits = 4 estados
3 Bits = 8 estados
...
N Bits = 2N estados
Memória
:
:
8 Bits
:
256 palavras
:
27
Capacidade de representação
• Exemplo do número de estados possíveis
possíveis para 3 bits
AT 2004
b2
b1
b0
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
28
Precisão, número de bits
• O número de bits usados para representação
determina a precisão (ou resolução) em amplitude do
processo de amostragem referido atrás.
• Quanto mais bits forem usados, maior será essa
resolução.
• Para obtermos uma resolução equivalente à de um
sistema CD de áudio, são necessários 16 bits,
– o que significa que temos 65536 combinações numéricas
possíveis.
– Os valores de amplitude amostrados são sempre
arredondados para o código binário mais próximo.
AT 2004
29
Exemplo de quantização
• 8 bits
1
0
-1
• 7 bits
1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0
-1
• 3 bits
1
0
-1
• 2 bits
1
0
-1
AT 2004
30
Número de bits
• 8 bits
– 256 níveis
– Se tivermos sinal entre – 1 e + 1 V
• Erro máximo 3.4 mV (mili=0.001)
• 16 bits
– 65536 níveis
– Se tivermos sinal igual ao anterior
• Erro máximo 15 microV (micro=0.000001)
AT 2004
31
Exemplo
•3 bits
AT 2004
32
Em Matlab
t=0:1e-3:4
x= sin (2*pi*10*t)+1 % para ser entre 0 e 1
bits=8
N=2^bits
xquant=round(x*(N-1)/2)*2/(N-1)
stem(t,xquant,'ro'); hold on;
diferenca=x-xquant
plot(t,diferenca, 'g+')
% experimente com bits=1,2 ...
AT 2004
33
Resultados
4 bits
2 bits
erro
8 bits
AT 2004
34
Erro de arredondamento e bits
1
•N=níveis
• = distância entre
níveis
-1
N=2/
N  =2
 =N/2
Erro máximo de arredondamento é = /2=1/N
logo N=1/ 
número de bits (b)  b log2 N
AT 2004
35
SNR devido a quantização
SNR= 20 log10 (App/)
como A=2 e N=2b temos = 2-b
App/= 2 x 2b = 2b+1
20 log10 (2b+1) = 20 (b+1) log10 (2)
6 (b+1) dB
aumento de 6 dB/bit
AT 2004
36
Exercício
• Estimar o número de bits necessários para
representar amostras de um sinal com valores
entre –1 e 1 com um erro de arredondamento
inferior a 10-3
AT 2004
37
Em Matlab
% RETOMANDO O EXEMPLO ANTERIOR
t=0:1e-3:4;
x= sin (2*pi*10*t);
bits=8;
N=2^bits;
xquant=round(x*(N-1)/2)*2/(N-1);
plot(t,xquant,'ro'); hold on;
diferenca=x-xquant;
plot(t,diferenca, 'g+');
% valor do erro máximo de arredondamento neste caso concreto
max(diferenca)
% valor teórico para o erro máximo de arredondamento
1/N
% SNR
snr=10*log10(dot(x,x)/dot(diferenca,diferenca))
% EXPERIMENTE com 1,2 ... até 8 bits. Qual o aumento de snr
com o aumento de 1 bit ?
AT 2004
38
Conversão D/A
AT 2004
39
• Demo1 – reconstrução com impulsos
quadrados – “hold”
• Demo2 – com impulsos triangulares
• Demo2 – com impulsos ideais truncados
AT 2004
40
Operações com sinais
AT 2004
41
Operações com sinais I
• Operações na variável dependente
– Mudança de escala (da amplitude)
• y(t)=c x(t) ou y[n]=c x[n]
• Exemplo: Amplificador electrónico
– Adição
• y(t)= x1(t) + x2(t)
• Exemplo: mixer áudio
– Multiplicação
• y(t)= x1(t) x2(t)
• Exemplo: sinal de rádio AM (modulação de Amplitude)
– Diferenciação, Integração
• Ex: bobine e condensador
AT 2004
42
Operações na variável independente
• Mudança da escala
temporal
x(t)
– y(t)= x (a t)
a>1 =>
compressão
0<a<1 => expansão
•Alguma ideia de aplicação na
área da fala?
AT 2004
x(2t)
t
t
x(t/2)
t
43
Operações na variável independente
x(t)
• inversão temporal
y(t)= x (- t)
-t1
t2
t
y(t)=x(-t)
-t2
AT 2004
t1
t
44
TPC 
• Leitura dos 2 capítulos relativos a sinais do
livro Rosen & Howell
AT 2004
45
Codificação/Representação
Os vários tipos de informação são codificados de
forma diferente. Para interpretar cada um dos
formatos é necessário um descodificador.
AT 2004
46
Código ASCII (texto)
• A primeira versão do código ASCII (American
Standard Code for Information Interchange)
foi criada em 1963 para normalizar a
transmissão e armazenamento de texto. Em
1967 foram incluídas as letras minúsculas no
código que no essencial permaneceu inalterado
até aos nossos dias.
AT 2004
47
Código ASCII
Exemplo de codificação para a letra “A”
4x16+1=64+1=65=100 0001
Letra “W”: 5x16+7=87=101 0111
AT 2004
48
Código ASCII
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
!
“
#
$
%
&
‘
(
)
*
+
,
.
/
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL
Exemplo código ASCII
• Código ASCII
• 7 Bits = 128 Caracteres
Memória
:
:
M
A
T
L
A
B
0
1
0
0
1
1
0
1
77
0
0
1
1
0
0
0
1
0
0
0
1
0
0
1
0
65
0
1
0
1
1
1
0
0
76
0
1
0
0
0
0
0
1
65
0
1
0
0
0
0
1
0
66
84
:
:
AT 2004
50
UNICODE
• O código ASCII possui a grande desvantagem
de apenas permitir a representação de 28=256
símbolos diferentes.
• O código UNICODE pretende normalizar a
codificação dos caracteres utilizados por todas
as escritas existentes no mundo. Utiliza 16 bits
para codificar cada caracter e encontra-se
disponível nos sistemas informáticos mais
recentes.
• Mais informações em http://www.unicode.org
AT 2004
51
Códigos binários
• Para representar números com bits é possível
encontrar uma forma mais compacta do que a
codificação ASCII.
• No sistema decimal utilizado para realizar
cálculo, os números são representados fazendo
uso da sua posição relativa:
199510  110  9 10  9 10  5 10
3
2
1
0
Base 10
AT 2004
52
Códigos binários
• Se modificarmos a base de decimal para
binária podemos utilizar o mesmo tipo de
representação:
10012  1 2  0  2  0  2  1 2
3
2
1
0
• Note-se que o número anterior tem o valor em
decimal de 8+0+0+1=9, sendo por isso uma
das possíveis representações de números
decimais em binário
AT 2004
53
Formato exponencial decimal
• Em formato decimal é útil representar os
números utilizando a notação exponencial:
22000 0.22  10
5
Mantissa
AT 2004
Expoente
54
Formato exponencial binário
• No formato exponencial binário a mantissa e a
base são representados em formato binário na
base 2.
11000b  0.11b  2
5
Mantissa
AT 2004
Expoente
55
Formato numérico no Matlab
• O Matlab utiliza 64 bits para representar os
números: 52bits para a mantissa e 12 para o
expoente. A representação dos números é feita
utilizando um formato exponencial que
permite uma gama dinâmica muito grande.
AT 2004
56
Norma IEEE754
( E  Bias)
x

(

1
)
(
1
.
0

M
)

2
Precisão simples (32 bits, Bias = 127)
s
•
31
S
23 22
Expoente
0
Mantissa
• Precisão dupla (64 bits, Bias = 1023)
63
S
52 51
Expoente
0
Mantissa
• Precisão extendida (80, Bias = 32767)
79
S
AT 2004
64 63
Expoente
0
Mantissa
57
Consequências...
• É finito o universo de representação numérica
Recta real
Números representáveis
• Problemas de resolução
• Erros de arredondamento
• Propagação durante
computação.
AT 2004
58
Download

x,fa