Você está na página 1de 51

Curso de MATLAB

Anlise de Sinais e Sistemas

Fabricio Breve
fabricio@dc.ufscar.br
Viso Geral
z MATrix LABoratory
z Ambiente interativo para computao envolvendo matrizes
z Desenvolvido no incio da dcada de 80 por Cleve Moler, no
Departamento de Cincia da Computao da Universidade do
Novo Mxico, EUA
z Verses mais recentes (4.0 em diante) foram desenvolvidas
pela MathWorksInc., que detm os direitos autorais destas
implementaes
z Multiplataforma:
Windows
Linux / Unix
MacOS
Solaris
Uso do MATLAB

z Matemtica e Computao
z Desenvolvimento de Algoritmos
z Aquisio de Dados
z Modelagem, Simulao e Prototipao
z Anlise, Explorao e Visualizao de Grficos
Cientficos e de Engenharia
z Desenvolvimento de Aplicativos, incluindo
desenvolvimento de interface grfica
Caractersticas

z um sistema interativo cujo elemento de dado bsico um


array que no requer dimensionamento
permite resolver muitos problemas tcnicos computacionais,
especialmente aqueles com formulao de matrizes e vetores, em
uma frao de tempo que levaria para escrever um programa em
uma linguagem escalar no interativa(como C ou Fortran)
z Tem diversos toolboxes para aplicaes especficas, incluindo:
Processamento de Sinais
Sistemas de Controle
Redes Neurais
Lgica Fuzzy
Wavelets
Simulao
Caractersticas

z Facilita programao
Economia de tempo de programao
z Mais lento que linguagens tradicionais
Interpretado
Java
Sistema MATLAB

z Ambiente de Desenvolvimento: ferramentas que facilitam o uso do MATLAB,


incluindo janela de comandos, histrico, rea de trabalho, arquivos, etc.
z Biblioteca de Funes Matemticas: coleo de algoritmos computacionais,
variando de funes elementares como soma, seno, cosseno e aritmtica
complexa at funes mais sofisticadas como matriz inversa, funes de
Bessel e Transformada Rpida de Fourier.
z Linguagem Matlab: linguagem de vetores/matriz de alto nvel com controle de
fluxo, funes, estrutura de dados, entrada/sada, e caractersticas de
programao orientada a objetos.
z Grficos:facilidades para mostrar vetores e matrizes como grficos, e tambm
anotaes e impresses destes grficos. Funes de alto nvel para
visualizao de dados bidimensionais e tridimensionais, processamento de
imagens, animao e apresentao de grficos. Inclui tambm funes de
baixo nvel para personalizar a aparncia de grficos e para implementar
interface grfica para aplicaes.
z MATLAB API: biblioteca que permite escrever programas em C e Fortran para
interagir com o MATLAB. Inclui facilidades de chamar rotinas do MATLAB (elo
dinmico), chamada do MATLAB como motor computacional e leitura e escrita
de arquivos MAT.
Ambiente de Desenvolvimento
Linguagem MatLab

z Verses da Mathworks incluem facilidades grficas,


de visualizao e impresso
z Entretanto existem interpretadores da linguagem
Matlabem domnio pblico:
MATLAB 1.0
Octave
Rlab
SciLab
z Existem ainda outros interpretadores comerciais de
Matlab
Biblioteca de Funes Matemticas

z O MATLAB incorpora diversas toolboxes com


funes genricas e especficas para diversas reas
z Apesar de o MATLAB ser um software proprietrio,
os cdigos-fonte das toolboxes podem ser
livremente visualizados e editados.
z Existem diversas toolboxes de terceiros, tanto
comerciais quanto livres.
Matrizes, Vetores e Escalares

z Atribuio
escA = 3.5
vetB = [3.5, 2.1, 10]
matC = [3.5 2.1
45]
matD = [3.5 2.1; 4 5]
z Busca de Valores por ndice
vetB(3) = 10
matC(2,2) = 5
matC(1,2) = 2.1
Executando Funes e Iniciando
Variveis

z Para digitar mltiplas linhas antes de execut-las,


