Você está na página 1de 14

UNIVERSIDADE FEDERAL DE UBERLÂNDIA - UFU

FEELT31717 – PROCESSAMENTO DIGITAL DE SINAIS

PROFESSORA: MILENA BUENO PEREIRA CARNEIRO

Trabalho 1

MatLab aplicado ao PDS

Larissa Teodoro da Silva 11321EMT021

Uberlândia, Novembro de 2020


Sumário
1. Introdução ............................................................................................................................... 3
2. Operações com Vetores ...................................................................................................... 3
3. Operações com Matrizes ........................................................................................................ 6
4. Operações com Arquivos de Áudio ..................................................................................... 8
5. Operações com Arquivos de Imagem ................................................................................. 9
6. Atividades ................................................................................................................................. 13
1. Introdução

O objetivo deste trabalho é familiarizar os alunos com o programa MatLab,


software escolhido como ambiente de simulação para a prática desta disciplina.
Mostraremos as funcionalidades do MatLab que realizam a manipulação de
arquivos multimídia: áudio, imagem e vídeo; bem como mostrar algumas técnicas
específicas de programação em MatLab.

2. Operações com Vetores

2.1. Para a criação de um vetor que inicia em 0 e finaliza em 25 com


espaçamento de 1 entre cada termo, pode ser vista a seguir:

x = 0:1:25;

Figura 1 – Código do exercício 2.1

2.2. Para a criação de um vetor que inicia em 24 e finaliza em 0 com


espaçamento de 1 entre cada termo, precisamos fazer um decremento de -1,
podemos observar a seguir:

X = 24:-1:0

Figura 2 – Código do exercício 2.2


2.3. Primeiramente é gerado um vetor de zeros com 1 linha e 100 colunas,
denominado z, o segundo comando é responsável pela criação de um vetor n com
100 elementos (0, -99), com espaçamento de uma unidade entre cada termo do
vetor, na terceira linha de comando faz com que do 1 ao 26º elemento de z passe
a ter valor do vetor X, o mesmo acontece com o quarto comando, porém do 27º ao
51º elemento passa a ter valor do vetor Y. A quinta linha é responsável por plotar
um gráfico relacionando os vetores n e z (onde n é as abscissas e z as ordenadas).
O comando axis [ ] tem a função de determinar os limites inferiores e superiores
dos eixos do gráfico. Já o comando grid tem a função de gerar as linhas de grade
no gráfico. Abaixo podemos observar o código e o gráfico obtido.

X = 0:1:25
Y = linspace(24,0,25)
n = 0:99 %Cria um vetor com 100 posições de 0 a 99
z = zeros(1,100) %cria um vetor com 100 posições todas de elemento 0
z(1:26)= X %As posições 1 a 26 são completadas com os elementos de X
z(27:51)= Y %As posições 27 a 51 são completadas com os elementos de Y
plot(n,z) %O conjunto de matrizes é retornado como gráfico (elementos N
na abcissa e Z na ordenada)
axis([-2 100 -1 30])%Determina-se os extremos dos eixos x e y
respectivamente
grid

Figura 3 – Gráfico nXz


2.4. Inicialmente foi criado um vetor zp periódico com três períodos de z, a função
stem faz a unificação das três curvas geradas e por último é feito o cálculo do
período fundamental e a frequência fundamental para a amostragem fornecida.
Dessa forma obtemos o resultado de 0,0125 para o período fundamental e 80hz
para a frequência fundamental. Todas essas funções e resultados foram obtidos
com o código a seguir e logo abaixo temos as curvas obtidas.

X = 0:1:25
Y = linspace(24,0,25)
n = 0:99 %Cria um vetor com 100 posições de 0 a 99
z = zeros(1,100) %cria um vetor com 100 posições todas de
elemento 0
z(1:26)= X %As posições 1 a 26 são completadas com os
elementos de X
z(27:51)= Y %As posições 27 a 51 são completadas com os
elementos de Y
plot(n,z) %O conjunto de matrizes é retornado como gráfico
axis([-2 100 -1 30]) %Determina-se os extremos dos eixos x e y
respectivamente
grid

%Usando a função steam


zp(1:100) = z;
zp(101:200) = z;
zp(201:300) = z;
stem(zp);

%Período fundamental e a frequência fundamental do sinal visualizado


fs = 8000; %Amostragem
Ts = 1/fs %Período de amostragem
T_f = 100*Ts %Período fundamental
F_f = 1/T_f %Frequência fundamental

Figura 4 – Curva discretizada para zp


3. Operações com Matrizes

3.1/3.2. Para a criação das duas matrizes A(3x3) e C(3x2) foi usado os comandos
que estão nas imagens a seguir:
Logo em seguida foi feito a multiplicação das mesmas.

Figura 5 – Operação com Matrizes

3.3. Quando é utiliza o comando A.*C aparece uma mensagem de erro, isso
acontece devido à dimensão das matrizes, para a utilização desse comando é
necessário que as matrizes tenham a mesma dimensão.

Figura 6 – Operação com Matrizes


Agora quando utiliza o comando ones (3,3), cria-se uma matriz de dimensão 3x3
onde todos os seus elementos é 1, e dessa forma é possível usar o comando A.*D
sem a mensagem de erro.

