Você está na página 1de 57

Processamento de Imagens: Métodos e Análises

Márcio Portes de Albuquerque e Marcelo Portes de Albuquerque


mpa@cbpf.br e marcelo@cbpf.br

Centro Brasileiro de Pesquisas Físicas – CBPF/MCT


Coordenação de Atividades Técnicas - CAT
Rua Dr. Xavier Sigaud n.150 – 22290-180 – Rio de Janeiro - Brasil

Resumo

Neste artigo procuramos dar uma visão da área de processamento digital de imagens e suas aplicações. Abordamos
conceitos importantes sobre a representação espacial de um pixel, a medida de distâncias, a segmentação de uma
imagem e o reconhecimento de formas. Utilizamos situações reais para exemplificarmos as técnicas apresentadas.
É nosso objetivo abordar de forma introdutória e simplificada o tema. Ao final discutimos sobre os diversos pacotes
existentes para processamento digital de imagens e apresentamos uma bibliografia útil para se aprofundar em
processamento de imagens e visão por computador.

I. Introdução
O Processamento de imagens é certamente uma área em crescimento. Diversos temas
científicos são abordados e em alguns casos de caráter interdisciplinar. Entre eles podemos citar: a
compreensão de imagens, a análise em multi-resolução e em multi-frequência, a análise estatística, a
codificação e a transmissão de imagens, etc. Mas o que faz do processamento de imagens uma
disciplina tão particular e complexa ? O que faz com que não tenhamos ainda sistemas de alta
performance de reconhecimento de caracteres ou de formas mais complexas ? A resposta a estas
questões serão discutidas ao longo deste artigo onde apresentaremos problemas e aplicações que
demandam técnicas especializadas de processamento de imagens com o intuito de compreender e
responder a estas questões.

A disciplina “Processamento de Imagens” vem na realidade do Processamento de Sinais. Os


sinais, como as imagens, são na realidades um suporte físico que carrega no seu interior uma
determinada INFORMAÇÃO. Esta INFORMAÇÃO pode estar associada a uma medida (neste caso falamos
de um sinal em associação a um fenômeno físico), ou pode estar associada à um nível cognitivo (neste
caso falamos de conhecimento). Processar uma imagem consiste em transformá-la sucessivamente
com o objetivo de extrair mais facilmente a INFORMAÇÃO nela presente. Cabe neste momento fazer uma
comparação entre o Processamento de Imagem e área de Computação Gráfica, técnica que
encontramos freqüentemente aplicadas através de seqüências animadas na televisão ou em filmes de
cinema. A Computação Gráfica parte de uma INFORMAÇÃO precisa para obter uma imagem ou um filme.
O Processamento de Imagens parte da imagem (de uma informação inicial que é geralmente captada
por uma camera) ou de uma seqüência de imagens para obtermos a “INFORMAÇÃO”. Deste ponto de
vista o Processamento de Imagens e a Computação Gráfica são exatamente métodos opostos, mas
isto não quer dizer que as técnicas envolvidas em cada caso não possam ser as mesmas ou pelo
menos complementares [1, 2 e 3]. É evidente que neste sentido processar uma imagem, como é feito
pelo sistema visual humano (SVH), é extremamente complexo [4, 5, 6 e 7]. Realizar as mesmas tarefas
que o SVH, com a ajuda de máquinas, exige por antecedência uma compreensão “filosófica” do mundo
ou dos conhecimentos humanos. Esta característica faz com que o processamento de imagens seja,
atualmente, uma disciplina com extrema dependência do sistema no qual ele está associado, não
existindo no entanto uma solução única e abrangente para todos os problemas. Daí a NÃO existência,
até o momento, de sistemas de análise de imagens complexos e que funcionem para todos os casos.

A analise quantitativa e a interpretação de imagens representa atualmente um ponto de apoio


importante em diversas disciplinas científicas. Tal é o caso por exemplo na ciência dos materiais, na
biofísica, na medicina, na física da matéria condensada, etc. Na realidade a diversidade de aplicações
do processamento de imagens, está associada diretamente a análise da INFORMAÇÃO que falamos
acima. Pois em todas estas disciplinas estamos na realidade em busca de informações quantitativas
que representem um fenômeno estudado. Quando observamos do ponto de vista da ótica, uma
imagem é um conjunto de pontos que convergem para formar um todo, mas podemos dizer de uma
maneira mais ampla que uma imagem é o suporte para efetuarmos troca de INFORMAÇÕES. O termo
imagem estava inicialmente associado ao domínio da luz visível, porém atualmente é muito freqüente
ouvirmos falar de imagens quando uma grande quantidade de dados estão representados sob a forma
bidimensional (por exemplo: as imagens acústicas, sísmicas, de satélites, infravermelhas, magnéticas
etc). Os métodos recentes de exploração automática desta informação permitiu o desenvolvimento de
técnicas complexas, que podem ser globalmente classificadas em duas grandes linhas. A primeira está
associada a uma ANÁLISE da informação e a segunda representa as técnicas que permitam obter uma
MELHORIA (do termo em inglês “ENHANCEMENT”) significativa da imagem. Nos parágrafos posteriores
vamos discutir cada uma destas linhas.

I.1 - Análise

O termo análise está relacionada a parte do tratamento onde existe uma descrição da
INFORMAÇÃO presente na imagem. Esta parte é chamada de parametrização e é nela que várias
medidas quantitativas (parâmetros) são utilizadas para descrever diferentes informações dentro de uma
imagem. Algumas aplicações típicas são: a determinação do número de células presentes em um
tecido biológico, o cálculo das formas dos contornos de uma célula ou ainda a determinação da
distribuição de uma população específica de um conjunto de células. As técnicas dedicadas a análise
de imagens podem variar significativamente segundo a sua complexidade e a necessidade em tempo
de processamento. E nesta área que vamos encontrar um nível elevado de complexidade no
tratamento da informação. Um exemplo prático e quando da classificação automática de células
doentes dentro de um conjunto de células observadas em microscopia. Esta análise específica
demanda soluções dadas pelas técnicas de “CLASSIFICAÇÃO E RENCONHECIMENTO DE FORMAS”, que
discutiremos brevemente posteriormente neste artigo. Neste caso devemos rapidamente medir vários
parâmetros, pertinentes ao problema, na imagem, como por exemplo: a superfície, a forma de cada
célula, sua quantidade, o número de células vizinhas a uma dada célula e a densidade de células em
uma dada região. Em seguida comparamos estas medidas com várias classes de células organizadas
em uma base de dados, catalogadas anteriormente. Obteremos então uma classificação das células
com uma dada probabilidade de serem células doentes ou normais.

I.2 - “Image Enhancement”

O termo “enhancement” esta associado a melhoria da qualidade de uma imagem, com o


objetivo posterior de ser julgado por um observador humano. De uma forma geral nós vamos trabalhar
nos níveis de cinza da imagem, transformando-os para aumentar o contraste ou para colocar em
evidência alguma região de interesse particular. Alguns exemplos deste tipo de técnica é a subtração
da imagem por uma imagem referência, a utilização de cores-falsas, a utilização de filtros espaciais, a
correção de deformações espaciais devido a ótica ou devido a uma variação de inomogeneidade da
iluminação de fundo. Os sistemas dedicados a melhorar a qualidade da imagem trabalham geralmente
muito rápido, pois são construídos em “hardware” ou “firmeware”, permitindo rapidamente ao usuário
um julgamento sobre várias imagens processadas, segundo o tipo de tratamento. Esta técnica é

2
encontrada na maioria dos programas de tratamento de imagens ou fotografias que estão atualmente
no mercado, mas com algoritmos implementados em software, para computadores do tipo PC.

I.3 - Sistema Geral de Visão

Um sistema geral de visão, isto é, um sistema que deve responder a todas as situações, como
é o caso do Sistema Visual Humano, é extremamente desenvolvido e complexo. O interesse em se
compreender um tal sistema é fundamentalmente de orientar a pesquisa de uma máquina de
reconhecimento genérica com as mesmas características do SVH. Atualmente algumas correntes
científicas consideram o cérebro humano uma máquina com grande capacidade de explorar as
informações sensoriais. Filosoficamente não se pretende, com estas linhas de pesquisas, retirar as
qualidades humanas associadas ao cérebro ou aos homens. Mas devemos atentar para alguns pontos
fundamentais: os computadores atuais são extremamente eficientes para trabalharem com base de
dados, cálculos numéricos e formais, mas eles não conseguem realizar eficientemente algumas tarefas
“simples” realizadas por animais e seres-humanos. Fica então uma questão, que é parte integrante das
linhas de pesquisas modernas em processamento de imagens: Seria realmente o computador a
maquina mais adaptada para resolver estes problemas ? Um exemplo prático é o processo de
reconhecimento de uma pessoa pelo SVH. O trabalho realizado pelo cérebro nos parece muito simples
e bastante elementar; porém uma análise detalhada mostra que o cérebro humano é capaz, a partir de
uma grande quantidade de informações de luminância e crominância (captada pelos olhos) de realizar
esta tarefa de reconhecimento em apenas 150ms. Os computadores atuais são na pratica sistemas
experimentais que nos ajudam a melhor compreender estas tarefas e consequentemente modelizá-las
e reproduzí-las.

I.4 - Sistemas Experimentais

Quando o sistema se restringe a sistemas experimentais, isto é, ele é orientado para a solução
de um problema específico, a tarefa prática é de uma certa forma simplificada, pois poderemos
controlar alguns parâmetros que um sistema geral de visão não tem acesso. A dificuldade está no fato
de que devemos dar uma descrição objetiva ao problema e para aquelas análises que são científicas é
ainda importante que esta descrição seja quantitativa. O objetivo neste caso é desenvolver um sistema
de tratamento da informação onde cada fase vai exigir métodos para retirar da imagem os parâmetros
que exprimam esta informação. Fica assim evidente que o processamento de imagens, quando
associado a sistemas experimentais, é bastante dependente do problema a ser resolvido. Neste
instante as fases de pré-tratamento (seja na imagem ou fora dela, como por exemplo o controle da
iluminação externa) podem ter um peso importante quando queremos aumentar a performance
computacional do sistema. Um sistema de processamento de imagens pode ser de uma maneira geral
dividido nas seguintes etapas:

3
ETAPA DESCRIÇÃO
Correção de iluminação, uso de colorantes químicos,
1. Tratamento fora da imagem
etc.
2. Aquisição da imagem Amostragem, armazenamento e compactação.
3. Melhoramento (“image enhancement”) * Pré-tratamento digital da imagem.
4. Segmentação da informação * Extração dos “objetos” do “fundo” da imagem
Determinação de grandezas sobre cada “objeto”:
5. Parametrização * área, perímetro, forma, descrição estrutural,
topologia, etc
6. Reconhecimento * Classificação dos “objetos”
Análise Quantitativa: * Associação das grandezas ao problema:
7. Aplicação da ferramenta a outras áreas determinação de funções de correlação espacial ou
científicas. temporal, análise de seqüência de imagens, etc.
* - Fases com extrema dependência ao problema onde o Proc. de Imagens está aplicado.

Discutimos até aqui questões importantes e essenciais para a compreensão de um sistema de


processamento de imagens quando utilizado como ferramenta para a solução de um determinado
problema. Nos pontos seguintes vamos entrar mais em detalhes nas técnicas de processamento e em
especial discutiremos os elementos principais de um sistema digital de processamento de imagens.
Discutiremos também as técnicas e os problemas que podemos encontrar na implementação de
sistemas de processamento de imagens: como a discretização, a medida de distâncias em imagens
digitais, a conectividade entre pixels etc. Veremos ao final técnicas de filtragem espacial, segmentação
de imagem e reconhecimento de formas.

II - Sistema de Processamento de Imagens

Um sistema de processamento de imagens pode ser dividido em diversos componentes


independentes, como mostrados na figura 1.

Figura 1 - Diagrama em blocos de um sistema genérico de processamento de imagens. O retângulo


pontilhada indica as partes encontradas atualmente nos sistemas de processamento de imagens comercializados. O
poder do processamento esta associado a potencialidade do processador gráfico e a capacidade de estocagem de
imagens na memória principal. A organização desta memória pode variar segundo a resolução ou a necessidade de
estocagem de grande quantidades de imagens. Veja o texto para maiores detalhes.

4
O módulo de entrada é constituído por uma camera que capta a imagem real de uma cena.
Esta camera envia a informação sob a forma de sinal analógico de vídeo, à um conversor analógico
digital. A imagem é então representada na forma digital. Uma imagem digital é discretizada
espacialmente (ou seja em x e y) e em luminância (níveis de cinza). A título de exemplo, uma imagem
típica de 640x480 por 256 níveis-de-cinza tem 307.200 bytes. Alguns exemplos de módulos de
aquisição são: as cameras à tubo (Vidicom) ou CCD, os scanners ou ainda alguns sensores dedicados
(como sistemas de infravermelho, mapeamento magnético de uma superfície, sensoriamento de
radares, etc). A camera de vídeo é o sensor de aquisição de imagem mais freqüentemente utilizado.
Uma camera de vídeo apresenta características de sensibilidade, resolução e função de transferência
(entre a imagem captada da cena e a intensidade do sinal de vídeo fornecido). Algumas cameras mais
sofisticadas permitem ainda controlar o “offset” ou ganho do sinal de vídeo, possibilitando uma correção
do contraste da imagem em tempo real. Em alguns casos podemos encontrar módulos que permitem o
ajuste da iluminação de fundo ou ainda realçar os contornos dos objetos através da execução de
funções específicas [2].

