Escolar Documentos
Profissional Documentos
Cultura Documentos
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')
Plot2d(n2,Xf2)
Plot2d(n3,Xf3)
plot(n4,Xf4)
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;
plot2d(n3,y)
title('convolução x1*x2')
O gráfico gerado pode ser visto a seguir:
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];
plot2d(n3,x3)
title('convolução x1*x2 a partir da DFT')
a=get("current_axes");
a.data_bounds=[-1,-1;6,7];
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];
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:
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.