66 lines
1.8 KiB
Matlab
66 lines
1.8 KiB
Matlab
%% Inicialização do ambiente
|
|
clear; close all; clc
|
|
|
|
%% Exercício 6
|
|
sintetico_data = fopen('sintetico.csv');
|
|
sintetico = textscan(sintetico_data, '%f', 'Delimiter', ',');
|
|
sintetico = sintetico{1,1};
|
|
fclose(sintetico_data);
|
|
|
|
fn = [0.91, 0.85, 0.91, 0.95];
|
|
|
|
xf = DiogoEliseu_TP3_6f(sintetico, fn(1), 0);
|
|
for i=2:(length(fn)-1)
|
|
%figure(i)
|
|
xf = DiogoEliseu_TP3_6f(xf, fn(i), 0);
|
|
end
|
|
figure(1)
|
|
DiogoEliseu_TP3_6f(xf, fn(length(fn)), 1);
|
|
|
|
|
|
function filtrado = DiogoEliseu_TP3_6f(xo,fn,graf)
|
|
Ls = length(xo);
|
|
d = fdesign.notch('N,F0,Q', 8, fn, 10);
|
|
Hd = design(d);
|
|
SOS = Hd.SOS;
|
|
G = Hd.ScaleValues;
|
|
[num, den] = sos2tf(SOS, G);
|
|
w_2pi = linspace(0, 2*pi, length(xo))/pi;
|
|
w_pi = w_2pi(1:(length(w_2pi)/2));
|
|
h = freqz(num, den, w_2pi);
|
|
gain = 20.*log10(abs(h));
|
|
[z, p, ~] = tf2zp(num, den);
|
|
filtrado = filter(num, den, xo);
|
|
if (graf == 1)
|
|
subplot(2,3,1)
|
|
plot(xo)
|
|
xlabel('t'), ylabel('xo[t]'), title('sinal xo');
|
|
|
|
subplot(2,3,2)
|
|
plot(filtrado)
|
|
xlabel('t'), ylabel('filtrado[t]'), title('sinal filtrado');
|
|
|
|
subplot(2,3,3)
|
|
DFT_xo = fft(xo);
|
|
DFT_xo_pi = DFT_xo(1 : (Ls)/2);
|
|
plot(w_pi, abs(DFT_xo_pi));
|
|
xlabel('\omega/\pi'), ylabel('|X(\omega)|'), title('DFT xo em [0, \pi]')
|
|
|
|
subplot(2,3,4)
|
|
DFT_filtrado = fft(filtrado);
|
|
DFT_filtrado_pi = DFT_filtrado(1 : (Ls)/2);
|
|
|
|
plot(w_pi, abs(DFT_filtrado_pi));
|
|
xlabel('\omega/\pi'), ylabel('|X(\omega)|'), title('DFT xo filtrado em [0, \pi]')
|
|
|
|
subplot(2,3,5)
|
|
plot(w_2pi, gain);
|
|
ylabel("Ganho (dB)"); xlabel("\omega/2\pi"); title('Ganho do filtro');
|
|
|
|
subplot(2,3,6)
|
|
zplane(z, p)
|
|
title("Diagrama de Zeros e Polos");
|
|
end
|
|
end
|
|
|