O sinal de vídeo gerado pelo dispositivo de aquisição é convertido em sinal discreto pelo
conversor A/D. Este conversor é um dispositivo de conversão especial para sinais de vídeo, onde a
aquisição é realizada segundo a padronização do sinal de vídeo (linha a linha). Após a conversão da
imagem pelo módulo de conversão analógica digital, cada intensidade indexa uma tabela de conversão.
Esta tabela é conhecida como "Look-up table" ou simplesmente LUT. As LUTs são na realidade
memórias que possibilitam a modificação das intensidades adquiridas por valores pré-programados.
Podemos por exemplo configurar uma LUT com uma função específica e corrigir, em tempo real, o
contraste de uma imagem que esta sendo adquirida pelo ADC. A imagem digital é em seguida
armazenada em uma memória principal de acesso exclusivo de um processador gráfico. Este
processador é bastante dependente do sistema de processamento de imagens utilizado. Em alguns
casos, por questões de custos, ele pode mesmo não existir, deixando todo o processamento para o
processador principal no computador de controle.

Neste texto considerarmos somente imagens em níveis de cinza, pois grande parte dos
algoritmos de análise de imagens coloridas são feitas recombinando as componentes de cores e
trabalhando com a informação de luminância somente. No caso de imagens coloridas cada
componente da imagem ("Red", "Green" e "Blue") é armazenada separadamente na memória principal.

A imagem de saída é geralmente reconstruída através de conversores digitais /Analógicos


(DAC), onde são somados pulsos de sincronização para geração do sinal de vídeo. Este formato de
sinal é bastante utilizado por ser padrão adotado por todos os fabricantes de equipamentos de vídeo.
Antes de ser reconvertido o sinal pode passar por outra LUT, desta vez a LUT de saída, que é uma
tabela de indexação dos níveis de cinza na imagem para os níveis de saído enviado ao display gráfico.
Podemos por exemplo configurar esta tabela com falsas cores e observarmos "on-line" diferentes
regiões com cores diferentes. A figura 2 apresenta um exemplo da técnica de "falsas cores" usada em
uma imagem de aglomerações de líquidos magnéticos. As células observadas na figura correspondem
a uma maior densidade do líquido magnético, observada através de uma técnica conhecida como
Densimetria. A fonte luminosa envia um feixe de luz através do líquido. Cada pixel na imagem digital

5
representa na realidade uma medida da absorção da luz pelo líquido. Nas regiões mais escuras a
absorção da luz é maior, nas mais claras esta é menor. As falsas cores permitem rapidamente
relacionar as regiões equivalentes (em intensidade luminosa) em diferentes partes da imagem.

Figura 2 - Uso de falsas cores : A imagem da esquerda corresponde a uma estrutura hexagonal de um
liquido magnético semi-transparente observada em detalhes. Cada célula apresenta aproximadamente 0.5cm de
diâmetro. Cada ponto da imagem corresponde a uma medida de absorção da luz. A absorção é maior no centro das
células que nas suas bordas. Numa imagem em níveis de cinza é praticamente impossível identificar as mesmas
intensidades (absorção) em diferentes objetos. A imagem da direita corresponde a mesma da esquerda, mas com
uma LUT de cores. Cada nível, ou regiões contíguas são associadas a diferentes cores, indo do preto ao amarelo,
passando pelo vermelho.

III - Pixel e Conectividade.

Um pixel ("picture element" ou "pel") é o elemento básico em uma imagem. A forma mais
comum para o pixel é a forma retangular ou quadrada. O pixel é também um elemento de dimensões
FINITAS na representação de uma imagem digital. Freqüentemente, a organização de uma imagem
sob a forma de uma matriz de pixels é feita em uma simetria quadrada, i.e., na forma de um tabuleiro
de xadrez. Isto se deve a facilidade de implementação eletrônica, seja dos sistemas de aquisição seja
dos sistemas de visualização de imagens. É importante lembrar que este tipo de organização provoca o
aparecimento de dois problemas importantes nas técnicas de processamento. Em primeiro lugar um
pixel não apresenta as mesmas propriedades em todas as direções, i.e., ele é anisotrópico. Esta
propriedade faz com que um pixel tenha 4 vizinhos de borda e 4 vizinhos de diagonal. Esta propriedade
nos força a definir o tipo de conectividade que vamos trabalhar, ou D4 (onde levamos em consideração
apenas os vizinhos de borda) ou em D8 (onde levamos em consideração os vizinhos de borda e os de
diagonal). O segundo problema é conseqüência direta do primeiro, ou seja as distâncias entre um
ponto e seus vizinhos não é a mesma segundo o tipo de vizinho (ela é igual a 1 para vizinhos de borda
e 2 para aqueles na diagonal). Alguns tipos de algoritmos que são sensíveis a este problema são : as
operações morfológicas que usam uma matriz de análise do tipo 3x3, as operações de esqueletização
em análise de formas e principalmente as transformações de Distâncias (na transformação de distância
cada ponto da imagem ao invés de representar uma intensidade luminosa, representa uma distância de
um dado ponto referência ao ponto calculado). A solução para este tipo de representação discreta da
imagem, é a correção dos valores calculados através de máscaras (pequenas matrizes) que ajustam ou
ponderam estas distâncias em função da direção. O leitor deve atentar para as possíveis complicações
em medidas de distâncias quando trabalhamos com um pixel que não seja de forma quadrada.

Região de Interesse

Um conceito importante em processamento de imagens é a Região de Interesse. Entende-se


como Região de Interesse (ROI - "Region Of Interest" ou AOI - "Area Of Interest") a região definida

6
automaticamente a partir de parâmetros obtidos na própria imagem (ou por um usuário) onde o
processamento estará totalmente concentrado. Podemos, por exemplo, definir uma região de interesse
onde sabemos por antecedência que a iluminação de fundo é constante ou foi corrigida. Normalmente,
nas técnicas de processamento de imagens iremos sempre encontrar problemas no tratamento das
bordas da imagem. A criação de regiões de interesse faz com que apareçam também problemas nas
bordas das regiões de interesse. A solução deste problema é completamente dependente do problema
ao qual o processamento de imagens esta associado, i.e., ao que conhecemos e podemos levar em
consideração anteriormente ao processamento.

IV - Distâncias

Quando trabalhamos com imagens é muito freqüente medirmos distâncias. Em muitos casos
usamos a definição clássica de distância euclidiana entre dois pontos. Porem devido aos problemas
apresentados no parágrafo anterior se torna evidente que a simetria quadrada interfere na execução de
alguns algoritmos. Existem diferentes medidas de distância em função da conectividade utilizada. Por
exemplo se considerarmos dois pontos p(x,y), q(s,t), da figura 3, teremos as seguintes definições de
distância.

Figura 3 - Conexão entre dois pontos p(x,y) e q(s,t). A distância entre estes dois pontos pode
ser determinada de diversas maneiras. Os números 1 e 2 representam os pixels que seriam percorridos
somente uma vez nas duas representações possíveis quando saímos de p para q. O número 3 indica
os pixels percorridos pelos dois caminhos.

• Distância Euclidiana : De( p, q ) = ( x − s) 2 + ( y − t ) 2

• D4 ou Distância “Manhattan” : D4( p , q ) = x − s + y − t . É importante lembrar que em


D4 só podemos nos movimentar para a horizontal e para vertical. Os caminhos mostrados
pela figura 3 não servem para D4.

• D8 ou Distância Tabuleiro de Xadrez: D8( p , q ) = Max ( x − s , y − t ) . Veja os dois


caminhos representados na figura 3.
Por exemplo, considere a medida do perímetro de uma determinada forma, como aquela
mostrada na figura 4. Em uma imagem digital o perímetro de uma determinada forma corresponde a
contagem dos pixels pertencente a borda do objeto. É importante lembrar que em alguns casos, antes
de realizarmos a medida de distâncias devemos antes isolar a forma do resto da image (discutiremos
este tópico no capitulo dedicado a Segmentação). Devemos conectar todos os pixels que pertençam ao
seu contorno para em seguida podermos medir o seu perímetro. Na forma representada na figura 4
estamos supondo já conhecermos todos os pontos que pertençam a sua borda, para em seguida
calcularmos o seu perímetro.

7
Figura 4 - Determinação do perímetro de uma forma usando conectividade D8. Após isolar o objeto do
fundo da imagem, devemos identificar os pontos que pertençam ao seu contorno. Escolhemos um ponto inicial ao
acaso e em seguida estes pontos devem ser conectados para efetuarmos o cálculo do seu comprimento. O leitor
deve atentar para o fato de que segundo o tipo de conectividade adotada (D4 ou D8) teremos valores diferentes
para o perímetro.

V - Filtragem

Em processamento de imagens, os filtros lineares são geralmente descritos através de


matrizes de "convolução". Não iremos aqui entrar em detalhes de filtros lineares, pois este assunto foge
ao escopo deste artigo, mas apenas descrever basicamente alguns pontos importantes em filtragens.
Maiores detalhes sobre este assunto pode ser encontrado em [1, 8 e 9]. Um filtro numérico vai
influenciar a variação da freqüência espacial em uma imagem. Na freqüência temporal a escala usada
é geralmente o Hertz (s-1), em uma imagem usamos o 1/metro (m-1) ou 1/pels (pix-1). O termo
freqüência espacial é análogo ao termo freqüência temporal e ela descreve a velocidade de
modificação de uma luminosidade em uma direção em uma imagem.

Na prática, para realizarmos uma operação de filtragem espacial, devemos escolher uma
matriz de dimensão n x n com valores que dependem do filtro que queremos usar, seja ele passa baixa
(filtrando as altas freqüências), passa faixa (filtrando uma região específica de freqüências espaciais)
ou passa alta (filtrando as baixas freqüências). Em uma imagem, as altas freqüências correspondem as
modificações abruptas dos níveis de cinza, i.e., as bordas dos objetos. As baixas freqüências
correspondem as variações suaves dos níveis de cinza. Logo quando queremos evidenciar os
contornos de um determinado objeto podemos usar filtros do tipo passa-alta. Em outros casos podemos
estar interessado na forma da iluminação de fundo, onde devemos usar filtros passa-baixa para
eliminarmos todas as altas freqüências correspondendo a borda dos objetos, e chegar a iluminação de
fundo.

Resumidamente na figura 5 apresentamos 3 filtros clássicos representados em uma pequena


matriz 3x3 e seu efeito numa imagem exemplo (Fig. 5a). Toda as operações realizadas consistem em
gerar uma nova imagem onde cada ponto desta imagem corresponde a uma soma dos produtos termo
a termo da matriz 3x3 com imagem original. Por exemplo a aplicação do filtro Médio (todos os
elementos iguais a 1 - Fig. 5b) em uma imagem, eqüivale a um imagem final onde cada pixel
corresponde a media local, na imagem original, dele com os 8 pixels vizinhos. Veja o seu efeito na
figura 5b. Considere agora o efeito do filtro passa-alta da figura 5c. Todas as variações fortes
horizontais, que correspondem as bordas horizontais do objeto, ficaram na imagem final filtrada. Não
detalhamos aqui os problemas de representação em números inteiro dos níveis de cinza e de
operações em "ponto flutuante", como média ou médias ponderadas. Neste caso os valores da nova
imagem devem ser truncados ou renormalizados em função dos valores máximos e mínimos
trabalhados.

8
1 1 1 -1 -1 -1 0 -1 0
1 1 1 0 0 0 -1 + 5 -1
1 1 1 +1 +1 +1 0 -1 0

(a) (b) (c) (d)

Figura 5 - Matrizes para Filtragem de uma imagem. (a) - Imagem original. (b) - A imagem eqüivale à um filtro
Médio (passa-baixas). Os contornos perdem ligeiramente a nitidez. (c) - Filtro de detecção de variações bruscas no
sentido horizontal (Passa-Alta). (d) - Filtro também Passa-Alta que melhora o contraste da imagem realçando os
contornos do objeto.

VI - Segmentação

A segmentação consiste na primeira etapa de processamento da imagem quando


consideramos uma análise do ponto de vista da INFORMAÇÃO nela presente. O termo segmentação
vem do termo em inglês "image segmentation", criado durante os anos 80 [11]. Esta área representa
até hoje uma linha de pesquisa importante do processamento de imagens, principalmente por ela estar
na base de todo o processamento da informação em uma imagem.

Segmentar consiste na realidade em dividir a imagem em diferentes regiões, que serão


posteriormente analisadas por algoritmos especializados em busca de informações ditas de "alto-nível".
Por exemplo cada pixel na imagem da figura 2 poderia ser segmentadas em duas regiões: aqueles
pertencentes as células e aqueles pertencentes ao fundo da imagem. A imagem obtida neste caso é
composta por apenas duas regiões, por exemplo uma região branca (fundo) e outra preta
(células/objeto). Esta imagem, com 2 níveis de cinza, é conhecida como Imagem Binária. Devido as
grandes facilidades na manipulação deste tipo de imagens, principalmente porque reduzimos
significativamente a quantidade de dados, elas são freqüentemente utilizadas no processo de
tratamento da informação.

Existem diversas técnicas de segmentação de imagens, mas não existe nenhum método único
que seja capaz de segmentar todos os tipos de imagem. Globalmente, uma imagem em níveis de cinza
pode ser segmentada de duas maneiras: ou consideramos a semelhança entre os níveis de cinza ou
consideramos as sua diferenças. A detecção de um contorno de um objeto, através de matrizes do tipo
Passa-Alta, é um exemplo de técnicas baseado nas diferenças. Neste caso estamos segmentando as
imagens em regiões que pertencem a borda do objeto.

