1AT 2006 Conceitos de Sinais e Sistemas Mestrado em Ciências da Fala e da Audição Edição 2006/7...

Preview:

Citation preview

1AT 2006

Conceitos de Sinais e SistemasMestrado em Ciências da Fala e da Audição

Edição 2006/7

António Teixeira

2AT 2006

Aula 2• Programar ?

• Matlab– Vectores

– Gráficos

– Som em Matlab

3AT 2006

Introdução à Programação

4AT 2006

Porquê programar ?• Trabalhar na área da linguagem é quase

impossível actualmente sem computadores– Os dados são tratados, analisados, guardados,

ordenados, e distribuídos por computadores.

• Várias aplicações estão disponíveis, mas para controlar realmente o processo alguns conhecimentos de programação são essenciais.

5AT 2006

• Exemplos:– Um fonologista interessado em clusters de consoantes.

Tem um dicionário e quer descobrir o mais cluster em posição final de palavra. Faz manualmente ?

– Um psicolinguista interessado numa experiência acerca da silabificação

– Foneticistas que necessitam de normalizar a amplitude, calcular formantes, etc de centenas de gravações

• Não sabendo programar, tem-se poucas opções– Uma é fazer o trabalho manualmente– Outra contratar alguém – Outra ainda usar uma aplicação existente

• Normalmente limitadas. As necessidades podem não ser contempladas

6AT 2006

O computador

Máquina programável que processa informação

7AT 2006

Processar informação• Executar sequências de operações elementares

(instruções)

• sobre dados

• provenientes do exterior através dum dispositivo de entrada

• e encaminhar os resultados para o exterior através de dispositivos de saída.

8AT 2006

Programabilidade• A sequência de instruções elementares que

habitualmente se designa por programa pode ser alterada sempre que se deseje.

9AT 2006

Um pouco de estrutura

• Componentes: CPU, MEMÓRIA, ...

• Subsistemas: Motherboard, Gráficos, Audio, Armazenamento, Comunicações, ...

• Dispositivos de I/O

• Sistema Operativo: MS Windows, LINUX, MacOS, ...

• Aplicações: MS OFFICE, Browsers, CAD, MATLAB, ...

10AT 2006

Dispositivos de Entrada/Saída

11AT 2006

Memória• Agente de armazenamento de informação

• Suportes físicos

Electrónicos Magnéticos Ópticos

Disponibilidade

Acesso

Organização

Disponibilidade

Acesso

Organização

CapacidadeCapacidade

12AT 2006

Arquitectura funcional

Comunicações

POTS,ADSL, EtherNET

Controlo de Interacção

Teclado, rato, monitor ...

CPUMemória Principal

(RAM)

Memória de Massa

(Disco Duro, Diskette, CDROM)

13AT 2006

Uma perspectiva dinâmica

CPU RAM

Memória de massa

Programa

14AT 2006

Representação de valores num computador

15AT 2006

Codificação• Os computadores armazenam toda a informação na

forma mais elementar designada por bits.• Cada bit pode tomar dois valores distintos “1” ou “0”.

Um conjunto de 8 bits designa-se por Byte.• 1024 Bytes = 1kByte.• 1024 x 1024 Bytes = 1MByte.• 1024 x 1MByte = 1GByte.• Para armazenar informação proveniente das mais

diversas fontes é necessário codificá-la.• O conhecimento do código permite interpretar a

informação armazenada na forma binária.

16AT 2006

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

17AT 2006

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

18AT 2006

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

19AT 2006

Código ASCII (texto)• ASCII

– American Standard Code for Information Interchange

– A primeira versão 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.

20AT 2006

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

22AT 2006

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

23AT 2006

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

24AT 2006

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

25AT 2006

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

26AT 2006

Formato exponencial decimal• Em formato decimal é útil representar os

números utilizando a notação exponencial:

51022.022000

Mantissa Expoente

27AT 2006

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

28AT 2006

Ferramentas Informáticas

29AT 2006

Ferramentas Informáticas• Objectivos

– Auxiliar na resolução de problemas cuja resolução manual seja demorada

• Tipos de Ferramentas– Linguagens de programação– Análise e visualização de dados– Ambientes de cálculo

30AT 2006

Linguagens de programação• Utilizadas para realizar todo o tipo de

programas mesmo que não sejam de cálculo• Vantagens

– Grande flexibilidade– O cálculo pode ser mais rápido e eficiente

• Desvantagens– Necessidade de aprender uma linguagem– Tempo de desenvolvimento para chegar à solução

• Exemplos– Fortran, Basic, Pascal, C, Java

31AT 2006

Análise e visualização de dados• Realizam o tratamento numérico dos dados e a sua

