From 9bf8347b79670c6e0b0107f27380c64cd484b312 Mon Sep 17 00:00:00 2001 From: Priec Date: Tue, 2 Dec 2025 22:55:37 +0100 Subject: [PATCH] final code for css --- semestralka/1.m | 43 ----------------- semestralka/2.m | 29 ------------ semestralka/FIR.m | 61 ++++++++++++++++++++++++ semestralka/IIR_SOS.m | 56 ++++++++++++++++++++++ semestralka/full_IIR.m | 102 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 219 insertions(+), 72 deletions(-) delete mode 100644 semestralka/1.m delete mode 100644 semestralka/2.m create mode 100644 semestralka/FIR.m create mode 100644 semestralka/IIR_SOS.m create mode 100644 semestralka/full_IIR.m diff --git a/semestralka/1.m b/semestralka/1.m deleted file mode 100644 index 8f54119..0000000 --- a/semestralka/1.m +++ /dev/null @@ -1,43 +0,0 @@ -clc; -close all; -clear all; - -% semestralka -rawText = fileread('data6.dat'); -nums = regexp(rawText, '[-+]?\d+', 'match'); -data = int16(str2double(nums)); - -X = DFT_priama(double(data)); -n = length(X); -Fs = 200; -freq = (0:n-1)*Fs/n; - -figure; -plot(double(data)); -figure; -plot(freq, X) -%3 -figure; -magX = abs(X); -plot(freq, magX) -% freq shift pre -Fs/2 po Fs/2 -freq_shift = (-n/2:n/2-1)*(Fs/n); -%4 -figure; -subplot(2,1,1); -plot(freq_shift, real(fftshift(X)), 'b'); -subplot(2,1,2); -plot(freq_shift, imag(fftshift(X)), 'r'); -%5 -figure; -plot(freq, imag(X), 'r'); -%6 -figure; -plot(freq, real(X), 'r'); -figure; -plot(freq, angle(X)) - -[pks, locs] = findpeaks(magX, 'NPeaks', 10, 'SortStr', 'descend'); -f0 = freq(locs) -f0b = f0(f0 < 100); -f0_ohranicene = f0b diff --git a/semestralka/2.m b/semestralka/2.m deleted file mode 100644 index 75c6056..0000000 --- a/semestralka/2.m +++ /dev/null @@ -1,29 +0,0 @@ -clc; -close all; -clear all; - -f0_ohranicene = [25, 20, 10, 12.5]; -% semestralka -rawText = fileread('data6.dat'); -nums = regexp(rawText, '[-+]?\d+', 'match'); -data = int16(str2double(nums)); - -Fs = 200; -r = 0.95; -b = 1; -a = 1; - -for k = 1:length(f0_ohranicene) - theta = 2*pi*(f0_ohranicene(k)/Fs); - b = conv(b, [1, -2*cos(theta), 1]); - a = conv(a, [1, -2*r*cos(theta), r^2]); -end - -figure; -zplane(b, a); -figure; -freqz(b, a); -figure; -freqz(b, a); -filtered_data = filter(b, a, double(data)); -plot(filtered_data); diff --git a/semestralka/FIR.m b/semestralka/FIR.m new file mode 100644 index 0000000..5ac7fdb --- /dev/null +++ b/semestralka/FIR.m @@ -0,0 +1,61 @@ +clc; +close all; +clear all; + +f0_ohranicene = [25, 20, 10, 12.5]; +% semestralka +rawText = fileread('data6.dat'); +nums = regexp(rawText, '[-+]?\d+', 'match'); +data = int16(str2double(nums)); + +Fs = 200; +N = 3000; +notch_hw = 0.08; +trans_bw = 0.08; +f0_sorted = sort(f0_ohranicene); +F = []; +A = []; +prev_end = 0; + +for k = 1:length(f0_sorted) + f0 = f0_sorted(k); + notch_start = (f0 - notch_hw) / (Fs/2); + notch_end = (f0 + notch_hw) / (Fs/2); + trans_start = max(prev_end + 0.001, (f0 - notch_hw - trans_bw) / (Fs/2)); + trans_end = (f0 + notch_hw + trans_bw) / (Fs/2); + if trans_start > prev_end + 0.001 + F = [F, prev_end, trans_start]; + A = [A, 1, 1]; + end + F = [F, notch_start, notch_end]; + A = [A, 0, 0]; + prev_end = trans_end; +end + +if prev_end < 1 + F = [F, prev_end, 1]; + A = [A, 1, 1]; +end + +F = max(0, min(1, F)); +b = firls(N, F, A); +a = 1; + +b = real(b); +figure; +zplane(b, a); +figure; +freqz(b, a); +set(gcf, 'Color', 'none'); +set(gca, 'Color', 'none'); +print('-depsc', 'fig1_semD.eps'); +figure; +freqz(b, a); +filtered_data = filtfilt(b, a, double(data)); +title('Filtrovaný signál'); +xlabel('Vzorky'); +ylabel('Amplitúda'); +set(gcf, 'Color', 'none'); +set(gca, 'Color', 'none'); +plot(filtered_data); +print('-depsc', 'fig2_semD.eps'); diff --git a/semestralka/IIR_SOS.m b/semestralka/IIR_SOS.m new file mode 100644 index 0000000..1c39332 --- /dev/null +++ b/semestralka/IIR_SOS.m @@ -0,0 +1,56 @@ +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'); diff --git a/semestralka/full_IIR.m b/semestralka/full_IIR.m new file mode 100644 index 0000000..711a946 --- /dev/null +++ b/semestralka/full_IIR.m @@ -0,0 +1,102 @@ +clc; +close all; +clear all; + +% semestralka +rawText = fileread('data6.dat'); +nums = regexp(rawText, '[-+]?\d+', 'match'); +data = int16(str2double(nums)); + +X = DFT_priama(double(data)); +n = length(X); +Fs = 200; +freq = (0:n-1)*Fs/n; + +figure; +plot(double(data)); +figure; +plot(freq, X) +%3 +figure; +magX = abs(X); +plot(freq, magX) +%4 +% freq shift pre -Fs/2 po Fs/2 +freq_shift = (-n/2:n/2-1)*(Fs/n); +figure; +subplot(2,1,1); +plot(freq_shift, real(fftshift(X))); +title('Reálna časť posunutého spektra'); +xlabel('Frekvencia [Hz]'); +ylabel('Reálna hodnota'); +subplot(2,1,2); +plot(freq_shift, imag(fftshift(X)), 'r'); +title('Imaginárna časť posunutého spektra'); +xlabel('Frekvencia [Hz]'); +ylabel('Imaginárna hodnota'); +set(gcf, 'PaperPosition', [0 0 1.7*6 0.75*4.2]); +set(gcf, 'PaperSize', [1.7*6 0.75*4.2]); +set(gcf, 'Color', 'none'); set(gca, 'Color', 'none'); +print('-depsc', 'fig_im_real_semC.eps'); +%5 +figure; +plot(freq, imag(X), 'r'); +%6 +figure; +plot(freq, real(X)); +%7 +figure; +% fazove spektrum +plot(freq, angle(X)) + +[pks, locs] = findpeaks(magX, 'NPeaks', 10, 'SortStr', 'descend'); +f0 = freq(locs) +f0b = f0(f0 < 100); % nyquistov teorem +f0_ohranicene = f0b + +f0_ohranicene(f0_ohranicene < 2) = []; +r = 0.975; +b = 1; +a = 1; + +for k = 1:length(f0_ohranicene) + theta = 2*pi*(f0_ohranicene(k)/Fs); + b = conv(b, [1, -2*cos(theta), 1]); + a = conv(a, [1, -2*r*cos(theta), r^2]); +end + +figure; +zplane(b, a); +title('Nuly a póly filtra'); +xlabel('Reálna časť'); +ylabel('Imaginárna časť'); +set(gcf, 'Color', 'none'); set(gca, 'Color', 'none'); +print('-depsc', 'fig1_semC.eps'); + +figure; +freqz(b, a); +title('Frekvenčná charakteristika (1)'); +xlabel('Frekvencia [Hz]'); +ylabel('Zosilnenie [dB]'); +set(gcf, 'Color', 'none'); set(gca, 'Color', 'none'); +print('-depsc', 'fig2_semC.eps'); + +figure; +freqz(b, a); +title('Frekvenčná charakteristika (2)'); +xlabel('Frekvencia [Hz]'); +ylabel('Zosilnenie [dB]'); +set(gcf, 'Color', 'none'); set(gca, 'Color', 'none'); +print('-depsc', 'fig3_semC.eps'); + +filtered_data = filter(b, a, 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_semC.eps');