digite a linha e pressione SHIFT+ENTER.
z Para que o MATLAB execute um comando sem
exibir resultado basta colocar um ponto-e-vrgula no
final do comando.
z As funes e variveis so case-sensitive
z O editor possui Syntax Highlighting e Parentheses
Matching
Operaes com Matrizes

A = [1 2 3; 4 5 6; 7 8 9]; Operadores:
B = [2 1 2; 4 1 7; 2 5 3]; + Adio
X=A+B - Subtrao
X= * Multiplicao
3 3 5 / Diviso esquerda
8 6 13 \ Diviso direita
9 13 12 ^ Potncia
Transposio
Operao Pontual

z Operao com cada elemento da matriz de


forma individual:
Multiplicao, Diviso e Potenciao
z Colocar ponto na frente do operador
A=[ 1 2 B=[ 2 2
12] 22]
A*B = [66 A.*B=[ 2 4
66] 24]
Trabalhando com Matrizes

z Operador dois pontos (:)


Criao de matriz/vetor
Seleo de partes da matriz
z Vetor de 0 a 1, incremento 0.2:
>> vetA = 0:0.2:1
vetA= 0 0.2 0.4 0.6 0.8 1.0
z Matriz 3x3 com valores de 1 a 9:
>> matA=[1:1:3; 4:1:6;7:1:9]
matA =
1 2 3
4 5 6
7 8 9
Trabalhando com Matrizes
z Operador dois pontos (:)
z Matriz 3x3, valores de 10 a 90:
>> matB= [10:10:30; 40:10:60; 70:10:90]
matB = 10 20 30
40 50 60
70 80 90
z Pegando apenas uma parte da matriz acima:
>> matC = matB(1:2,1:3)
matC = 10 20 30
40 50 60
>> matC = matB(1,:)
matC = 10 20 30
Trabalhando com Matrizes

z Sendo A uma matriz 4X4:


Soma = A(1,4) + A(2,4) + A(3,4) + A(4,4)
Soma = sum(A(1:4,4))
Soma = sum(A(:,4))
Soma = sum(A(:,end))
z Todos os comandos fazem o mesmo clculo
Exerccio 1

z Criar vetor com os 6 primeiros quadrados perfeitos


z Soluo:
>>QuadPerf = 1:6;
QuadPerf = 1 2 3 4 5 6
>>QuadPerf = QuadPerf.^2;
QuadPerf = 1 4 9 16 25 36
z Porque QuadPerf^2 = erro???
QuadPerf^2 = QuadPerf * QuadPerf;
Expandindo o tamanho de uma matriz

z Se voc tentar acessar um elemento fora da matriz, receber uma


mensagem de erro:
B = A(4,5)
Index exceeds matrix dimensions
z Se voc tentar armazenar um elemento fora da matriz, a matriz se
expande para acomodar o elemento:
B = A;
B(4,5) = 17
B=
16 2 3 13 0
5 11 10 8 0
9 7 6 12 0
4 14 15 1 17
Excluindo Linhas e Colunas

z Voc pode excluir linhas de uma matriz usando


apenas um par de colchetes. Comeando com:
X = A;
z Para deletar a segunda coluna de X usa-se:
X(:,2) = [ ]
z Se voc tentar excluir o nico elemento de uma
matriz, ela deixar de ser uma matriz, portanto essa
operao no permitida e retorna um erro.
Criando Matrizes

z magic(n): cria um matriz nxn onde a soma


de qualquer linha ou qualquer coluna
sempre igual
z zeros(m,n): matriz mxn preenchida por 0s
z ones(m,n): matriz mxn preenchida por 1s
z eye(m,n): matriz mxn identidade
z pascal(n): matriz de pascal
Comando Format

format short;
sqrt(2)

z short: 1.4142
z long: 1.41421356237310
z short e: 1.4142e+000
z long e: 1.414213562373095 e+000
z +: + (sinal)
z rat: 1393/985 (aproximao)
z hex: 3ff6a09e667f3bcd
Valores e Matrizes Especiais

z pi = 3,1416
z i, j = sqrt(-1)
z +Inf = +
z -Inf = -
z NaN = not a number
z Clock = [ano ms hora min seg]
z Date = dia-ms-ano
z Ans = armazena resposta mais recente
quando no h atribuio
Overflow e Underflow (Limites)