VII - Reconhecimento

Reconhecimento é a parte do processamento que vai classificar os objetos a partir de


informações encontradas na imagem, geralmente tendo como apoio uma base de conhecimento
previamente estabelecida [6]. Esta fase é normalmente aplicada após uma fase de segmentação e

9
parametrização da imagem. A fase de parametrização identifica e calcula parâmetros nos objetos
segmentados. Um exemplo de parâmetros pertinentes a um objeto é o seu perímetro ou sua área [12].

A figura 6a apresenta uma imagem onde estão presentes duas classes, facilmente
identificadas pelo SVH. Para construir um sistema de decisão que seja capaz de identificar estes dois
objetos devemos segmentar a imagem em regiões: objeto e fundo. Os objetos da imagem
correspondem às áreas dos pixels situados na região escura da imagem. O fundo correspondem
aqueles pixels situados nas áreas claras da imagem. Esta etapa é realizada através da criação de uma
imagem binária onde classificamos dois níveis, aqueles correspondentes ao objeto e ao fundo. Em
seguida devemos atribuir a cada região contígua de pixels, na área pré-classificada “objeto”, um
indicador (“label”) que os identifica, figura 6b. Nestes objetos, definidos ainda por uma área contígua de
pixels, podemos aplicar algoritmos que executem medidas específicas, como área (A), perímetro (P),
posição na imagem (xc,yc), número de furos, retângulo ou elipse que melhor se adapta a figura, etc.
Adotamos aqui dois parâmetros específicos para criar um espaço de medias, são eles: a relação entre
os eixos menor (b) e maior (a) da ELIPSE que melhor se aproxima do objeto e o FATOR DE FORMA (FF). O
fator de forma é um parâmetro definido pela equação:
2
FF = P /(4π A)

O valor de FF tenderá para 1 toda vez que a figura se aproximar de um circulo ideal. A figura
6c apresenta este espaço de medida para dois tipos de parâmetros. Os pontos presentes na figura
representam diversos objetos da mesma classe, sendo os apresentados em negrito aqueles da figura
6a. A realização de medidas, destes parâmetros na imagem, pode se tornar imprecisa, principalmente
devido ao processo de binarização da imagem. A qualidade final da imagem binária é diretamente
dependente da qualidade de iluminação da mesma. Um bom espaço de medidas significa na prática
um eficiente sistema de reconhecimento de formas, e este deve ser o mais independente possível dos
erros provenientes da segmentação ou da parametrização. A figura 6c apresenta uma função
discriminante que permite separar as duas populações de pontos. No caso de utilização de mais
parâmetros para auxiliar a identificação esta função será um hiper-plano no espaço.

É importante ressaltar que para diferenciarmos as duas classes da figura 6 poderíamos utilizar
apenas um dos dois parâmetros, reduzindo o espaço 2D em um único eixo. Porem as duas nuvens de
pontos passariam a estar muito próximas uma da outra podendo o resultado ser comprometido pela por
esta redução. Devemos ressaltar que espaços de medidas são muito importantes e utilizados em
reconhecimento de formas, seja por métodos clássicos ou aqueles que usam métodos baseados em
Redes Neurais.

(a) (b)

10
12

10 Classe das
Canetas
8

Elipse (a/b)
6

Classe dos
4 Alicates

4 5 6 7 8 9 10 11 12
Fator de Forma

(c)
Figura 6 - Uso de “espaço de medidas” no reconhecimento de duas Formas. (a) Imagem original com a
presença de duas classes de objetos: canetas e alicate. (b) A imagem foi binarizada e os “objetos” receberam um
identificador (“label”). (c) Os parâmetros são obtidos de cada um dos objetos identificados e o espaço de medidas
separa as duas classes. Na imagem observamos uma população de pontos que caracterizam a região que
corresponde a classe. Os três pontos em destaque identificam os três objetos da figura original. Veja o texto para
maiores detalhes.

VIII - Conclusão

Neste artigo discutimos técnicas básicas e introdutórias de processamento de imagens e


quando foi o caso exemplificando-as diretamente em uma imagem. Devemos lembrar que na prática o
processamento de imagens é uma técnica extremamente dependente do problema que queremos
resolver. Muitos dos procedimentos usados em processamento de imagens ou visão por computador
podem ser caracterizados de rudimentares ou mesmo artezanais quando comparados ao complexo
sistema visual humano, pois serão específicos para cada aplicação.

Normalmente as técnicas de processamento de imagens estão baseadas em métodos


matemáticos que permitem descrever quantitativamente imagens das mais diversas origens. Uma
imagem pode, de alguma forma, ser descrita independentemente do que ela representa e, a princípio
todos os parâmetros que tem uma característica bidimensional ou topológico são convenientes. Em
cada objeto definido em um espaço 2D nós podemos efetuar medidas de superfície, perímetros,
comprimentos, espessura, posição, etc, e em seguida deduzir grandezas estatísticas de uma forma
automática. É importante ressaltar que a análise automática é imprescindível quando queremos efetuar
transformações sucessivas na imagem.

Informações sobre equipamentos: O investimento em equipamento de processamento de


