57 lines
1.3 KiB
Matlab
57 lines
1.3 KiB
Matlab
clc;
|
|
close all;
|
|
clear all;
|
|
|
|
f0_ohranicene = [25, 20, 10, 12.5];
|
|
rawText = fileread('data6.dat');
|
|
nums = regexp(rawText, '[-+]?\d+', 'match');
|
|
data = int16(str2double(nums));
|
|
|
|
Fs = 200;
|
|
r = 0.98;
|
|
|
|
% predalokovana SOS matica pre vsetky filtrovane zlozky
|
|
% 6 lebo koeficienty [b0, b1, b2, a0, a1, a2]
|
|
sos = zeros(length(f0_ohranicene), 6);
|
|
|
|
for k = 1:length(f0_ohranicene)
|
|
theta = 2 * pi * (f0_ohranicene(k) / Fs);
|
|
b = [1, -2*cos(theta), 1];
|
|
a = [1, -2*r*cos(theta), r^2];
|
|
sos(k, :) = [b, a]
|
|
end
|
|
|
|
figure;
|
|
[z, p, k_gain] = sos2zp(sos);
|
|
|
|
figure;
|
|
zplane(z, p);
|
|
title('Nuly a póly filtra');
|
|
xlabel('Reálna časť');
|
|
ylabel('Imaginárna časť');
|
|
set(gcf, 'Color', 'none');
|
|
set(gca, 'Color', 'none');
|
|
print('-depsc', 'fig2_semE.eps');
|
|
|
|
figure;
|
|
freqz(sos, 4096, Fs);
|
|
title('Frekvenčná charakteristika SOS filtra');
|
|
xlabel('Frekvencia [Hz]');
|
|
ylabel('Zosilnenie [dB]');
|
|
set(gcf, 'Color', 'none');
|
|
set(gca, 'Color', 'none');
|
|
print('-depsc', 'fig3_semE.eps');
|
|
|
|
filtered_data = sosfilt(sos, double(data));
|
|
figure;
|
|
plot(filtered_data);
|
|
title('Filtrovaný signál');
|
|
xlabel('Vzorky');
|
|
ylabel('Amplitúda');
|
|
grid on;
|
|
set(gcf, 'Color', 'none');
|
|
set(gca, 'Color', 'none');
|
|
set(gcf, 'PaperPosition', [0 0 1.7*6 0.75*4.2]);
|
|
set(gcf, 'PaperSize', [1.7*6 0.75*4.2]);
|
|
print('-depsc', 'fig4_semE.eps');
|