Você está na página 1de 15

Questão 1

Para a primeira questão foram calculadas a transformada discreta de Fourier utilizando a FFT
(Fast Fourier Transform).
𝑛𝑛 𝑛𝑛
a) 𝑥𝑥[𝑛𝑛] = 2 cos �𝜋𝜋 𝑁𝑁� + sin2 �𝜋𝜋 𝑁𝑁�. Com 0 ≤ 𝑛𝑛 ≤ 9 e 𝑁𝑁 = 100.

Definimos primeiramente a variável 𝑛𝑛 para o primeiro exercício, como um vetor com valor
inicial igual a 0, valor final igual a 9 e incrementos de 1 em 1. A constante N igual a 100 e a função
x[n] dada na questão.
n1=0:1:9;
N=100;
x1=2*cos(%pi*n1/N)+(sin(%pi*n1/N))^2;

A partir da função escrita, é então calculada sua dft a partir da fft, que retorna um vetor de
valores complexos. A magnitude de tais valores complexos podem ser obtidos a partir do módulo de
cada componente. Após o cálculo da fft, é feito o módulo deste sinal e após tal calculo são plotados
seus respectivos valores. Como o k, variável independente da transformada de Fourier (𝑋𝑋(𝑘𝑘)) varia
entre 0 e 𝑁𝑁 − 1, exatamente como o n, foi utilizado o n como eixo x para 𝑋𝑋(𝑘𝑘) também.
Xf1=abs(fft(x1,-1));
Plot2d(n1,Xf1')

O gráfico gerado pode ser visto a seguir:


b) 𝑥𝑥[𝑛𝑛] = 𝑒𝑒 −2𝑛𝑛 . Com 0 ≤ 𝑛𝑛 ≤ 20
N2=0:1:20;
x2=%e^(-2*n2);
Xf2=abs(fft(x2,-1));

Plot2d(n2,Xf2)

O gráfico gerado pode ser visto a seguir:


c) 𝑥𝑥[𝑛𝑛] = 𝛿𝛿[𝑛𝑛 − 1] . Com 0 ≤ 𝑛𝑛 ≤ 20
n3=0:1:20;
x3=zeros(1,21);
x3(2)=1;
Xf3=round(abs(fft(x3,-1)));

Plot2d(n3,Xf3)

O gráfico gerado pode ser visto a seguir:


d)𝑥𝑥[𝑛𝑛] = 𝑛𝑛 . Com 0 ≤ 𝑛𝑛 ≤ 5
n4=0:1:5;
x4=n4;
Xf4=abs(fft(x4,-1));

plot(n4,Xf4)

O gráfico gerado pode ser visto a seguir:


Questão 2
Primeiramente devemos escrever as sequências no scilab, para isso determinamos o n das
duas primeiras sequencias, como 0 ≤ 𝑛𝑛 ≤ 2. Iniciamos o vetor com zeros e depois adicionamos os
valores em cada uma de suas amostras.
n=0:1:2;
N=length(n);
M=length(n);

x1=zeros(1,N);
x1(1)=1;
x1(2)=-1;
x1(3)=-0.5;

x2=zeros(1,M);
x2(1)=1;
x2(2)=-0.5;
x2(3)=-1;

Para o cálculo da convolução, primeiramente foi utilizada a função convol(x1,x2), interna do


scilab. Após isso também foi utilizada a função fft para o cálculo da convolução a partir da DFT.
Temos que uma convolução no tempo, pode ser representada por uma multiplicação na
frequência. Portanto, ao aplicar a DFT nos dois sinais, multiplicar um pelo outro e aplicar a
transformada inversa IDFT, devemos encontrar o mesmo resultado da função convol. Mas para
isso, devemos lembrar que a DFT retorna um sinal com a N amostras, mesmo tamanho do sinal no
tempo, mas a convolução retorna uma sequência com N+M-1 amostras, onde N é a quantidade de
amostras da primeira sequência e M a quantidade de amostras da segunda sequência. Sendo assim,
devemos adicionar zeros a cada sequência, de tal forma que a sequência possua N+M-1 amostras.
Para a sequencia x1, devemos adicionar M-1 amostras, já para a sequencia x2, devemos
adicionar N-1 zeros.
O cálculo da convolução a partir da função convol pode ser vista a seguir:
[y]=convol(x1,x2);
n3=0:(N+M-1)-1;

plot2d(n3,y)
title('convolução x1*x2')
O gráfico gerado pode ser visto a seguir:

O cálculo da convolução a partir da fft pode ser vista a seguir:


x1=[x1 zeros(1,M-1)];
x2=[x2 zeros(1,N-1)];
Xf1=fft(x1,-1);
Xf2=fft(x2,-1);
Xf3=Xf1.*Xf2;
x3=fft(Xf3,1);
n3=0:(N+M-1)-1;

plot2d(n3,x3)
title('convolução x1*x2 a partir da DFT')
O gráfico gerado pode ser visto a seguir:
b)
Para a sequência 𝑥𝑥2 , foi pedido para escolher um valor para a amplitude a do sinal. Foi escolhido o
valor 3.
n1=0:1:4;
n2=0:1:1;
N=length(n1);
M=length(n2);

x1=zeros(1,N);
x1(1)=0;
x1(2)=0;
x1(3)=1;
x1(4)=1;
x1(5)=1;