imagens são ainda muito caros. Um hardware dedicado de processamento de imagens com um bom
software de análise pode custar mais de R$100.000, (e são dificilmente encontrados no Brasil). Alguns
fabricantes importantes de sistemas de processamento de imagens são: Data Translation, Matrox e a
Hamamatsu. Do ponto de vista do grande público podemos encontrar sistemas de processamento de
imagens mais simples, mas em geral muito dependente do processador do computador onde esta
associado a placa de processamento. Um sistema barato pode custar na faixa de R$3.000, permitindo
apenas a aquisição e alguns tratamentos que visam melhorar a qualidade visual da imagem. É
importante lembrar que existe, para o ambiente Mac-OS e Unix, sistemas de boa qualidade de domínio
público. Para o Macinstosh o software é o NIH-Image do Instituto Americano de Saúde ("National

11
Institute of Health") ver : ftp anonymous : zippy.nimh.nih.gov (pub/nih-image). Para o Unix existe o
sistema Khoros, desenvolvido pela Universidade do Novo México, ver http://www.khoros.unm.edu/.

IX - Referencias:

1. "Digital Image Processing" - R.C.Gonzalez / R.Woods - Addison Wesley - 1992.


Th
2. "Video Microscopy" - S. Inoué - Plenun Press – Nova Iorque - 4 edition – 1989
3. “Computação Gráfica: Imagem” – J. Gomes e L.Velho – Ed. IMPA – 1994
4. “Vision” – D. Marr – Freeman – Nova Iorque – 1982
5. “Image Analysis and Computer Vision” – A. Rosenfeld – Computer Vision Graphics and Image
Processing – vol 59, p.367-404 – 1993
6. “Neural Networks and application tutorial” – I. Guyon – Physics Reports – vol207, p.215-259 –
1991
7. “Ignorance, Myopia and naiveté in Computer Vision Systems” – T.O. Binford e R.C. Jain –
Computer Vision Graphics and Image Processing – vol.53 p.112-117 – 1991
8. “The Scientist and Engineer’s Guide to Digital Signal Processing” – 2nd Edition - 1999
9. “Precis d’analyse d’images” – M. Coster e J.L. Chermant – Editora do CNRS – 1989
10. “Fundamentals of Digital Image Processing”. A. K. Jain – Prentice Hall – 1989
11. “A survey on image segmentation” – K.S. Fu e J. K. Mui – Pattern Recognition vol. No. 13 p.3-
16 – 1980.
12. “Visual Language and software development environment for image processing” – J. Rasure,
D.Argiro, T.Sauer e C.Williams – Jour. of Imaging System and Technology – vol.2, p. 183-199
– 1990

12
P ROCESSAMENTO D IGITAL DE S INAIS
Márcio Portes de Albuquerque e Marcelo Portes de Albuquerque
{mpa,marcelo}@cbpf.br

Centro Brasileiro de Pesquisas Fı́sicas (CBPF)


Rua Dr. Xavier Sigaud no 150, Urca
Rio de Janeiro, julho de 2002

Resumo
Esta apostila forneçe uma visão geral de sinais e métodos de processamento de sinais. A
caracterização matemática dos sinais é primeiramente abordada em conjunto com a classificação
de sinais. Alguns sinais tı́picos serão apresentados em detalhes e as informações carregadas por
eles serão descritas. Será feita uma revisão em algumas operações utilizadas em processamento
de sinais. Discutiremos as vantagens e desvantagens do processamento digital de sinais.

1 Introdução
Sinais realizam um papel importante em nosso cotidiano. Exemplos de sinais que encontramos
freqüentemente são voz, música, fotografias e vı́deo. Um sinal é uma função de variáveis indepen-
dentes como tempo, distância, posição, temperatura, pressão. Seja uma música ou um sinal de voz,
por exemplo, eles representam a pressão do ar como função do tempo em um ponto no espaço. Uma
fotografia em preto e branco representa a intensidade de luz como função de duas coordenadas es-
paciais. Um sinal de vı́deo de uma televisão consiste em seqüências de imagens, chamadas quadros,
como função de três variáveis: duas coordenadas espaciais e o tempo.

A maioria dos sinais que encontramos são gerados de modo natural. No entanto, um sinal pode
ser gerado sinteticamente ou por simulação. Um sinal carrega informação, e o objetivo do proces-
samento de sinais é extrair a informação carregada pelo sinal. O método de extração de informação
depende do tipo de sinal e da natureza da informação carregada por ele. Portanto, superficialmente
falando, processamento de sinais está interessado com a representação matemática de sinais e com as
operações algoritmicas realizadas para a extração da informação presente. A representação de sinais
pode ser em termos de funções base no domı́nio das variáveis independentes originais ou em termos
de funções base no domı́nio da transformada. Do mesmo modo, o processo de extração de informação
pode ser representado no domı́nio original do sinal ou no domı́nio de sua transformada. Neste curso
estaremos interessados nos sinais representados no tempo discreto e seu processamento discreto no
tempo.

Esta apostila forneçe uma visão geral de sinais e métodos de processamento de sinais. A caracterização
matemática dos sinais é primeiramente abordada em conjunto com a classificação de sinais. Alguns
sinais tı́picos serão apresentados em detalhes e as informações carregadas por eles serão descritas.
Será feita uma revisão em algumas operações utilizadas em processamento de sinais. Discutiremos
as vantagens e desvantagens do processamento digital de sinais.

1
2 Caracterização e classificação de sinais
Dependendo da natureza das variáveis independentes e dos valores das funções que definem o
sinal, vários tipos de sinais podem ser definidos. As variáveis independentes, por exemplo, podem ser
contı́nuas ou discretas. Do mesmo modo, os sinais podem ser tanto funções contı́nuas ou discretas
das variáveis independentes. Além disso, os sinais podem ser tanto funções de variáveis reais como
de variáveis complexas.

Um sinal pode ser gerado por uma fonte única ou por múltiplas fontes. No primeiro caso, é um
sinal escalar e no segundo teremos um vetor de sinais também chamado de sinal em multicanais.

Um sinal de uma dimensão(1-D) é uma função de uma única variável independente. Um sinal
bidimensional (2-D) é uma função de duas variáveis independentes. Um sinal multidimensional (M-
D) é uma função de mais de uma variável. O sinal de voz é um exemplo de sinal unidimensional (1-D),
onde a variável independente é o tempo. Um sinal de imagem, como uma fotografia, é um exemplo
de sinal bidimensional (2-D), onde es variáveis independentes são as duas coordenadas espaciais. Um
sinal de vı́deo em preto e branco é um sinal 3-D, onde cada quadro é uma imagem 2-D em função de
duas variáveis espaciais e uma temporal. O sinal de vı́deo colorido, por sua vez, é um sinal de três
canais cada um com três dimensões, onde um canal é o sinal 3-D das intensidades de vermelho (R), o
segundo é um canal com as intensidades do verde (G) e o terceiro é um canal com as intensidades do
azul (B). Para a finalidade de transmissão, o sinal RGB da televisão é transformado em outro tipo de
sinais de três canais, composto pela luminância e por duas componentes de crominância.

O valor do sinal em valores especı́ficos das componentes independentes é chamado de amplitude.


A variação da amplitude em função das variáveis independentes é chamado forma de onda.

Para um sinal 1-D, a variável independente normalmente é chamada de tempo. Se a variável in-
dependente for contı́nua, o sinal é chamado sinal contı́nuo no tempo. Se a variável independente for
discreta, o sinal é chamado sinal discreto no tempo. Um sinal contı́nuo no tempo é definido a cada
instante de tempo. De outra forma, um sinal discreto é definido em instantes discretos do tempo e,
portanto, é uma seqüência de números.

Um sinal contı́nuo no tempo com amplitudes contı́nuas normalmente é chamado de sinal analógico,
como, por exemplo, um sinal de voz. Sinais analógicos são comumente encontrados em nosso cotidi-
ano e são normalmente gerados por meios naturais. Um sinal discreto no tempo com valores discretos
de amplitudes são representados por um número finito de dı́gitos e é referenciado como sinal discre-
to. Um exemplo de sinal digital são músicas digitalizadas e aramzenadas em discos de CD-ROM.
Um sinal discreto no tempo e contı́nuo em amplitude é chamado de sinal de dados amostrados. Este
último tipo de sinal ocorre em circuitos de chaveamento de capacitores (SC). Um sinal digital é por-
tanto uma quantização de um sinal de dados amostrados. Finalmente, um sinal contı́nuo no tempo
com valores discretos de amplitudes é chamado de quantizer boxcar signal[1]. A Figura 2 ilustra os
quatro tipos de sinais.

2
Figura 1: (a) sinal contı́nuo no tempo, (b) sinal digital, (c) sinal de dados amostrados e (d) quantizer
boxcar signal

A representação matemática da dependência funcional é frequentemente mostrada explicitamente.


Para um sinal 1-D contı́nuo no tempo, as variáveis independentes contı́nuas são normalmente de-
notadas por t, visto que para um sinal 1-D discreto no tempo, as variáveis independentes discretas
são normalmente denotadas por n. Por exemplo, u(t) representa um sinal 1-D contı́nuo no tempo
e {v[n]} representa um sinal 1-D discreto no tempo. Cada membro, v[n], de um sinal discreto no
tempo é chamado amostra. Em muitas aplicações, sinais discretos no tempo são gerados a partir da
amostragem de sinais contı́nuos no tempo. Se os instantes discretos discretos no tempo estiverem
equidistantes, ou seja, uniformemente separados, as variáveis independentes discretas n podem ser
normalizadas para assumir valores inteiros.

No caso de sinais 2-D contı́nuos no tempo, as duas variáveis independentes são as coordenadas es-
paciais, que são normalmente denominadas por x e y. As intensidades de luminosidade em imagens
em nı́veis de cinza, por exemplo, podem ser expressas por u(x, y). De outro modo, uma imagem
digital é um sinal discreto 2-D, e suas duas variáveis independentes são discretizadas no espaço nor-
malmente denotado por m e n. Desta forma, uma imagem digital pode ser representada por v[m, n].
Do mesmo modo, uma seqüência de vı́deo em preto e branco é um sinal 3-D que pode ser represen-
tado como u(x, y, t), onde x e y representam as duas variáveis espaciais e t a variável temporal. Um
sinal de vı́deo colorido é um vetor de sinais composto por três sinais que representam as três cores
primárias, que são o vermelho (R), o verde (G) e o azul (B):

r(x, y, t)
u(x, y, t) = g(x, y, t) (1)
b(x, y, t)

Existe outra classificação de sinais que depende da certeza na qual os sinais são unicamente de-
scritos. Um sinal determinı́stico é aquele definido por um processo como uma expressão ou regra
matemática. A geração aleatória de um sinal, no entanto, torna o mesmo imprevisı́vel no tempo e
desta forma é chamado de sinal aleatório. Inicialmente iremos ver o processamento de sinais de-
terminı́sticos discretos no tempo. No entanto, como na prática sistemas discretos no tempo utiliza
”palavras” finitas para o armazenamento dos sinais e a implementação dos algoritmos de processa-
mento de sinais, é necessário o desenvolvimento de ferramentas para análise dos efeitos de palavras
de comprimento finito na performance de sistemas discretos no tempo. Para esta finalidade, foi con-
veniente representar alguns sinais pertinentes como sinais aleatórios e aplicar técnicas estatı́sticas em
suas análises. Algumas operações tı́picas de processamento de sinais serão revisadas na próxima
seção.

3
3 Operações tı́picas de processamento de sinais
Diversos tipos de operações de processamento de sinais são utilizadas na prática. No caso de
sinais analógicos, a maioria das operações de processamento de sinais são normalmente aplicadas
no domı́nio do tempo, enquanto que no caso de sinais discretos, são utilizadas operações tanto no
domı́nio do tempo como no da freqüência. Em ambos os casos, as operações desejadas são imple-
mentadas como uma combinação de algumas operações elementares. Estas operações são usualmente
implementadas em tempo real, em algumas aplicações, elas podem ser implementadas ”off-line”.

4 Operações elementares no domı́nio do tempo


As três operações mais elementares no domı́nio do tempo são a adição, o atraso e o escalamento.
O escalamento consiste na multiplicação do sinal por uma constante positiva ou negativa. No caso de
sinais analógicos esta operação normalmente é chamada amplificação se a magnitude da constante de
multiplicação, chamada ganho, for maior que 1. Caso contrário a operação é chamada de atenuação.
Portanto de x(t) for um sinal analógico, a operação de escalamento gera um sinal y(t) = αx(t)
onde α é a constante de multiplicação. Duas outras operações elementares podem ser mencionadas,
Rt a
integração e a diferenciação. A integração de um sinal aleatório x(t) gera o sinal y(t) = −∞ x(ξ)dξ,
enquanto sua diferenciação resulta em um sinal w(t) = dx(t)/dt.

A operação de atraso gera um sinal idêntico ao original e deslocado no tempo. Para sinais analógicos
x(t), y(t) = x(t − t0 ) é o sinal obtido pelo atraso de t0 , positivo, em x(t). Se t0 for negativo ocorrerá
uma operação de avanço no sinal.

Muitas aplicações necessitam operações com mais de dois sinais para a geração de um sinal. Po
exemplo, y(t) = x1 (t) + x2 (t) − x3 (t) é o sinal gerado pela adição de três sinais analógicos x1 (t),
x2 (t) e x3 (t). Outra operação elementar é o produto de dois sinais. Portanto, o produto de dois sinais
x1 (t) e x2 (t) geram o sinal y(t) = x1 (t)x2 (t).

As operações elementares mencionadas acima também podem ser utilizadas em sinais discretos no
tempo, como discutiremos mais tarde no texto. Em seguida vamos rever algumas operações com-
plexas bastante utilizadas em processamento de sinais, que são uma combinação de duas ou mais
operações elementares.

5 Filtragem
Uma das operações mais utilizadas em processamento de sinais é a filtragem. Sua utilização é
passar algumas componentes de freqüência de um sinal através de um sistema sem que haja nen-
huma distorção, e bloquear outras componentes de freqüência. Os sistemas que implementam estas
operações são chamados de filtros. A faixa de freqüência que será permitida passar pelo filtro é
chamada de passa banda, e a faixa de freqüências bloqueadas pelo filtro são chamadas de rejeita ban-
da. Vários tipos de filtros podem ser definidos, dependendo da natureza da operação de filtragem. Na

4
maior parte dos casos, a operação de filtragem para sinais analógicos é linear e é descrita pela integral
de convolução
Z ∞
y(t) = h(t − ξ)x(ξ)dξ (2)
−∞

onde x(t) é o sinal de entrada e y(t) a saı́da do filtro caracterizada pela resposta ao impulso h(t).

Um filtro passa baixa permite a passagem de todas as componentes de freqüência abaixo de fc ,


denominada de freqüência de corte, e bloqueia todas as altas freqüências acima de fc . Um filtro
passa alta realiza a tarefa opsta de um passa baixa, deixando passar as freqüências superiores a fc
e rejeitando as freqüências abaixo de fc . Um filtro passa banda permite a passagem de freqüências
dentro do intervalo definido por fc1 e fc2 e rejeita qualquer freqüência fora deste intervalo. O filtro
rejeita banda realiza a operação contrária ao filtro passa banda, rejeitando somente as freqüências
definidas dentro da faixa fc1 e fc2 e permitindo a passagem de quaisquer outras componentes de
freqüência. A Figura 5(a) apresenta um sinal composto por três componentes de freqüência com
50Hz, 110Hz e 210Hz, respectivamente. As Figuras 5(b) a (e) apresentam os resultados das quatro
operações de filtragem mencionadas acima.

Um filtro rejeita banda que permite a passagem de somente uma componente de freqüência é
chamado de filtro notch. Um filtro multibanda é aquele que possui mais de um filtro passa banda
e rejeita banda. Um filtro comb é projetado para rejeitar freqüências que são múltiplos inteiros de
freqüências baixas.

Um sinal pode ser corrompido por interferências indesejáveis chamadas ruı́do. Em muitas aplicações
os sinais desejados ocupam bandas de freqüências baixas desde DC até fL Hz, e é corrompida por
ruı́dos de altas freqüências acima de fH Hz com fH > fL . Nestes casos, podemos remover o ruı́do
aplicando um filtro passa baixa com freqüência de corte fc onde fL < fc < fH . Uma fonte comum
de ruı́do são radiações de campos elétricos e magnéticos. Os sinais gerados pelas linhas de força
aparecem como uma senóide com freqüência de 60Hz corrompendo o sinal desejado. Este ruı́do
pode ser removido por um filtro notch de 60Hz.

6 Geração de sinais complexos


Os sinais podem possuir valores reais ou valores complexos. Todos os sinais gerados naturalmente
são sinais de valores reais, no entanto desejamos desenvolver um sinal complexo a partir de um sinal
real. Este sinal complexo pode ser obtido a partir da transformada de Hilbert do sinal real, que é
caracterizada pela resposta ao impulso hHT (t) dada por [2, 3]:
1
hHT = (3)
πt

5
Figura 2: (a) sinal de entrada, (b) saı́da do filtro passa baixa com freqüência de corte de 80Hz, (c)
saı́da do filtro passa alta com fc = 150Hz , (d) saı́da de um filtro passa banda com fc1 = 80Hz e
fc2 = 150Hz, (e) saı́da de um filtro rejeita banda com fc1 = 80Hz e fc2 = 150Hz.

6
Para ilustrar o método, considere um sinal real x(t) com a transformada de Fourier contı́nua no
tempo X(jΩ) dada por:
Z ∞
X(jΩ) = x(t)e−jΩt dt (4)
−∞

X(jΩ) é chamado de espectro de x(t). A magnitude do espectro de um sinal real apresenta a simetria
par enquanto o espectro de fase apresenta a simetria ı́mpar. Portanto, o espectro X(jΩ) de um sinal
real x(t) contém tanto freqüências positivas como negativas e por isso pode ser expresso como:

X(jΩ) = Xp (jΩ) + Xn (jΩ) (5)


onde Xp (jΩ) é a porção de freqüências positivas de X(jΩ) e Xn (jΩ) é a porção de freqüências
negativas de X(jΩ). Se realizarmos a transformada de Hilbert em x(t) a saı́da x̂(t) será dada pela
convolução linear de x(t) com hHT (t):
Z ∞
x̂(t) = hHT (t − ξ)x(ξ)dξ (6)
−∞

O espectro X̂(jΩ) de x̂(t) é dado pelo produto da transformada de Fourier de x(t) e hHT (t) da
equação (3), qe é dado por:
(
−j, Ω > 0
HHT (jΩ) = (7)
j, Ω<0
Desta forma,
X̂(jΩ) = HHT (jΩ)X(jΩ) = −jXp (jΩ) + jXn (jΩ) (8)
As funções pares e ı́mpares correspondem a magnitude e fase, respectivamente. Considere o sinal
y(t) formado pela soma de x(t) e x̂(t):

y(t) = x(t) + x̂(t) (9)


Os sinais x(t) e x̂(t) são chamados de componentes em fase e quadratura de y(t). Utilizando as
Equações (5) e (8) na transformada discreta de Fourier de y(t), nós obeteremos

Y (jΩ) = X(jΩ) + X̂(jΩ) = 2Xp (jΩ) (10)


Em outras palavras, o sinal complexo y(t), chamado de sinal analı́tico, possui somente componentes
com freqüências positivas.

A Figura ?? apresenta um diagrama de blocos que ilustra o processo de obtenção de um sinal


analı́tico a partir de um sinal real.

7
Figura 3: Geração de um sinal analı́tico utilizando transformada de Hilbert.

7 Modulação e demodulação
Para transmissão de sinais em longas distâncias são utilizados meios de transmissões como cabo,
fibra óptica ou a atmosfera. Cada um desses meios possui uma banda que é mais eficiente na
transmissão de sinais de alta freqüência. Como resultado, para transmitirmos um sinal de baixa
freqüência em um canal, é necessário transformar este sinal para alta freqüência através da operação
de modulação. Ao chegar no receptor o sinal tem que der demodulado para obtenção do mesmo em
baixa freqüência. Existem quatro tipos de modulação de sinais analógicos: modulação em ampli-
tude, modulação em freqüência, modulação em fase e modulação em quadratura. Discutiremos, nesta
apostila, os conceitos da modulação em amplitude [2, 3].
No esquema de modulação em amplitude, a amplitude de um sinal de alta freqüência senoidal
Acos(Ω0 t), chamado de sinal da portadora, é variado pelo sinal de baixa freqüência x(t), chamado
de sinal de modulação, gerando um sinal de alta freqüência y(t), chamado de sinal modulado de
acordo com:

y(t) = Ax(t)cos(Ω0 t) (11)


Portanto, a modulação em amplitude pode ser implementada através do produto do sinal de modulação
com o sinal da portadora. Para demostrar a propriedade de translação em freqüência do processo de
modulação por amplitude, seja x(t) = cos(Ω1 t) onde Ω1 é muito menor que a freqüência Ω0 da
portadora, i.e., Ω1 << Ω0 . Pela Equação (11) obtemos

y(t) = Acos(Ω1 t).cos(Ω0 t) (12)


A A
= cos((Ω0 + Ω1 )t) + cos((Ω0 − Ω1 )t) (13)
2 2
Desta forma, o sinal modulado y(t) é composto por dois sinais senoidais de freqüências Ω0 + Ω1 e
Ω0 − Ω1 , que estão próximas a Ω0 uma vez que assumimos que Ω1 é muito menor que a freqüência
da portadora Ω0 .

Através das propriedades da transformada de Fourier podemos mostrar que o espectro Y (jΩ) de
y(t) é dado por:

A A
Y (jΩ) = X(j(Ω − Ω0 )) + X(j(Ω + Ω0 )) (14)
2 2
onde X(jΩ) é o espectro do sinal modulado x(t). A Figura 7apresenta o espectro do sinal de
modulação e do sinal modulado assumindo que a freqüência da portadora Ω0 é muito maior que

8
Figura 4: (a) Espectro do sinal modulado x(t), e (b) espectro do sinal modulado y(t). Por con-
veniência, ambos espectros são de funções reais.

Ωm , que é a freqüência mais alta contida em x(t). Como ilustrado na figura y(t) é agora limitado
por banda de alta freqüência e centrado em Ω0 . Este processo de modulação é chamado de Double
Sideband Supressed Carrier (DSB-SC), devido as porções de freqüência Ω0 + Ωm e Ω0 − Ωm .

A demodulação de y(t), é feita em dois estágios. Primeiro, o produto de y(t) com um sinal senoidal
de mesma freqüência da portadora é formado:

r(t) = y(t)cos(Ω0 t) = Ax(t)cos2 (Ω0 t) (15)


que pode ser reescrito como
A A
r(t) = x(t) + x(t)cos(2Ω0 t) (16)
2 2

Este resultado indica que o produto do sinal é composto pela modulação do sinal senoidal escalado
por um fator 1/2 e uma modulação do sinal em amplitude com uma freqüência de portadora de 2Ω0 .
O espectro R(jΩ) de r(t) está indicado na Figura 7. O sinal modulado original pode ser recuperado a
partir de r(t) através da utilização de um filtro passa baixas com freqüência de corte Ωc satisfazendo a
relação Ωm < Ωc < 2Ω0 − Ωm . A saı́da do filtro é então uma réplica escalada do sinal de modulação.

A Figura 7 apresenta a representação em diagrama de blocos dos esquemas de modulação e demodulação


em amplitude. O princı́pio fundamental na assunção do processo de demodulação descrito acima é
que o sinal senoidal deve ser idêntico ao sinal da portadora e pode ser gerado no receptor. Em geral,
é difı́cil garantir que o sinal senoidal de demodulação possui freqüência igual ao da portadora todo

9
Figura 5: Espectro do produto do sinal modulado e da portadora.

Figura 6: Representação esquemática da modulação e demodulação em amplitude: (a) mdulador e


(b) demodulador.

o tempo. Para solucionar o problema, na transmissão do sinal modulado em amplitude, é incluı́do o


sinal da portadora. Isto é feito através da redefinição da operação de modulação como segue:

y(t) = A[1 + mx(t)]cos(Ω0 t) (17)


onde m é o número escolhido para assegurar que [1 + mx(t)] seja positivo para todo t. A Figura
7 apresenta a forma de onda do sinal de modulação senoidal de freqüencia 2Hz e modulação de
amplitude por portadora obtida de acordo com a Equação (17) para uma freqüência de portadora de
40Hz e m = 0.5. Note que a envoltória do sinal modulado pela portadora é a forma de onda do
sinal de modulação. A portadora também está presente no sinal modulado, o processo é chamado de
Double Sideband Modulation (DSB).

8 Multiplexação e demultiplexação
Para uma utilização eficiente do canal de transmissão em banda larga, vários sinais de banda estreita
e baixas freqüências são combinados formando um sinal de banda larga que é transmitido como um
único sinal. O processo de combinação destes sinais é chamado de multiplexação que é implementado
de forma a assegurar que uma réplica dos sinais originais de baixa freqüência e banda estreita podem
ser recuperados no receptor. O processo de recuperação destes sinais no receptor é chamado de
demodulação.

Um método amplamente utilizado que combina diferentes sinais de voz em um sistema de comunicação
é chamado Frequency Dvision Multiplexing (FDM) [4, 3]. Cada sinal de voz tipicamente é limitado
por uma banda de baixa freqüência com largura 2Ωm , a freqüência é transladada em alta freqüência
utilizando o método de modulação por amplitude da Equação (11). A freqüência da portadora do

10
Figura 7: (a) Um sinal de modulação senoidal de 2Hz, e (b) sinal da portadora com a freqüência de
40Hz baseado na modulação DSB.

sinal adjacente modulado por amplitude é separada por Ω0 , com Ω0 > 2Ωm para assegurar que não
haverá nenhuma sobreposição nos sinais individuais modulados. Depois o sinal é modulado em uma
portadora principal e transmitido. A Figura 8 ilustra o esquema do processo de multiplexação por
divisão de freqüência.

No receptor, a decomposição dos sinais em banda é feita por demodulação FDM. Depois cada sinal
individual transladado em freqüência é demultiplexado através de filtros passa banda com banda um
pouco maior que 2Ωm . A saı́da do filtro passa banda é demodulado utilizando o método da Figura 7
recuperando uma réplica escalada do sinal original de voz.

No caso da modulação em amplitude convencional, como apresentado na Figura 7, o sinal mod-


ulado possui largura de banda 2Ωm . Para aumentar a capacidade de transmissão média, uma forma
modificada da modulação em amplitude é freqüentemente empregada, onde são transmitidas as ban-
das altas quanto ou baixas do sinal. Este método é chamado de Single Sideband Modulation (SSB)
para distinguir do método DSB representado no esquema da Figura 7.

Uma maneira de implementar a modulação em amplitude SSB está indicado na Figura 8, onde a
transformada de Hilbert é definida pela equação (7). Os espectros referentes aos sinais da Figura 8
são apresentados na Figura 8.

9 Por quê processamento digital de sinais?


A origem das técnicas de processamento digital de sinais foi no século XVII quando métodos
de diferenciação finita, métodos de integração numérica e métodos de interpolação numérica foram
desenvolvidos para resolver problemas fı́sicos envolvendo variáveis e funções contı́nuas. O interesse
mais recente de processamento de sinais digitais apareceu em 1950 com a disponibilização de um
número crescente de computadores digitais. As aplicações iniciais foram a simulação de métodos de
processamento analógico de sinais. No inı́cio da década de 1960, pesquisadores passaram a considerar

11
Figura 8: Ilustração da operação de multiplexação por divisão de freqüências.

Figura 9: Esquema de modulação SSB empregando a transformada de Hilbert.

Figura 10: Sinais pertinentes ao espectro da Figura 8.

12
Figura 11: Diagrama de blocos dos passos de um processamento digital de um sinal analógico.

Figura 12: Esquema de supressão de eco.

o processamento digital de sinais como uma nova área disciplinar. Desde então ocorreram descobertas
e desenvolvimentos significantes tanto na teoria quanto nas aplicações de processamento digital de
sinais.

O processamento digital de sinais analógicos consiste basicamente de três passos: conversão do


sinal analógico para digital, processamento da versão digital e a conversão do sinal digital de volta
em analógico. A Figura 9 ilustra o diagrama de blocos desse processo.

Como a amplitude do sinal analógico varia com o tempo um circuito de sample-and-hold (S/H)
é utilizado para amostrar o sinal analógico em intervalos periódicos congelando o valor da amostra
com valor constante na entrada do circuito de conversão analógico-digital (A/D), permitindo, desta
forma, uma maior fidelidade na conversão dos dados. A entrada de um conversor A/D é um sinal
analógico do tipo escada se o circuito S/H segurar a amostra até o instante seguinte de conversão.
A saı́da de um conversor A/D é uma cadeia de dados binários que será processada em seguida pelo
algoritmo desejado de processamento digital de sinais. A saı́da do processador digital é outra cadeia
binária de dados que será convertida em um sinal analógico tipo escada através do conversos digital-
analógico (D/A). O filtro passa baixas na saı́da do conversor D/A remove todas as componentes em
altas freqüências indesejáveis e é obtido o sinal analógico na saı́da através do processamento digital.
A Figura 9 apresenta as formas de onda dos sinais em cada um dos estágios do processamento digital,
os sinais binários foram representados por pulsos positivos e negativos.

O processamento analógico de sinais analógicos é conceitualmente muito mais simples e envolve


somente um único processador, como ilustra a Figura 9. É natural perguntarmos quais as vantagens
do processamento digital de sinais analógicos.

Direntemente dos circuitos analógicos, as operações nos circuitos digitais não dependem de valores
precisos dos sinais digitais. Como resultado, um circuito digital é menos sensı́vel as tolerâncias dos
valores dos componentes e é razoavelmente independente da temperatura, envelhecimento e a maioria

13
Figura 13: Formas de onda tı́picas dos sinais nos diversos estágios da Figura 9. (a) Sinal de entrada
analógico, (b) circuito de saı́da S/H, (c) saı́da do conversor A/D, (d) saı́da do processador digital, (e)
saı́da do conversor D/A, e (f) saı́da do sinal analógico. Em (c) e (d), os nı́veis digitais ALTO e BAIXO
são os pulsos positivos e nagativos.

Figura 14: Processamento analógico de sinais analógicos.

14
dos parâmetros externos. Um circuito digital pode ser reproduzido facilmente em larga escala e não
requer nenhum ajuste durante a fabricação ou em sua utilização. Além disso, é simples sua integração
completa como, por exemplo, em circuitos VLSI, o que foi possı́vel uma integração sofisticada e
complexa em sistemas de processamento digital de sinais em um único chip.

Em um processador digital, os sinais e os coeficientes que descrevem as operações de processa-


mento são representados por palavras binárias. Desta forma, a precisão desejada pode ser alcançada
variando o tamanho da palavra, estando sujeito a variações nos custos. Além disso, a faixa dinâmica
para sinais e coeficientes pode ser aumentada, se necessário, utilizando aritmética de ponto flutuante.

Referências
[1] K. Steiglitz. Mathematical foundations of signal processing. In S.K. Mitra and J.F. Kaiser, editors,
Handbook for Digital Signal Processing, chapter 2, pages 57-59. Wiley-Interscience, New York,
1993.

[2] M.E. Frerking, Digital signal procesing im communication systems. Van Nostrand Reinhold, New
York, 1994

[3] A.V. Oppenheim and A.S. Willsky. Signals and sistems. Prentice-Hall, Englewood Cliffs, 1989.

[4] L.W. Cooley and J.W Turkey. An algorithm for the machine calculation of complex Fourier series.
Macmillan, New York, 1983

15
MATLAB
Curso Introdutório

Centro Brasileiro de Pesquisas Físicas


2002
Curso Introdutório de MATLAB

Sumário
1. INTRODUÇÃO ................................................................................................................ 2

1.1 O que é o Matlab? ........................................................................................................ 2


2. INICIANDO ........................................................................................................................ 3
2.1 Variáveis ...................................................................................................................... 3
2.1.1 ENTRANDO COM VALORES ................................................................................ 3
2.1.2 VARIÁVEIS PERMANENTES ................................................................................ 4
2.2 Expressões e Comandos Básicos ................................................................................ 4
2.2.1 SALVANDO/APAGANDO O WORKSPACE ........................................................... 5
2.2.2 O COMANDO MAIS IMPORTANTE ....................................................................... 5
2.2.3 EXERCÍCIOS ......................................................................................................... 6
3. FAMILIARIZANDO-SE COM MATRIZES........................................................................... 7
3.1 Manipulação de Matrizes .......................................................................................... 7
3.1.1 ELEMENTOS DE UMA MATRIZ ............................................................................ 7
3.1.2 GERANDO VETORES ........................................................................................... 8
3.1.3 MATRIZES DENTRO DE MATRIZES .................................................................... 9
3.1.4 EXERCÍCIOS ....................................................................................................... 10
3.2 Operações Elemento – por – Elemento .................................................................. 11
3.3 Operadores Lógicos e Relacionais ......................................................................... 12
3.4 Operadores e Manipulação de Matrizes ................................................................. 13
3.4.1 EXERCÍCIOS ................................................................................................... 13
3.5 Algumas Funções ................................................................................................... 14
4. POLINÔMIOS.................................................................................................................. 14
4.1 Representando Polinômios no MATLAB..................................................................... 14
4.2 Funções Relacionadas à Polinômios.......................................................................... 14
4.2.1 EXERCÍCIOS ....................................................................................................... 15
5. GRÁFICOS...................................................................................................................... 15
5.1 Gráficos 2-D ............................................................................................................... 15
5.1.2 EXERCÍCIOS ....................................................................................................... 17
5.2 Gráficos 3-D ............................................................................................................... 18
5.2.1 FUNÇÕES ELEMENTARES PARA GRÁFICOS 3-D............................................ 18
5.2.2 MESHGRID.......................................................................................................... 18
5.2.3 MELHORANDO A APARÊNCIA ........................................................................... 19
5.2.4 EXERCÍCIOS ....................................................................................................... 20
6. PROGRAMAÇÃO............................................................................................................ 20
6.1 Controladores de Fluxo .............................................................................................. 21
6.1.1 FOR ..................................................................................................................... 21
6.1.2 WHILE.................................................................................................................. 21
6.1.3 IF.......................................................................................................................... 22
6.1.4 BREAK, INPUT, PAUSE ...................................................................................... 22
6.2 Arquivos M ................................................................................................................. 23
6.2.1 SCRIPTS.............................................................................................................. 23
6.2.2 ARQUIVOS-FUNÇÃO .......................................................................................... 24
6.2.3 FUNÇÕES FUNÇÃO............................................................................................ 25
6.2.4 EXERCÍCIOS ....................................................................................................... 26
7. BIBLIOGRAFIA................................................................................................................ 26
8. RESPOSTA DOS EXERCÍCIOS...................................................................................... 27
Curso Introdutório de MATLAB 2

1. INTRODUÇÃO

1.1 O que é o Matlab?

MATLAB (Matrix Laboratory) é um software para computação numérica e visualização


de alta performance, fácil de ser usado, onde os problemas e soluções são expressos quase
que da mesma forma que no papel.
Seus elementos básicos são matrizes que não requerem dimensionamento. Ele
permite implementar e resolver problemas matemáticos muito mais rápida e eficientemente
que através de outras linguagens como C, Basic, Pascal ou Fortran.
Ainda, o MATLAB possui uma família de aplicativos específicos (toolboxes1), que são
coleções de funções usadas para resolver determinados problemas tais como: otimização,
manipulação algébrica, redes neurais, processamento de sinais, simulação de sistemas
dinâmicos, entre outros.
Provavelmente, a característica mais importante do MATLAB é a sua extensibilidade,
que permite que engenheiros, matemáticos cientistas, e até mesmo você, contribuam para o
enriquecimento.

1
Para maiores informações sobre as últimas novidades do software, consulte a página na internet da MathWorks
Inc. em http://www.mathworks.com
Curso Introdutório de MATLAB 3

2. INICIANDO

2.1 Variáveis

O MATLAB trabalha essencialmente com um tipo de variável: uma matriz contendo


números, complexos ou não (um escalar é uma matriz 1 x 1). Em alguns casos, um
tratamento especial é dado a uma matriz 1 x 1 (escalar) ou a matrizes 1 x n ou n x 1
(vetores).

Variáveis

Escalares Vetores Matrizes

4.7 A = 1 -7 3
Vetores Linha Vetores Coluna 2 0 8
(matrix 1x1)

B = 4.9
Numéricos “Strings”
7.6
8
4 7 5 9 t e x t o 2

2.1.1 ENTRANDO COM VALORES

No MATLAB não é necessário que sejam declaradas as variáveis para iniciá-las, como
é feito em outras linguagens de programação. Ao jogar dados numa variável, o programa
aloca memória automaticamente.
A maneira mais fácil de entrar com pequena quantidade de valores é digitando
diretamente os dados:
• envolva os elementos com colchetes, [ ];
• separe cada elemento com espaços ou vírgulas;
• use ponto-e-vírgula (;) para indicar fim da linha.

Por exemplo, para entrar com a matriz abaixo na memória do computador, e guardá-la
na variável A:
1 2 3
A= 4 5 6
7 8 9
Curso Introdutório de MATLAB 4

Basta digitar:
» A=[1 2 3;4 5 6; 7 8 9]
Que a saída será: A =
1 2 3
4 5 6
7 8 9

OBS: Para que o computador realize a operação e não mostre a saída, basta terminar
a expressão com ponto-e-vírgula (;). Isto é muito útil para evitar que o computador fique
mostrando números de cálculos intermediários e para acelerar as operações.

2.1.2 VARIÁVEIS PERMANENTES

Existem algumas variáveis que são intrínsecas ao MATLAB e que não podem ser
apagadas. Algumas são interessantes:

ans Resposta mais recente, que não flops Contador de operações


foi atribuída a nenhuma variável. matemáticas.
eps Precisão da máquina. NaN Not a Number (indeterminação)
realmax Maior número de ponto flutuante. inf Infinito.
realmin Menor número de ponto flutuante. computer Tipo de computador.
pi 3,14159265358979 why Resposta sucinta.
i, j Unidade imaginária version Versão do MATLAB.

Para saber a precisão da máquina, basta digitar eps.

2.2 Expressões e Comandos Básicos

MATLAB é uma linguagem de expressão. Ele interpreta e avalia as expressões


digitadas, que são geralmente na forma:
variável = expressão
Os números são em notação decimal. Pode-se criar números complexos basta
escrever i (ou j) depois da parte imaginária. Alguns exemplos de números permitidos:
1/3 -99 .0001
9.63973 1.602E-20 6.025E23
3 + 2i -3.1459i 3E5i
Curso Introdutório de MATLAB 5

A precisão de todas as operações é eps, embora os números mostrados ocultem


algumas casa decimais. Para mudar o formato de saída dos números, altere o item numeric
format ou no menu options, ou então use o comando format.

Pode-se construir expressões com os operadores aritméticos usuais:


+ adição / e \ divisão
- subtração ^ potenciação
* multiplicação ’ matriz transposta

O MATLAB possui uma vasta gama de funções matemáticas elementares, com seno
(sin), tangente (tan), logaritmo (log10), etc. Por exemplo, para calcular o seno de 5 e
guardar na variável x:
» x=sin(5)
Subtraindo matrizes:
» A=[1 2 3;4 5 6;7 8 9];
» B=[4 5 6;1 2 3;8 7 6];
» C=A'-B

OBS: X = A/B é a solução de A * X = B


X = B/A é a solução de X * A = B

2.2.1 SALVANDO/APAGANDO O WORKSPACE

Ao sair do MATLAB (através do comando quit ou exit) todas as variáveis do


workspace são perdidas, a menos que sejam guardadas do comando save. Digitando save,
todas as variáveis são salvas em um arquivo chamado matlab.mat. O comando save
nome_de_arquivo salva as variáveis no arquivo. Já o comando:
save nome_de_arquivo nome_da(s)_variável(is) , salva somente as variáveis
especificadas. O comando load carrega as informações salvas, e é análogo ao save.
O comando clear nome_de_variável apaga a variável do workspace. Digitar somente
clear apaga todas as variáveis do workspace!

2.2.2 O COMANDO MAIS IMPORTANTE

O comando mais importante no MATLAB é o help, que fornece ajuda on-line sobre
qualquer outro comando. Por exemplo, para obter ajuda sobre o comando who:
Curso Introdutório de MATLAB 6

» help who
WHO List current variables.
WHO lists the variables in the current workspace.
WHOS lists more information about each variable.
WHO GLOBAL and WHOS GLOBAL list the variables in the global workspace.

Um comando igualmente importante é lookfor, que procura entre todas as funções do


MATLAB a palavra-chave especificada.

» lookfor max
BITMAX Maximum floating point integer.
REALMAX Largest positive floating point number.
MAX Largest component.

2.2.3 EXERCÍCIOS

Comandos: who, whos, eps, format, quit, save, load, clear, help, lookfor.

Exercícios:

1) Armazene no workspace os seguintes valores:


a = 3.132;
0.32 2.5 + pi 2
b = -23.004;
A= 1e2 4 12
c = 5*pi;
9 51 24
d = (3 5.4 7.43)
e = (-2.234 0 pi/2)
5 34 87
-9.81 12e-8 B= 32 4.65 74
f= 0 g= 4i 0 13 -43
1 pi*i

2) Verifique o resultado das seguintes das seguintes operações:


