Conceitos de Sinais e Sistemas Mestrado em Ciências da Fala e da Audição
description
Transcript of Conceitos de Sinais e Sistemas Mestrado em Ciências da Fala e da Audição
1AT 2004
Conceitos de Sinais e SistemasMestrado em Ciências da Fala e da Audição
António Teixeira
2AT 2004
Aula 4• Som em Matlab
• Aliasing
• Quantização– SNR
• Conversão D/A
• Operações com sinais
3AT 2004
Som em Matlab
Ver Matlab num Instante
4AT 2004
Sumário• Geração de som com o Matlab
– Funções do Matlab para manipular sons• sound
• wavread
• wavwrite
– Geração de sons artificais• ruído
• sinusóides
• soma de duas sinusóides
• sinusóides de frequência variável
5AT 2004
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!
6AT 2004
Função soundA 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.
7AT 2004
Função wavreadA 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.
8AT 2004
Função wavwriteA 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.
9AT 2004
Exemplo: ficheiro de som
Neste exemplo pretende-se ler para um vector um som armazenado num ficheiro e reproduzi-lo no Matlab
[x,fa]= wavread('som.wav');
sound(x,fa)
10AT 2004
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');
11AT 2004
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)
12AT 2004
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; % Ruído de média nula
sound(x,8000);
13AT 2004
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);
14AT 2004
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);
15AT 2004
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);
16AT 2004
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)
17AT 2004
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)
18AT 2004
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 s
om mas que permite ouvir, visualizar e manipular sons digitais
19AT 2004
Aliasing
20AT 2004
O que acontece se não se amostra suficientemente rápido?
x(t)=A cos (2f0t+)se amostramos com um período Ts obtemos
x[n]=x(nTs)=A cos (2f0nTs+)
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 (2f0 nTs+ 2 k fs Ts+)
= A cos (2f0 nTs+ 2 k +)
= A cos (2f0 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 !
21AT 2004
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
22AT 2004
Uma segunda fonte de “aliasing” - “folding”
x(t)=A cos (2f0t+)
se amostramos com um período Ts obtemos
x[n]=x(nTs)=A cos (2f0nTs+)
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 (-2f0 nTs+ 2 k fs Ts+)
= A cos (-2f0 nTs+ 2 k +)
= A cos (2f0 nTs +) % porque cos(- )=cos()
= x[n]
w[n] tem as mesmas amostras que x[n] sendo impossível distingui-la de x[n].
23AT 2004
Porquê “folding”
Frequência real
freq. aparente
1000
1000 2000
24AT 2004
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
25AT 2004
Quantização
26AT 2004
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
27AT 2004
Capacidade de representação• 1 Bit = 2 estados
• 2 Bits = 4 estados
• 3 Bits = 8 estados
• ...
• N Bits = 2N estados
:
:
:
:
8 Bits
256 palavras
8 Bits
256 palavras
Memória
28AT 2004
Capacidade de representação• Exemplo do número de estados possíveis
possíveis para 3 bits
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
29AT 2004
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.
30AT 2004
Exemplo de quantização• 8 bits
• 7 bits
• 3 bits
• 2 bits
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-1
0
1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-1
0
1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-1
0
1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-1
0
1
31AT 2004
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)
32AT 2004
Exemplo
•3 bits
33AT 2004
Em Matlabt=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 ...
34AT 2004
Resultados
2 bits
erro
4 bits
8 bits
35AT 2004
Erro de arredondamento e bits
•N=níveis
= distância entre níveis
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
1
-1
36AT 2004
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
37AT 2004
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
38AT 2004
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 concretomax(diferenca)% valor teórico para o erro máximo de arredondamento1/N% SNRsnr=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 ?
39AT 2004
Conversão D/A
40AT 2004
• Demo1 – reconstrução com impulsos quadrados – “hold”
• Demo2 – com impulsos triangulares
• Demo2 – com impulsos ideais truncados
41AT 2004
Operações com sinais
42AT 2004
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
43AT 2004
Operações na variável independente
• Mudança da escala temporal– y(t)= x (a t)
t
x(t)
t
x(2t)
t
x(t/2)
a>1 => compressão
0<a<1 => expansão
•Alguma ideia de aplicação na área da fala?
44AT 2004
Operações na variável independente
• inversão temporal y(t)= x (- t)
t
x(t)
-t1 t2
t
y(t)=x(-t)
-t2 t1
45AT 2004
TPC • Leitura dos 2 capítulos relativos a sinais do
livro Rosen & Howell
46AT 2004
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.
CodificadorDescodifica
dor
Dadosem
Binário
ImagensVideoTextoSom
Desenhosetc
ImagensVideoTextoSom
Desenhosetc
47AT 2004
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.
48AT 2004
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
32 48 0 64 @ 80 P 96 ` 112 p
33 ! 49 1 65 A 81 Q 97 a 113 q
34 “ 50 2 66 B 82 R 98 b 114 r
35 # 51 3 67 C 83 S 99 c 115 s
36 $ 52 4 68 D 84 T 100 d 116 t
37 % 53 5 69 E 85 U 101 e 117 u
38 & 54 6 70 F 86 V 102 f 118 v
39 ‘ 55 7 71 G 87 W 103 g 119 w
40 ( 56 8 72 H 88 X 104 h 120 x
41 ) 57 9 73 I 89 Y 105 i 121 y
42 * 58 : 74 J 90 Z 106 j 122 z
43 + 59 ; 75 K 91 [ 107 k 123 {
44 , 60 < 76 L 92 \ 108 l 124 |
45 - 61 = 77 M 93 ] 109 m 125 }
46 . 62 > 78 N 94 ^ 110 n 126 ~
47 / 63 ? 79 O 95 _ 111 o 127 DEL
Código ASCII
50AT 2004
Exemplo código ASCII• Código ASCII
• 7 Bits = 128 Caracteres :
:
:
:
Memória
1 0 0 1 1 0 10
1 0 0 0 0 0 10
1 0 1 0 1 0 00
1 0 1 1 1 0 00
1 0 0 0 0 1 00
MATLAB
1 0 0 0 0 0 10
77
65
84
76
65
66
51AT 2004
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
52AT 2004
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:
012310 1051091091011995
Base 10
53AT 2004
Códigos binários• Se modificarmos a base de decimal para
binária podemos utilizar o mesmo tipo de representação:
• 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
01232 212020211001
54AT 2004
Formato exponencial decimal• Em formato decimal é útil representar os
números utilizando a notação exponencial:
51022.022000
Mantissa Expoente
55AT 2004
Formato exponencial binário• No formato exponencial binário a mantissa e a
base são representados em formato binário na base 2.
5211.011000 bb
Mantissa Expoente
56AT 2004
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.
57AT 2004
• Precisão simples (32 bits, Bias = 127)
• Precisão dupla (64 bits, Bias = 1023)
• Precisão extendida (80, Bias = 32767)
Norma IEEE754
)(2)0.1()1( BiasEs Mx
S Expoente Mantissa
31 23 22 0
S Expoente Mantissa
63 52 51 0
S Expoente Mantissa
79 64 63 0
58AT 2004
Consequências...
• É finito o universo de representação numérica
• Problemas de resolução
• Erros de arredondamento
• Propagação durantecomputação.
Recta real
Números representáveis