visualização.

• Utilizadas principalmente para cálculo estatístico

• Vantagens– Fáceis de utilizar

– Obtenção rápida de resultados

– Capacidades de visualização e apresentação dos resultados poderosas

• Desvantagens– Pouco flexíveis na manipulação dos dados

– Difícil automatizar procedimentos

• Exemplos– Excel, SPSS

32AT 2006

Análise de dados com o Excel• Dados

– Vamos supor que conseguimos um ficheiro de texto com as temperaturas registadas em Lisboa durante o ano 2000.

• Objectivo– Determinar a temperatura média– A temperatura máxima– A temperatura mínima

33AT 2006

Análise de dados com o Excel

Hora Temperatura T. Máx. T. Mín. T. Méd.0 12 22 10 16,01 122 123 114 105 126 157 168 179 18

10 2211 2212 2113 2214 2215 2016 1817 1718 1719 1620 1521 1322 1323 12

0 2 4 6 8

10 12 14 16 18 20 22

0

5

10

15

20

25

Hora

Temperatura

34AT 2006

Ambientes de cálculo• Utilização fácil e aprendizagem rápida• Podem realizar cálculo simbólico e numérico• Vantagens

– Possibilidade de automatizar os cálculos

– Muito versáteis possuindo uma linguagem intuitiva

• Desvantagens– São necessários alguns conhecimentos de programação

– Mais lentos nos cálculos que as linguagens de programação

• Exemplos– Mathematica, Maple, MathCad, Matlab

35AT 2006

Mathematica• Muito divulgado para

cálculo simbólico• Igualmente poderoso

para calculo numérico• Exemplos de aplicações

– Cálculo de limites– Cálculo de derivadas e

integrais– Simplificação de

expressões algébricas– Gráficos de funções 2D e

3D

Simplificação

de expressões

Cálculo de derivadas

Cálculo de limites

36AT 2006

Matlab

•Vocacionado para o cálculo numérico

•MATLAB = MATrix LABoratory

•Os elementos são sempre matrizes numéricas•Um número é uma matriz com apenas um elemento

37AT 2006

Introdução ao Matlab

38AT 2006

O que é o Matlab ?• Aplicação informática vocacionada para o

cálculo numérico

• Aplicações

– Análise de dados

– Visualização científica

– Simulação de sistemas

39AT 2006

Demonstração• O Matlab tem um conjunto de demonstrações

que ilustram as suas possíveis aplicações.

• Para aceder à demonstração basta entrar o comando:

»demo.– Gráficos de funções– Visualização de volumes– Animações– Tutorais sobre o Matlab

40AT 2006

O ambiente gráficoJanela da comandos

Histórico dos comandos

Para mudar a pasta de trabalho

Conteúdo da pasta de trabalho

Documentação e demos dos produtos instalados

Espaço de trabalho com as variáveis

Ajuda

41AT 2006

O Matlab como calculadora• O Matlab permite o cálculo numérico directo

a partir da janela de comando.

• Operações matemáticas + soma - subtracção * multiplicação / divisão ^ potenciação

42AT 2006

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.

43AT 2006

• 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

44AT 2006

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

45AT 2006

Variáveis• No Matlab é possível guardar em variáveis

conjuntos de números, exemplo:»x= 2

• Os nomes das variáveis destinguem as letras maiúsculas das minúsculas. – Exemplo: piPi

• As variáveis são guardadas no espaço de trabalho “workspace”

• As variáveis podem ser utilizadas nas operações da mesma forma que os números.

46AT 2006

Variáveis• Apagar variáveis

– clear v1 v2 apaga as variáveis v1 e v2– clear all apaga todas as variáveis

• Ver as variáveis no espaço de trabalho (“workspace”)– whos mostra todas as variáveis do espaço de trabalho

com informação adicional de dimensão e tipo

– who mostra apenas os nomes das variáveis

• Guardar variáveis– save Guarda em disco todas as variáveis do “workspace”– load Carrega do disco as variáveis guardadas– save ficheiro v1 v2 Guarda as variáveis v1 e v2 no

ficheiro– load ficheiro Carrega as variáveis do ficheiro

47AT 2006

Vectores

48AT 2006

Vectores

Conceito geométrico de vector (duas dimensões)

V

Direcção

Módulo

x

y

b

a

(a,b)

49AT 2006

Vectores• Da figura anterior pode-se concluir que bastam

duas grandezas numéricas para representar um vector num espaço de duas dimensões.

(a,b)

50AT 2006

VectoresNum espaço com três dimensões são

necessárias três grandezas:

(a,b,c)

Generalizando, um vector com N elementos pertence a um espaço com N dimensões.