a) a + b +eps e) g – c * f
b) c – b * (a / b) f) A * B
c) d – e g) a * A – B / c
d) e’ + 2 * f h) f * B

3) Verifique o resultado das seguintes operações:


a) sin(a) * log(b) e) max(log(g + f + dt))*B
b) tan(c+eps) – asin(b) f) sin(cos(tan(A)))
Curso Introdutório de MATLAB 7

c) mind(d^2) – max(e) g) inv(A)


d) log(f) h) inv(At) * cos(B)

4) Atribua as seguintes expressões às variáveis:


a) 3.34 * a – pi/c para x
b) log(d + 34.0054) para y
c) log(A) para Z
t
d) f * B para t

5) Salve as variáveis x, Z, B em um arquivo chamado exerc1.mat.


6) Saia do MATLAB, entre novamente e carregue as variáveis salvas anteriormente.
7) Apague a variável Z.

3. FAMILIARIZANDO-SE COM MATRIZES

3.1 Manipulação de Matrizes

3.1.1 ELEMENTOS DE UMA MATRIZ

Elementos de uma matriz podem ser qualquer expressão do MATLAB. Por exemplo:

» x=[-1.3 log(4.23^3) (1+2+3)/4*5]


Resulta em:
x =
-1.3000 4.3266 7.5000

