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)
Top Related