Elementos de um espaço com mais de 3 dimensões são difíceis de representar graficamente.

51AT 2006

Vectores no Matlab

No Matlab para criar um vector “v” basta fazer por exemplo:

» v= [4, 5, 4, 2, 1, 7]

Os elementos são separados por espaços ou vírgulas

52AT 2006

O operador “:”• O mais versátil operador do MATLAB

• Permite definir de forma compacta um conjunto de valores (vector) em progressão aritmética.

» % x = valor inicial : passo : valor final;

» % Nota: argumentos de “:” não podem ser complexos

» x = 1:10;

» x = -pi : 2*pi/359 : pi;

» x = 100:-2:80;

» % O recurso ao “:” não obriga à delimitação por []

53AT 2006

linspace» % Quando sabemos os limites numéricos da sequência

» % xi e xf e o número de elementos N então devemos

» % recorrer à função

» x = linspace(xi,xf,N);

» % Espaçamento linear (uniforme) entre os elementos

» de x. Evita-se o cálculo do passo.

» x = linspace(10,-10,5)

x =

10 5 0 -5 -10

54AT 2006

logspace% Quando pretendemos criar uma sequência com espaçamento logaritmico entre os valores 10^d1 e 10^d2.

% O parâmetro N especifica o número de pontos

% Exemplo: 5 pontos com espaçamento logarítmico entre os valores 10 e 100

>> logspace(1,2,5)ans = 10.0000 17.7828 31.6228 56.2341 100.0000

% Utiliza-se para a construção de gráficos com escalas logarítmicas.

55AT 2006

Gráficos

56AT 2006

Gráficos de uma Variável• Sintaxe do comando plot

v= rand(1,10);

plot(v)

Nesta versão mais simples é desenhado um gráfico de linha contínua com a amplitude dos elementos do vector v. Nas abcissas aparecem os índices dos elementos de v.

Abcissas

Ordenadas

Edição Manual das propriedades do

Gráfico

Inserção manual de texto

Inserção de setas e linhas

Zoom

Rotação 3D do gráfico

58AT 2006

Sintaxe do comando plotplot(x1,y1,x2,y2,....)

Os vectores das ordenadas x1, x2, ... podem ter um número diferente de elementos.

O número de elementos dos pares (x1,y1) e (x2,y2) deve ser o mesmo.

Exemplo:

x1= -5:5; x2= -10:10

y1= 2*x1; y2=3*x2;

plot(x1,y1,x2,y2)

59AT 2006

Exemplo

-10 -8 -6 -4 -2 0 2 4 6 8 10-30

-20

-10

0

10

20

30

60AT 2006

Alteração do aspecto gráficoPara além dos argumentos vectoriais a função plot permite ainda

alterar o modo como as linhas são desenhadas. Essas indicações são codificadas na forma de uma “string” de texto colocada a seguir aos vectores dos pontos.

plot(x1,y1,’string1’,x2,y2,’string2’,...)

A “string” pode definir os seguintes atributos das linhas desenhadas

- Marcadores dos pontos do gráfico

- Cor das linhas e marcadores

- Tipo de linha a desenhar

61AT 2006

Definição dos atributosCor Marcadores Linhas

y amarelo . ponto - linha a cheio

m rosa o círculo : ponteada c azul claro x marca x -. traço

ponto r encarnado + marca mais --

tracejada g verde * estrela b azul s quadrado w branco d diamante k preto v triângulo (cima) ^ triângulo (baixo) < triângulo (esquerda) > triângulo (direita) p pentagrama h “hexagram”

62AT 2006

Alteração do aspecto gráfico

0 1 2 3 4 5 6 7-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

w

y

Grafico de "sin(2*x)+cos(x)" e "cos(x).*sin(x)"

sin(2*x)+cos(x)cos(x).*sin(x)

plot(x1,y1, '-ob')

plot(x2,y2, '-+r')

63AT 2006

0 1 2 3 4 5 6 7-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

x

y

Grafico de sin(x) e cos(x)

sin(x)cos(x)

Legendas

ylabel('y')

xlabel('x')

title('Grafico de sin(x) e cos(x)')

legend('sin(x)','cos(x)')

64AT 2006

65AT 2006

Som em Matlab

>> Ver Matlab num Instante

66AT 2006

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

67AT 2006

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!

68AT 2006

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.

69AT 2006

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.

70AT 2006

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.

71AT 2006

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)

72AT 2006

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');

73AT 2006

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)

74AT 2006

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);

75AT 2006

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*1000*t); % sinusóide de 400Hz

sound(x,fa);

76AT 2006

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);

77AT 2006

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);

78AT 2006

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)

79AT 2006

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)