Elementos individuais de uma matriz podem ser referenciados com seus respectivos
índices entre parêntesis. No exemplo anterior, para referenciar o segundo elemento do vetor x:
» x(2)
ans =
4.3266

Analogamente em uma matriz, com linha e coluna determinada tenho um elemento. Seja:
» x=[1 2 3;4 5 6;7 8 9]
x =
1 2 3
4 5 6
7 8 9
Curso Introdutório de MATLAB 8

» x(2,3)
ans =
6

Repare que a referência é sempre na forma matriz(linha,coluna).

3.1.2 GERANDO VETORES

O dois pontos ( : ) é um caracter importante no MATLAB. Escrevendo:

» x = 1:8
Cria um vetor cujo primeiro elemento é 1, o último é 8 e o passo 1.
x =
1 2 3 4 5 6 7 8

Pode-se modificar o passo:


» x = 1:1.5:8
x =
1.0000 2.5000 4.0000 5.5000 7.0000

Os dois pontos significam início : passo : fim. O valor de passo pode ser qualquer
número real (≅ 0). A notação ( : ) é muito útil para gerar tabelas e plotar gráficos, como
veremos adiante.
» x=0:0.2:3;
» y=exp(-x) + sin(x);
» z=[x'y']
z =
0 1.0000
0.2000 1.0174
0.4000 1.0597
0.6000 1.1135
0.8000 1.1667
1.0000 1.2094
1.2000 1.2332
1.4000 1.2320
1.6000 1.2015
1.8000 1.1391
2.0000 1.0446
2.2000 0.9193
Curso Introdutório de MATLAB 9

2.4000 0.7662
2.6000 0.5898
2.8000 0.3958
3.0 0.1909

3.1.3 MATRIZES DENTRO DE MATRIZES

É possível construir matrizes maiores a partir de matrizes menores. Por exemplo:


» A=[1 2 3;4 5 6;7 8 9];
» r=[13 32 5];
» A=[A;r]
A =
1 2 3
4 5 6
7 8 9
13 32 5

Seguindo o mesmo raciocínio, pode-se extrair matrizes menores a partir de uma


maior. Já é sabido o comando
» x=A(1,3)
x =
3
atribui à variável “x” o elemento da 1a linha e 3a coluna da matriz A. Da mesma forma que é
possível atribuir um elemento de uma matriz (que é um escalar, ou seja, uma matriz 1 x 1),
também é possível atribuir pedaços inteiros da mesma matriz. Por exemplo, seja a matriz A:

1 2 3 4
A= 5 6 7 8 Pegar os elementos da 2a linha e 3a e 4a
9 10 11 12 colunas:
14 83 23 0

» A=[1 2 3 4; 5 6 7 8;9 10 11 12;14 83 23 0]


A =
1 2 3 4
5 6 7 8
9 10 11 12
14 83 23 0
» A(2,[3 4])
ans =
7 8
Curso Introdutório de MATLAB 10

O que aconteceu? Ao invés de passar um escalar como índice para as colunas da


matriz A, passou-se o vetor [3 4]. O MATLAB interpretou isto como sendo: pegue os
elementos a23 e a24. Um outro exemplo ainda na matriz A. Para pegar a parte selecionada.

» A([1 2 3],[2 3])


1 2 3 4 ans =
A= 5 6 7 8 2 3

9 10 11 12 6 7
10 11
14 83 23 0

ou ainda um comando equivalente:


» A(1:3,2:3)
ans =
2 3
6 7
10 11

Usar os dois pontos sozinhos significa todos os elementos da respectiva linha ou


coluna:
» A(3,:)
ans =
9 10 11 12

Este tipo de notação facilita enormemente a criação de programas.

3.1.4 EXERCÍCIOS

1) Sejam as matrizes abaixo:


1 2 3 4 7.4 pi 0
A= 5 6 7 8 B= -4.01 2 3
9 10 11 12 0.1 10 0
14 83 23 0

a) Atribua o elemento a32 à variável c


b) Atribua o elemento b22 à variável c
c) Atribua os elementos a11, a12 e a13 à um vetor d
d) Atribua a 3a coluna da matriz B a um vetor d
e) Atribua a 2a linha de B à primeira linha de A. Dica: preencha os espaços restantes com 0.
f) Atribua a 4a linha de A à 2a linha de A.
Curso Introdutório de MATLAB 11

2) Gerar os seguintes vetores:

a) x começa em 0, vai até 15, passo 1


b) x começa em –3.4 vai até 8, passo 0.32
c) x começa em 10, vai até 1, passo –1.23
d) x começa em 0, vai até 152, passo 10*pi

3) Quais destes comandos são válidos?


a) c = A(2,3) e) c = A([1:4],2)
b) c = A[1 2 3] f) c = A(2,:)
c) c = A([ 1 2 3],4) g) c = A(:,:)
d) c = A(1:3,4) h) c = A(2:4,[1 3 4])

4) Extrair das matrizes do item 1 as submatrizes selecionadas

3.2 Operações Elemento – por – Elemento

Operações elemento – por – elemento, ao contrário das operações tradicionais como


multiplicação de matriz ou divisão de matriz, são operações entre elementos. Por exemplo:
» [1 2 3;4 5 6;7 8 9] * [1 2 3;4 5 6;7 8 9]
ans =
30 36 42
66 81 96
102 126 150

» [1 2 3;4 5 6;7 8 9] .* [1 2 3;4 5 6;7 8 9]


ans =
1 4 9
16 25 36
49 64 81

Pode-se perceber que no segundo caso p que ocorreu foi: elemento a11 * b11, a12 * b12, a21
* b21…. Diferente do primeiro caso, onde ocorreu uma multiplicação de duas matrizes 3 x 3.
As operações elemento por elemento são:
Símbolo Operação
.* multiplicação
./ ou .\ divisão
.^ potenciação
Curso Introdutório de MATLAB 12

3.3 Operadores Lógicos e Relacionais

Existem seis operadores relacionais no MATLAB. São eles:


