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 (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 ! 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 (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]. 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 110 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