z Overflow (10308)
Aproxima para
x = 2e200
y = 1e200
z = x*y (2e400)
z = Inf
z Underflow (10-308):
Aproxima para 0
x = 2e-200
y = 1e200
z = x/y (2e-400)
z=0
Entrada e Sada

z Comando INPUT:
>> A = input('Digite o valor de A: ')
z Sada:
>> fprintf('texto')
z Arquivos .MAT
save
>>save matrizes A B
load
>> load matrizes
Exerccios

z 2) Calcular distncia euclidiana entre dois pontos (X e Y):


Usurio entra com os pontos
Exibir resultado na tela

d x , y = ( x1 x2 ) + ( y1 y2 )
2 2

z 3) Criar vetor de 0 a 2 com incremento de 0.2. (Este vetor


pode ser utilizado como tempo de 0 a 2s, com amostragem a
cada 0.2)
Salvar vetor em um arquivo
Criando funes em arquivos .m

function [s1,s2] = nome(e1,e2)


% Ajuda da funo

z Entradas e sadas:
s1, s2 = sadas
e1, e2 = entradas
z Variveis:
nargin = nmero de argumentos de entrada passados
nargout = nmero de argumentos de sada requeridos
Criando funes em arquivos .m

z Exemplo: funo para calcular a distncia:


function d=diste(p1,p2)
%Calcula e imprime
%distncia entre 2 pontos
if nargin = 2
d = (p1(1)-p2(1)).^2
d = d + (p1(2)-p2(2)).^2
d = sqrt(d)
end
Funes do Matlab

z abs(x): nmero absoluto


z sqrt(x): raiz quadrada
z rand(n,m): matriz aleatria
z [n,m] = size(X): tamanho de X
z round(x): inteiro + prximo
z fix(x): inteiro + prximo na direo de 0
z floor(x):inteiro mais prximo na direo de Inf
z ceil(x): inteiro mais prximo na direo de +Inf
Funes do Matlab

z sin(x), cos(x), tan(x)


z asin(x), acos(x), atan(x)
z sign(x): retorna 1 para negativo, 0 para zero, 1
para positivo
z rem(x,y): resto da diviso entre x e y (x/y)
z any(x): verdadeiro se um elemento de x for <> 0
z inv(x): inversa
z det(x): determinante
Nmeros Complexos

z real(x): retorna a parte real de x


z imag(x): retorna a parte imaginria de x
z conj(x): retorna o complexo conjugado de x
z abs(x): retorna o modulo complexo
(magnitude) de x
Grficos

z plot(x,y, );
x e y = vetores
de mesmo
tamanho
Ex:
x = 0:.1:2;
y = x;
plot(x,y);
Grficos

z plot(x,y, );
x e y = vetores
de mesmo
tamanho
Ex:
x = 0:.1:2;
y = x;
plot(x,y,'o');
Grficos

z plot(x,y, );
x e y = vetores
de mesmo
tamanho
Ex:
x = 0:.1:2;
y = x;
plot(x,y,'r*');
Grficos

z subplot(m,n,p)
Divide a janela em mxn
partes para exibir vrios
grficos ao mesmo
tempo, escolhendo a
parte p para a prxima
exibio
subplot(1,2,1);
plot(x,y);
subplot(1,2,2);
fplot('sin',[0 2*pi]);
Exerccio 4

z Plotar grfico do
Seno
Intervalo: 0 a 4
Amostragem: 0.1

t = 0:0.1:4*pi;
y = sin(t);
plot(t,y);
Grficos Mltiplas Linhas

t=0:1:360;
y1 = sin(deg2rad(t));
y2 = cos(deg2rad(t));
plot(t,y1,'r-',t,y2,'b-');
Desenvolvimento de Algoritmos

z Operadores relacionais: z Estruturas condicionais:


> - maior if (condicao)
< - menor
...
>= - maior ou igual
elseif (condicao)
<= - menor ou igual
== - igual ...
~= - diferente else
z Operadores lgicos: ...
& -E end
| - Ou
~ - No
Desenvolvimento de Algoritmos

z Estruturas condicionais: z Estruturas de repetio:


switch (argumento) for (i=n : N)
case (condicao) [break]
... [continue]
otherwise end
... while (condio)
end [break]
[continue]
end
Evitando Loops

z Loops so lentos:

for i=1:1000, x(i) = sin(2*pi*i/100);

z Pode ser substitudo por:

x = sin(2*pi*[1:1000]/100);
Estatstica

z max(x) mximo
>> x = 1:4;
z min(x) mnimo x = [1 2 3 4]
z mean(x) mdia >> sum (x)
10
z median(x) mediana >> cumsum(x)
z std(x) desvio padro [1 3 6 10]
>> prod(x)
z var(x) varincia 24
z sum(x) soma >> cumprod(x)
[1 2 6 24]
z cumsum(x) soma cumulativa
z prod(x) produto
z cumprod(x) produto cumulativo
z sort(x): ordena x
Outros Comandos

z who: exibe as variveis


z whos: exibe as variveis e seus contedos
z clear: limpa a memria
z exit/quit: finaliza o Matlab
z clf: limpa a tela de trabalho
z gcf: coloca a figura atual (grficos, etc.) em 1 plano
z cfg: limpa a figura atual
z ls / dir: lista o contedo da pasta atual
z help / help [comando]: exibe ajuda
Toolbox: Processamento de Sinais

z Suporta operaes com sinais, desde a gerao at


filtragem, modelagem e anlise espectral
Filtros digitais e analgicos
Implementao de filtros digitais
Transformadas
Processamento estatstico
Modelagem paramtrica
Predio linear
Gerao de sinais
Representaao de Sinais

z Sinais so
representados por
vetor

2 n, 3 n 3
x[n]
0, otherwise

n = -3:3
x = 2*n;
stem(n,x);
Gerao de Sinais

x(t ) = sin

j 8
n

4 x (n )=


e
z cria um vetor tempo z cria um vetor tempo
t = -5:5; t = 0:32;
z e a representao do z e a representao do
sinal sinal
s = sin(pi*t/4); x = exp(j*(pi/8)/n);
Geraao de Sinais

z Gerando dados com


freqncia de
amostragem 100Hz
Vetor tempo: t=0:0.01:1
Sinal constitudo de 2
senoidais com
frequncia de 50Hz e
120:
y = sin(2*pi*50*t) +
sin(2*pi*120*t);
plot(t(1:25),y(1:25));
Gerao de Rudo

z randn: gera matriz


aleatria com
distribuio gaussiana
yn = y + randn(size(t))
% adiciona rudo
aleatrio
Seqncias Comuns

z Impulso unitrio:
t = 1:100;
y = [1; zeros(99,1)];
z Degrau:
t = 1:100;
y = ones(100,1);
z Rampas:
t = (0:0.001:1)';
y = t;
y = t.^2;
Convoluo e Filtragem

z conv(x,y)
A sada de um filtro digital y(k) representa a sua
entrada x(k) convoluda com sua resposta
impulsiva h(k)
se a entrada x(k) e a resposta impulsiva h(k) do
filtro so finitas, podemos usar conv para
implementar um filtro
x = randn(5,1);
h = [1 1 1 1]/4;
y = conv(h,x);
Transformada Rpida de Fourier

z fft(x,N) - transformada rpida de Fourier


z ifft(X,N) - transformada rpida de Fourier
inversa

z x - sinal
z N - quantidade de pontos (deve ser
potncia de 2 para FFT)
Transformada Rpida de Fourier

t = 0:0.001:0.6; Y = fft(y,512);
x = sin(2*pi*50*t)+sin(2*pi*120*t); Pyy = Y.* conj(Y) / 512;
y = x + 2*randn(size(t)); f = 1000*(0:256)/512;
plot(1000*t(1:50),y(1:50)) plot(f,Pyy(1:257))
title('Sinal Corrompido com Rudo Aleatrio e Mdia Zero') title(Conteudo de Frequencia de y')
xlabel('tempo (milisegundos)') xlabel('frequencia (Hz)')
Mais MATLAB

z http://www.mathworks.com
z http://www.mat.ufmg.br/~regi/topicos/intmatl.
html
z http://www.math.ufl.edu/help/matlab-tutorial/
z http://www.dc.ufscar.br/~mauricio/

Você também pode gostar