Símbolo Operador
< menor que
<= menor ou igual que
> maior que
>= maior ou igual que
== igual
~= não igual

O resultado da comparação é 1 se verdadeiro e 0 se falso. por exemplo:


» 2 + 2 == 4
ans =
1

No caso de comparação com matrizes, o resultado será uma matriz de 0 e 1:


» x=[2 3 4;5 2 7;9 2 7]
x =
2 3 4
5 2 7
9 2 7
» x>4
ans =
0 0 0
1 0 1
1 0 1

Para os operadores lógicos, tem-se:


Símbolo Operador
& e
| ou
~ não

Existem ainda algumas funções que são úteis com os operadores lógicos, com any ou
all. Por exemplo:
» x = [1 2 3 4 5 6]
x =
1 2 3 4 5 6
Curso Introdutório de MATLAB 13

» any(x>5)
ans =
1

» all(x>5)
ans =
0

3.4 Operadores e Manipulação de Matrizes

Pode-se usar os vetores de 0 e 1, geralmente criados a partir de operações de


comparação, como referência para matrizes. Seja a matriz A descrita anteriormente. para
atribuir os elementos de A que satisfazem determinada comparação a uma outra variável,
faz-se:
variável = A(comparação)
Por exemplo:
» b = A(A>5)
b =
9
14
6
10
83
7
11
23
8
12

3.4.1 EXERCÍCIOS

Comandos: any, all.


Exercícios:

1) Seja o vetor x = 1:10. Verifique as afirmativas:


a) (x.^2) == ( x.*x) d) A = [1 2 3; 4 5 6; 7 8 9];
b) any((x.^3)>(3*x)) A^2 == A.^2
c) all((x./(x+1))>((x+1)./(x+1.5)))
Curso Introdutório de MATLAB 14

2) Extrair a partir do vetor x do exercício anterior:


a) elementos maiores que 5 d) elementos cujo resto da divisão
b) elementos diferentes de 3 e 5 por 3 é 1. Dica: utilize a função
c) elementos iguais a 2 5 8 9 rem.

3.5 Algumas Funções

Eis abaixo alguns exemplos de funções básicas no MATLAB. Qualquer dúvida em


como usá-las basta usar o comando help,

exp e poly polinômio característico


log logaritmo natural det determinante
log10 logaritmo base 10 abs módulo
find índice de matriz sqrt raiz quadrada
max máximo valor real parte real de número complexo
min mínimo valor imag parte imaginária de número complexo
mean média aritmética conj conjunto de número complexo
std desvio padrão round arredondar

4. POLINÔMIOS

4.1 Representando Polinômios no MATLAB

O MATLAB representa polinômios como vetores de uma linha, contendo os


coeficientes ordenados em ordem decrescente. Por exemplo, o polinômio:
x3 – 6x2 –72x – 27
é representado da forma
» p=[1 -6 -72 -27]
p =
1 -6 -72 -27

4.2 Funções Relacionadas à Polinômios

roots raízes do polinômio deconv divisão


polyval valor do polinômio no ponto polyder derivadas
conv multiplicação polyfit melhor curva
Curso Introdutório de MATLAB 15

Exemplo de ajuste de curva:


» x=1:7;
» y=[1.2 1.6 2.3 2.8 3.9 4.5 5.6];
» [x' y']
ans =
1.0000 1.2000
2.0000 1.6000
3.0000 2.3000
4.0000 2.8000
5.0000 3.9000
6.0000 4.5000
7.0000 5.6000
» faj=polyfit(x,y,1);
» faj=polyval(faj,x);
» plot(x,y,'+blue',x,faj,'black')

4.2.1 EXERCÍCIOS

1) Sejam os polinômios p = x4 – 3x2 +5x – 30 e q = 2x4 –7x3 +2x –15. Calcule:


a) p x q e) 1ª derivada de p
b) p ÷ q f) 1ª derivada de p no ponto x =3
c) p(2) g) 1ª derivada de p ÷ q
d) raízes q

5. GRÁFICOS

O MATLAB proporciona técnicas sofisticadas para visualização de dados. Ele trabalha


essencialmente com objetos gráficos, tais como linhas e superfícies, cuja aparência pode
ser controlada através de propriedades de objeto. Entretanto, como o MATLAB possui
uma vasta gama de funções para gráficos que automatizam essas propriedades, na maioria
das vezes não será necessário lidar com estes objetos.

5.1 Gráficos 2-D

A função básica para desenhar gráficos em duas dimensões é a função plot. Quando
esta função recebe um conjunto de ponto x e y, ela desenha-os em um plano cartesiano.
Por exemplo, seja o conjunto de pontos abaixo:
Curso Introdutório de MATLAB 16

Para plotar o gráfico y = f(x), primeiro cria-se um vetor x contendo os valores de x, e


depois um vetor y com os valores de y. Então chama-se a
2
x y=x função plot, que é usada da seguinte maneira:
0 0 » x=[0 1 2 3 4 5];
1 1 » y=x.^2;

2 4 » plot(x,y)

3 9 Lembrando que para definir o vetor x pode-se usar os

4 16 comandos mostrados na seção 3.1.2 (“Gerando Vetores”) e


colocar a função diretamente num dos parâmetros da função
5 25
plot. Por exemplo:
» plot(x,y)
» x=[0:5];
» plot(x,x.^2)

O MATLAB criará uma janela com a figura do gráfico ( vide figura 1). Na verdade, a
função plot recebe um número variável de argumentos. Sua forma mais geral é
plot(x1,y1,jeito1,x2,y2,jeito2,…,xn,yn,jeiton). Ou seja, você pode traçar mais de uma curva no
mesmo gráfico. O argumento jeito representa as várias opções para o gráfico, que pode ser
qualquer um dos seguintes strings2:

y amarelo w branco + cruz


m roxo k preto - sólida
c azul claro -- tracejada * estrela
r vermelho . ponto : pontilhada
g verde o círculo -. traço ponto
b azul x x

25

20

15

10

0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5

2
Figura 1 – Gráfico f(x) = x

2
Um string é uma seqüência de caracteres que o MATLAB interpreta como um texto. Os strings são
sempre denotados entre apóstrofos.
Curso Introdutório de MATLAB 17

Seja a função y = e-x ⋅ sen(x). Como seria seu gráfico no intervalo [ 0 ; e*π ] ?
Para desenhá-lo, primeiro cria-se um vetor “x” do tamanho do intervalo desejado com
um passo suficientemente pequeno para que a curva do desenho seja suave (um passo 0.1
neste caso é suficiente). Depois cria-se o vetor “y = f(x)” (ou coloca-se diretamente a função
no parâmetro da função plot), e plota-se o gráfico com o comando plot. Alguns detalhes
podem ser acrescentados:

title título do gráfico xlabel nome do eixo x


text escreve no local especificado ylabel nome do eixo y
gtext escreve texto no usando mouse grid desenha linhas de grade
semilogx gráfico mono-log em x semilogy gráfico mono-log em y
loglog gráfico di-log axis intervalo dos eixos no gráfico

gráfico f(x)=exp(-x)*sin(x)
0.35
» x=[0:0.1:exp(1)*pi]; ponto de máximo local

0.3
» y=exp(-x).*sin(x);
0.25
» plot(x,y,'--b');
0.2
» title('gráfico f(x)=exp(-x)*sin(x)');
eixo y

» xlabel('eixo x'); 0.15

» ylabel('eixo y'); 0.1

» gtext('ponto de máximo local'); 0.05

-0.05
0 1 2 3 4 5 6 7 8 9
eixo x
O gráfico da figura 2 foi gerado a partir
Figura 2 – Exemplo do uso dos
dos comandos acima.
vários comandos relacionados aos gráficos

5.1.2 EXERCÍCIOS

Comandos: plot, title, xlabel, ylabel, axis, gtext, grid, semilogx, loglog
Exercícios:

1) Plote o gráfico das seguintes funções, no intervalo especificado:


a) y = x3 –5x +2, x ∈ [-20;20] c) y = cos(ex), x ∈ [0;20]
b) y = sin(x)*cos(x), x ∈ [-2π;π] d) y = d(x3 –5x + 2)/dx, x ∈ [0;10]

2) Plote em escala mono-log ou di-log as funções acima, acrescentando elementos


como título, nome aos eixos, etc.
Curso Introdutório de MATLAB 18

5.2 Gráficos 3-D

5.2.1 FUNÇÕES ELEMENTARES PARA GRÁFICOS 3-D

O MATLAB cria uma variedade de funções para gráficos em 3 dimensões. Entre elas:

Gráfico 3D

Curvas Superfícies

plot3 Plota curvas em 3D surf, surfc, surfl superfícies 3D


contour Curvas de nível mesh, meshc, meshz cria linhas em perspectiva 3D

Por exemplo:
» t=0:pi/50:10*pi; 40

» plot3(sin(t),cos(t),t); 30

20

Gera a figura 3. Todos os outros 10

comandos de escala, título, nome aos eixos 0


1

continuam valendo (nome ao eixo z: zlabel). 0.5


0.5
1
0
0
-0.5
-0.5
-1 -1

Figura 3 – Gráfico de uma hélice circular

5.2.2 MESHGRID

O MATLAB define uma superfície do tipo mesh (rede) pelas coordenadas Z sobre um
plano x-y. Superfícies tipo mesh são úteis para visualizar matrizes demasiadamente grandes
para serem mostradas na forma numérica, ou para plotar funções de duas variáveis.

O primeiro passo para plotar uma função de 2 variáveis z=f(x,y) é gerar matrizes X e Y
contendo linhas e colunas repetidas, respectivamente, para funcionarem como o domínio da
função. A função meshgrid transforma o domínio especificado por dois vetores x y em duas
matrizes X e Y. Essas matrizes então são usadas para avaliar a função de 2 variáveis. Por
exemplo, seja a função:
Curso Introdutório de MATLAB 19

½ ½
f(x,y) = sen(x2 + y2) / (x2 + y2)
» plot3(sin(t),cos(t),t);
» [X,Y]=meshgrid(-8:0.5:8,-8:0.5:8);
» r= sqrt(X.^2+Y.^2)+eps;
» Z=sin(r)./r;
» mesh(X,Y,Z)

5.2.3 MELHORANDO A APARÊNCIA

É possível especificar o ponto de vista no qual se enxerga a figura usando o comando


view. O comando view recebe dois argumentos. O primeiro é a rotação em graus no plano
xy, e o segundo é a elevação em graus do ponto de vista. O padrão é view(-37.5,30).
Também é possível colocar vários tipos de gráficos em uma mesma figura, usando o
comando subplot. Por exemplo, subplot(m,n,p) quebra a figura em m por n subgráficos e
seleciona o p-ésimo como o atual. Mais detalhes ver help on-line.
Curso Introdutório de MATLAB 20

É possível ainda mudar o mapa de cores dos gráficos. Para tal, utilize a função
colormap.
» subplot(221)
» mesh(X,Y,Z)
» title('Sombrero')
» subplot(222)
» plot3(sin(t),cos(t),t);
» title('Hélice')
» subplot(223)
» mesh(a,b,c)
» title('Esfera')
» subplot(224)
» mesh(X,Y,3*sqrt(X.^2+Y.^2))
» title('Cone') Figura 4 - Gráfico usando comando subplot

5.2.4 EXERCÍCIOS

Comandos: plot3, mesh, contour, surf, meshgrid, view, subplot, colormap

1) Plote as seguintes funções no intervalo especificado:


a) f(x,y) = x2 + y2, x, y ∈ [-5;5] e) f(x,y) = (x + y)/(x – y), x, y ∈ [-10;10]
½
b) f(x,y) = (1 - x2 - y2) , x, y ∈ [-0.5;0.5] f) f(x,y) = x ⋅ y /(x2 + y2), x, y ∈ [-10;10]

c) f(x,y) = x ⋅ y , x, y ∈ [0;1] g) f(x,y) = sen(x/2) ⋅ cos(y/3), x, y ∈ [-π;π]


d) f(x,y) = arctg(x2 + y2) , x, y ∈ [-8;8]

2) Plote os seis primeiros gráficos do item anterior na mesma figura.

6. PROGRAMAÇÃO

Arquivos

Scripts Funções

à matrizes extensas
à comandos freqüentemente digitados Funções Função
Curso Introdutório de MATLAB 21

Outra grande vantagem do MATLAB é a facilidade para criar programas, da mesma


forma que linguagens como o C, BASIC ou Fortran.

6.1 Controladores de Fluxo

6.1.1 FOR

O laço for permite um comando, ou grupo de comandos, repetir-se um número


determinado de vezes. A forma geral de um laço for é:
for variável = expressão
comandos
end

Um laço for é sempre terminado com um end.

Por exemplo,
» for i = 1:10
v(i)=3*i;
end

Cria um vetor “v” com 10 elementos:


» v
v =

3 6 9 12 15 18 21 24 27 30

6.1.2 WHILE

O laço while permite que o comando seja repetido um número indefinido de vezes,
enquanto uma condição lógica seja satisfeita. A forma geral do laço while é:
while (expressão verdadeira)
comandos
end

Assim, como no caso de for, while precisa de um end para indicar o fim do laço. O
exemplo abaixo calcula o fatorial de n enquanto n! < 10100.
» n=1;
Curso Introdutório de MATLAB 22

» while prod(1:n)<1.e100
n=n+1;
end
» n
n =
70

6.1.3 IF

O comando if estabelece caminhos alternativos para a fluência do programa. Sua


forma geral é:
if condição verdadeira
comandos
elseif condição 2 verdadeira
comandos
else
comandos
end