Figura 7 – Operação com Matrizes

3.4. O código a baixo foi realizado para a criação de uma matriz unitária 1500x1500,
logo após a criação seus termos são multiplicados por 5. A função tic-toc tem a
função de contador e a mesma retorna o tempo gasto para a realização da
operação.

clc;
clear all;

M = ones(1500); %Matriz unitária de dimensão 1500x1500.


tic %Inicia a contagem do loop for.
for i = 1:1500 %Varre as linhas.
for j = 1:1500 %Varre as colunas.
M(i,j) = 5*M(i,j); %Multiplica cada elemento da matriz por 5.
end
end
tempo_loop = toc; %Finaliza a contagem do loop for.tic
M1 = 5*M;
tempo_mult = toc;

O tempo de execução foi de 0,0967s.


3.5 /3.6. O comando mean(x,2) tem a função de realizar a média de cada linha da
matriz X, transformando a mesma em 2x1 , o que possibilita a multiplicação com a
matriz ones(1,3) e por fim após a subtração teremos como resultado uma matriz
2x3. O código executado pode ser visto a seguir:

clc;
clear all;

X = [2 3 10; 21 35 42] %Matriz criada

M = mean(X,2)
X1 = X - M*ones(1,3)

Figura 8 – Operação com Matrizes

4. Operações com Arquivos de Áudio


4.1. Para fazer a leitura do arquivo de música é realizado o código abaixo:

clc;
clear all;

music = 'musica.wav'; %Variavél music criada para receber o arquivo


[Y,FS,BITS] = wavread(music); %Leitura dos dados
soundsc(Y,FS,BITS); %Salva o número de Bits, o sinal Y e a taxa de
amostragem
plot(Y); %Plota o gráfico

As funções wavwhrite () é para escrever um aúdio e a wavrecord () é usada para


gravae um sinal sonoro com um número de amostras e amostragem determinada.
Figura 9 – Sinal do arquivo de áudio

4.2. Quando os valores de FS e Bits alterados, onde nesse caso foi de 44100Hz e
16 bits, temos o código abaixo. Se a taxa de amostragem é aumentada, podemos
observar um som mais agudo, devido a maior frequência de execução do áudio
original, agora quando de diminuímos a taxa de amostragem o som será mais
grave.

FS = FS*10;
BITS = BITS*2;
music = 'musica.wav'
[Y,FS,BITS] = wavread(musica);
soundsc(Y,FS,BITS);
plot(Y);

5. Operações com Arquivos de Imagem

5.1/5.2. A função imread() tem a função de carregar a imagem, em seguida a função


ind2gray() faz com que os valores da matriz da matriz sejam convertidos para
valores cinzas e por último o imshow() é para podermos exibir o conteúdo.
clc;
clear all;

[m n] = imread('teste', 'bmp');
Y = ind2gray(m,n);
imshow(Y);

Figura 10 – Imagem exibida

5.3. O código para a binarização pode ser visto a seguir:


clear all;
clc;
% a – matriz com a imagem a ser binarizada
% b – limiar de binarizacao (intensidade do pixel)
function Y1 = binariza(a,b)
% a = 'imagem.bmp'
for i = 1:size(a,1) % Quantidade de linhas da matriz
for j = 1:size(a,2) % Quantidade de colunas da matriz
if a(i,j) > b % Se o valor lido for maior que o limiar de
binarização, é setado o bit 1 nesta posição
a(i,j) = 1;
else
a(i,j) = 0;
end
end
end
Y1 = binariza(img,300); % Binariza
end
5.4. Para as linhas de comando fornecida, obtêm a imagem a seguir:
Y1 = Y1 > 0,5;
imshow(Y1);

Figura 11 – Imagem binarizada

5.5. Para fazer essa questão o código foi o mostrado abaixo:


clear all;
clc;

imagem = 'teste1';
matriz = imread(imagem, 'bmp');
figure(1);
contour(matriz);
figure(2);
mesh(matriz);

A função contour(), plota apenas as linhas de contorno, já a função mesh() plota


uma curva.
Figura 12 – Gráfico obtido com a função contour()

Figura 13 – Gráfico obtido com a função mesh()


6. Atividades

6.1. A função linspace () é a função que cria um vetor, o qual inicia em x1 e


finaliza em x2, com N termos.
x = linspace(x1, x2, N);

A razão é dada por:


r = (x2 - x1)/(N - 1); %r é a razão entres os termos que a função linspace
retorna.

6.2.
i)
n = 0:10;
y = zeros(1,length(n));
for j = 1 : length(y)
y(1,j) = n(1,j).*sin(pi*n(1,j)/2);
end
xlabel('n');
ylabel('y');
stem(n,y);

Figura 14 – Sinal retornado


ii)

n = 0:10;
zn = zeros(1,length(n));
for j = 1:length(zn)
zn(1,j) = (0.5^n(1,j)).*exp(i*n(1,j)*pi/2);
end
xlabel('n');
ylabel('zn');
stem(n,abs(zn)); %O comando dessa forma plota o gráfico absoluto da curva

Figura 15 – Sinal retornado

Você também pode gostar