x2=zeros(1,M);
a=3;
x2(1)=a;
x2(2)=a;

A partir dos sinais gerados, foi realizada a convolução a partir da função convol.
[y]=convol(x1,x2);
n3=0:(N+M-1)-1;

plot(n3,y, '-o')
title('convolução x1*x2')
a=get("current_axes");
a.data_bounds=[-1,-1;6,7];

O gráfico obtido pode ser visto a seguir:


O cálculo da convolução a partir da fft pode ser vista a seguir:
x1=[x1 zeros(1,M-1)];
x2=[x2 zeros(1,N-1)];
Xf1=fft(x1,-1);
Xf2=fft(x2,-1);
Xf3=Xf1.*Xf2;
x3=fft(Xf3,1);
n3=0:(N+M-1)-1;

plot2d(n3,x3)
title('convolução x1*x2 a partir da DFT')
a=get("current_axes");
a.data_bounds=[-1,-1;6,7];

O gráfico obtido pode ser visto a seguir:


Questão 3
Foi pedido para acessar o site Freesound.org e realizar o download de um arquivo de áudio no
formato .wav. A partir do arquivo de áudio, observar a magnitude de sua resposta em frequência.
Para isso foi escolhido o arquivo chamado Accordion C sharp minor chord.wav, referente ao som
de um acorde musical chamado dó sustenido menor (C#m) tocado em um acordeão. O acorde dó
sustenido menor é formado pelas notas Dó sustenido, Mi e Sol sustenido, suas frequências podem
ser vistas a seguir:

Para analisar o áudio, primeiramente vamos carrega-lo no programa, salvando o áudio no


diretório onde o Scilab foi lançado. O nome do arquivo foi alterado para audio_bus.wav. A função
loadwave carrega as amostras de um arquivo de áudio para a variável x e seus dados para a variável
y:
[x,y]=loadwave(PWD + '\audio_bus.wav')

A partir do sinal x, foi então calculado a fft do sinal, correspondente a transformada discreta
de Fourier que retorna os valores entre 0 e 2𝜋𝜋, onde os valores entre 0 e 𝜋𝜋 representam as
frequências de 0 a frequência de amostragem dividido por 2, ou seja, a frequência de Nyquist. Os
valores entre 𝜋𝜋 e 2𝜋𝜋 representam as frequências de menos a frequência de Nyquist a 0. Para realizar
esse ajuste, é utilizada a função fftshift(). Para o calculo da magnitude, é utilizada a função abs().
Como o arquivo possui N amostras, a fft também terá N valores distintos de frequências, O
período de amostragem do sinal pode ser calculado como o inverso da sua frequência de
amostragem, que é dado no terceiro argumento de y. O eixo das frequências então deve ser escrito
como um vetor que inicia em −𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓/2 e vai até 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓/2 com a
mesma quantidade de amostras que o sinal no tempo.
Xf=abs(fftshift(fft(x(1,:), -1)));
N=length(x(1,:));
T=1/y(3);
w = linspace(-1, 1, N)/(2*T);
Para analisarmos o sinal, vamos analisar apenas até 5000Hz
plot2d(w,Xf)
title('DFT do sinal de áudio de um C#m')
a=get("current_axes");
a.data_bounds=[ 0, 0; 5000, 13000];

O gráfico gerado pode ser visto a seguir:

Vamos analisar agora as componentes encontradas nesse sinal. A primeira componente do


sinal pode ser vista a seguir:
A frequência encontrada é de 277,4Hz, pela tabela de notas 279,6Hz corresponde a nota Dó
sustenido, estando bem próximo ao valor encontrado.
A segunda componente pode ser vista a seguir:

A frequência encontrada é de 331,6Hz, pela tabela de notas 332,6Hz corresponde a nota Mi,
estando bem próximo ao valor encontrado.
A terceira componente pode ser vista a seguir:
A frequência encontrada é de 416Hz, pela tabela de notas 419Hz corresponde a nota Sol
sustenido, estando bem próximo ao valor encontrado.
A quarta componente pode ser vista a seguir:

A frequência encontrada é de 561Hz, pela tabela de notas 559,15Hz corresponde a nota Dó


sustenido, estando bem próximo ao valor encontrado.
Ao analisar as 12 primeiras frequências, temos:
Com os seguintes valores:
Componente Frequência Nota Frequência
1 277,4 Dó sustenido 4 279,6
2 331,6 Mi 4 332,6
3 416 Sol sustenido 4 419
4 561,3 Dó sustenido 5 559,15
5 663,3 Mi 5 665,28
6 831,9 Sol sustenido 5 837,94
7 994,5 Si 5 996,86
8 1109,7 Dó sustenido 6 1118,3
9 1247,9 Ré sustenido 6 1255,6
10 1338,7 Mi 6 1330,6
11 1387,2 Fá 6 1409,8
12 1683,4 Sol sustenido 6 1675,9

Como podemos ver, as notas Dó sustenido, Mi e Sol sustenido estão bem aparentes e as notas na
quinta oitava estão com amplitudes bem maiores no gráfico, mostrando assim que este acorde foi
tocado na quinta oitava. As notas que aparecem a mais, como o Si 5, Ré sustenido 6 e Fá 6
caracterizam o som do instrumento, que não apresenta puramente o acorde, mas com um certo ruído
que faz parte do instrumento e pode ser visto no espectro gerado.

Você também pode gostar