A primeira condição é sempre escrita com if, a última com else, e todas as
intermediárias com elseif.

» a=round(10*rand(1));
» if a>5
b=3*a;
elseif a<5;
b=a/3;
else
b=a;
end

6.1.4 BREAK, INPUT, PAUSE

Além dos controladores de fluxo tradicionais, existem mais algumas funções que são
bastante úteis para programação. Entre elas:
break – termina um laço
input – recebe dados através do teclado. Por exemplo, n = input(‘Entre com valor: ‘)
atribui o valor digitado no teclado à variável n.
Curso Introdutório de MATLAB 23

pause – pausa na execução do programa, até que qualquer tecla ser digitada.
Pause(n) dá uma pausa de n segundos.

6.2 Arquivos M

Quando uma linha de comandos é digitada no MATLAB, ele imediatamente processa e


devolve o resultado. Porém, é possível executar seqüências de comandos, que podem ser
guardados em arquivos. Arquivos que contém comandos do MATLAB são chamados
arquivos M porque possuem extensão .m.

Um arquivo M é formado por uma seqüência de comandos ou de referência para


outros arquivos. Eles podem ser criados a partir de qualquer editor d texto (como por
exemplo, o Notepad do Windows), e são arquivos de texto comuns. Existem dois tipos
distintos de arquivos: Scripts e Funções. Existe ainda uma classe especial de funções
chamada funções função.

6.2.1 SCRIPTS

Os arquivos script automatizam uma seqüência de comandos. Quando um script é


chamado, o MATLAB simplesmente executa os comandos contidos no arquivo. Scripts são
úteis para entrar com matrizes muito extensas (pois erros de digitação podem ser facilmente
corrigidos) e comandos que seriam digitados freqüentemente.
O exemplo abaixo foi escrito do editor de texto Notepad, e calcula os primeiros
números de Fibonacci, mostrando o resultado em um gráfico.

% Arquivo M que calcula os primeiros


% números de Fibonacci
f = [1 1];
i=1;
while f(i) + f(i+1) < 1000
f(i+2) = f(i) + f(i+1)
i=i+1;
end
plot(f)

O símbolo “%” significa comentários. Tudo que estiver na linha após “%” não será
considerado pelo MATLAB.
Curso Introdutório de MATLAB 24

Estando este arquivo salvo em um dos diretórios path do MATLAB com uma extensão
.m, toda vez que seu nome for digitado, todas as linhas de comandos acima serão
executadas.

OBS: Para saber o path do MATLAB, use o comando path. Com este comando é
possível inclusive alterar o path original. Lembre-se de salvar o arquivo com uma extensão
.m, com a opção salvar como tipo: todos os arquivos (*.*).

6.2.2 ARQUIVOS-FUNÇÃO

Uma função difere de um script já que argumentos podem ser passados para a
função, e as variáveis criadas e manipuladas na função são locais para a mesma.
Na primeira linha de um arquivo função deverá aparecer a palavra function, definirá o
nome da função.
function y = escal(a,b)
% ESCAL Produto escalar de dois vetores
%
% ESCAL retorna um vetor que é o resultado do produto
% escalar de dois vetores.
% Os dois vetores devem ser do mesmo tamanho
if size(a) ~= size(b)
error(‘Erro: vetores não tem mesmo tamanho’);
end
y=sum(a.*b);

Salve este texto como um arquivo escal.m no path do MATLAB. Crie dois vetores de
mesmo tamanho e chame a função escal. A resposta será o produto escalar de dois vetores.

OBS: As primeiras linhas de comentários, que começam na 2ª linha do arquivo são


tratadas pelo help on-line como a explicação da função, sendo que a 2ª linha é usada pelo
comando lookfor. Por exemplo,
function y=próximo(x)
% PRÓXIMO Número consecutivo
% PRÓXIMO(x) retorna o próximo número natural depois de x.
%
% Veja também ANTERIOR, BLABLABLABLA

Quando dor digitado help próximo todas as linhas de comentários vão aparecer. E ao
Curso Introdutório de MATLAB 25

digitar lookfor próximo, o MATLAB irá procurar todas as funções que contenham esta
palavra, e mostrar suas 2as linhas.

6.2.3 FUNÇÕES FUNÇÃO

A função função (Function Functions) é uma classe especial de função do MATLAB,


que ao invés de receber variáveis numéricas como argumento (como no item 6.2.2)
recebem strings que são nomes de funções.

Abaixo algumas funções função e suas utilidades:


fplot gráfico de uma função fzero raiz de uma função de uma variável
quad integração numérica fmin/fmins mínimo de uma função

As funções matemáticas são representadas por arquivos-função. Por exemplo, seja a


função representando a velocidade de uma partícula:
v(t) = sen(t) ⋅ t2 +8t +1
Para plotar o gráfico da velocidades em função do tempo existem duas poções:
• criar um vetor “t” do tamanho desejado, criar um vetor v = sin(t).* t.^2 +8*t +1, e
usar a função plot com v e t;
• criar um arquivo função com a função “v(t)” e usar a função fplot.

A vantagem da 2ª opção é que o MATLAB escolherá pontos suficientemente


espaçados para que a curva seja suave. Crie um arquivo chamado velocid:
» !notepad velocid.m
function v=velocid(t)
% VELOCID velocidade de uma
% partícula num instante t
%
v=sin(t).*t.^2+8*t+1;

Agora usando o comando fplot:


» fplot('velocid',[0,12])

Da mesma forma, para avaliar o espaço percorrido no mesmo intervalo de tempo


(integral da função), ou quando a partícula está parada (v=0), basta usar as outras funções:
» x=quad('velocid',0,12)
x =
453.2952
Curso Introdutório de MATLAB 26

» t2=fzero('velocid',10)
t2 =
10.3261

6.2.4 EXERCÍCIOS

1) Crie scripts para as seqüências de comandos


a) item 5.1.1 c) item 6.2.1
b) item 5.2.2 d) que geram números primos de 2 a 1000

2) Crie uma função que:


a) calcule a média de um vetor
b) calcule o produto de duas matrizes
c) diz se um número é positivo ou negativo, par ou ímpar
d) dados T e v, a e b calcula a pressão de um gás de Van der Waals

3) Crie um script que plote o gráfico p x v de um gás de Van der Waals cujas
constantes a e b sejam determinadas ao carregar o script e cuja a temperatura
seja digitada pelo usuário. dica: use a função criada no exercício 2-d.

4) Plote o gráfico do item 2-d usando fplot. Encontre o mínimo da função através de
fmin. Assuma v, a, b constantes quaisquer.

5) Calcule a integral de:


a) f(x) = sen(x) entre 0 e 1
b) f(x) = x2 –6x +7 entre –3 e 3

7. BIBLIOGRAFIA

• MATLAB User’s Guide, The MathWorks Inc.


• TODESCO, José Leomar, Curso Introdutório de MATLAB, UNIVERSIDADE
FEDERAL DE SANTA CATARINA, 1995.
Curso Introdutório de MATLAB 27

8. RESPOSTA DOS EXERCÍCIOS

2.2.3 a) 0.0301 + 0.0301i


1) b) 1.5708 – 3.8283i
» f=[-9.81;0;1] c) min(d.^2)-max(e)
f = 7.4292
-9.8100 d) 2.2834 + 3.1416i
0 - Inf
1.0000 0
» g=[12e-8; 4i; pi*i] e) 1.0e+002 *
g = 0.0959+0.1571i 0.6523+1.0681i 1.6690+2.7332i
0.0000 0.6139+1.0053i 0.0892+0.1461i 1.4196+2.3248i
0 + 4.0000i 0 0.2494+0.4084i -0.8249-1.3509i
0 + 3.1416i f) 0.8108 0.6696 -0.5450
» A=[0.32 2.5+pi 2; 1e2 4 12; 9 51 24] 0.7396 0.3906 0.7205
A = 0.7830 0.5804 -0.5095
0.3200 5.6416 2.0000 g) 0.1739 0.0113 -0.0201
100.0000 4.0000 12.0000 0.7723 0.0035 -0.0661
9.0000 51.0000 24.0000 -1.7064 -0.0116 0.1897
» B=[5 34 87;32 4.65 74; 0 13 -43] h) -1.0128 -1.7442 -0.7156
B = -0.0055 -0.0203 0.0006
5.0000 34.0000 87.0000 0.1288 0.1933 0.0825
32.0000 4.6500 74.0000
0 13.0000 -43.0000 4)
a) x = 10.2609
2) b) y = 3.6111 3.6739 3.7241
a) –19.8720 c) Z =
b) 12.5760 -1.1394 1.7302 0.6931
c) 5.2340 5.4000 5.8592 4.6052 1.3863 2.4849
d) –24.8540 2.1972 3.9318 3.1781
0 d) t=f*’B
3.5708
e) 1.0e+002 * 5) save exerc1.mat x Z B
1.5410 6) load exerc1.mat
0 + 0.0400i 7) clear Z
-0.1571 + 0.0314i
3.1.4
1) a) c=A(3,2) c=10
b) c=B(2,2) c=2
f) 1.0e+003 * c) d=A(1,[1 2 3]) d = 1 2 3
0.1821 0.0631 0.3593 d) d=B(:,3)
0.6280 3.5746 8.4800 d = 0
1.6770 0.8552 3.5250 3
g) 0
0.6893 15.5050 0.7254 e) A(1,:)=[B(2,:),0]
311.1628 12.2320 32.8730 f) A(2,:)=A(4,:)
28.1880 158.9044 77.9055
h) –49.0500 –350.5400 –896.4700 2)
a) x=0:1:15
3) b) x=-3.4:0.32:8
Curso Introdutório de MATLAB 28

c) x=10:-1.23:1 y=polyder([1 0 –5 2]);


d) x=0:10*pi:15^2 y=polyval(y,x);
plot(y)
3)
a) válido 2) Para aplicar escala usando mono-log ou
b) inválido, sugestão: » c=A([1 2 3],:) di-log ao gráfico basta usar os comandos
c) válido semilgox(…), semilgoy(…) ou loglog(…).
d) válido
e) válido 5.2.4
f) válido 1) a)
g) válido, resulta na própria matriz A x=[-5:0.5:5];
h) válido y=x;
[x,y]=meshgrid(x,y);
4) t=A([1 2],[2 3]) t=B(1,:) z=x.^2 + y.^2;
mesh(z)
3.4.1 b)
a) 1 1 1 1 1 1 1 1 1 1 x=[-0.5:0.1:0.5];
b) 1 y=x;
c) 0 [x,y]=meshgrid(x,y);
d) z=sqrt(1 - x.^2 - y.^2);
0 0 0 mesh(z)
0 0 0 c)
0 0 0 x=[0:0.1:1];
2) y=x;
a) t=x(x>5) [x,y]=meshgrid(x,y);
b) t=x(x~=3 & x~=5) z=x.*y;
c) t=x(x==2 | x==5 | x==8 | x==9) mesh(z)
d) t=x(rem(x,3)==1)

4.2.1 d)
1) x=[-10:0.5:10];
a)» conv(p,q) y=x;
2 -7 -6 33 -110 204 55 -135 450 [x,y]=meshgrid(x,y);
b) » deconv(p,q) z=atan(x.^2 + y.^2);
0.5000 mesh(z)
d) polyval(p,2) e)
-16 x=[-10:0.5:10];
e) » roots(q) y=[-10:0.5:10];
3.5850 [x,y]=meshgrid(x,y);
0.5709 + 1.1745i z=(x+y)./(x-y);
0.5709 - 1.1745i mesh(z)
-1.2268 f)
f) » polyval(polyder(q),3) x=[-10:0.5:10];
g) » polyder(deconv(p,q)) y=[-10:0.5:10];
[x,y]=meshgrid(x,y);
5.1.2 z=(x.*y)./(x.^2-y.^2);
1) a) x=[-20:20]; mesh(z)
y=x.^3-5*x+2; g)
plot(x,y) x=[-pi:0.1:pi];
b) x=[-2*pi:0.1pi]; y=x;
y=sin(x).*cos(x) [x,y]=meshgrid(x,y);
plot(x,y) z=sin(x/2).*cos(y/3);
d) x=0:0.1:10; mesh(z)
Curso Introdutório de MATLAB 29

» quad('sin',0,1)
6.2.4 ans =
1) a) x=0:5; 0.4597
y=x.^2; b)
plot(x,y) » !notepad poli.m
end function y=poly(x)
b) x=[-10:0.5:10]; y=x.^2-6*x+7
y=[-10:0.5:10]; » quad('poli',-3,3)
[x,y]=meshgrid(x,y); ans =
z=x.^2 + y.^2; 60
mesh(z)
end
c) % Arquivo M que calcula os primeiros
% números de Fibonacci
f=[1 1];
i=1;
while (f(i) + f(i+1))<1000
f(i+2)=f(i) + f(i+1);
i=i+1;
end
plot(f)

d)

2) a) funciotn y=media(x)
y-sum(x)/length(x)
b) function y=produto(a,b)
y=a*b

c) function y = teste(x)
if rem(x,2)==0
disp(‘O número é par’)
else
disp(‘O número é impar’)
end
if abs(x)~=x
disp(‘O número é negativo’)
else
disp(‘O número é positivo’)
end
d) function y=pressao(t,v,a,b)
y=(8.31*t)./(v-b)-a./v.^2;

3) clear
clc
v=[1:0.3:10];
a=input(‘a=’);
b=input(‘b=’);
t=input(‘t=’);
plot(v,pressao(t,v,a,b))
end

5) a)

Você também pode gostar