Skip to content
Snippets Groups Projects
Commit 7ff7e221 authored by Antonio Emilio's avatar Antonio Emilio
Browse files

feat

parent e0dd2dfb
No related branches found
No related tags found
No related merge requests found
0,0,-23
1,1023,-23
2,0,-24
......@@ -48,4 +49,49 @@
47,-6,-12
48,-6,-12
49,-3,-12
50,-1,-12
\ No newline at end of file
50,-1,-12
51,0,-13
52,2,-13
53,4,-12
54,0,-12
55,-1,-11
56,1,-10
57,1,-10
58,2,-9
59,5,-8
60,8,-7
61,11,-6
62,12,-5
63,9,-4
64,8,-2
65,9,-1
66,8,1
67,8,2
68,14,4
69,15,5
70,18,5
71,21,6
72,21,6
73,23,6
74,21,7
75,20,7
76,20,8
77,19,9
78,25,11
79,31,13
80,32,15
81,32,17
82,35,19
83,35,20
84,31,21
85,32,22
86,30,23
87,30,24
88,32,25
89,36,25
90,38,25
91,38,25
92,40,25
93,38,24
94,36,24
95,35,23
\ No newline at end of file
--- Coefficients du filtre Baseline ---
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(-1, 11),
to_signed(-1, 11),
to_signed(-1, 11),
to_signed(-1, 11),
to_signed(-1, 11),
to_signed(-1, 11),
to_signed(-2, 11),
to_signed(-2, 11),
to_signed(-2, 11),
to_signed(-3, 11),
to_signed(-3, 11),
to_signed(-3, 11),
to_signed(-4, 11),
to_signed(-4, 11),
to_signed(-5, 11),
to_signed(-5, 11),
to_signed(-6, 11),
to_signed(-6, 11),
to_signed(-7, 11),
to_signed(-7, 11),
to_signed(-8, 11),
to_signed(-8, 11),
to_signed(-9, 11),
to_signed(-10, 11),
to_signed(-10, 11),
to_signed(-11, 11),
to_signed(-11, 11),
to_signed(-12, 11),
to_signed(-13, 11),
to_signed(-13, 11),
to_signed(-14, 11),
to_signed(-14, 11),
to_signed(-15, 11),
to_signed(-15, 11),
to_signed(-16, 11),
to_signed(-16, 11),
to_signed(-17, 11),
to_signed(-17, 11),
to_signed(-18, 11),
to_signed(-18, 11),
to_signed(-18, 11),
to_signed(-19, 11),
to_signed(-19, 11),
to_signed(-19, 11),
to_signed(-19, 11),
to_signed(-19, 11),
to_signed(-19, 11),
to_signed(1004, 11),
to_signed(-19, 11),
to_signed(-19, 11),
to_signed(-19, 11),
to_signed(-19, 11),
to_signed(-19, 11),
to_signed(-19, 11),
to_signed(-18, 11),
to_signed(-18, 11),
to_signed(-18, 11),
to_signed(-17, 11),
to_signed(-17, 11),
to_signed(-16, 11),
to_signed(-16, 11),
to_signed(-15, 11),
to_signed(-15, 11),
to_signed(-14, 11),
to_signed(-14, 11),
to_signed(-13, 11),
to_signed(-13, 11),
to_signed(-12, 11),
to_signed(-11, 11),
to_signed(-11, 11),
to_signed(-10, 11),
to_signed(-10, 11),
to_signed(-9, 11),
to_signed(-8, 11),
to_signed(-8, 11),
to_signed(-7, 11),
to_signed(-7, 11),
to_signed(-6, 11),
to_signed(-6, 11),
to_signed(-5, 11),
to_signed(-5, 11),
to_signed(-4, 11),
to_signed(-4, 11),
to_signed(-3, 11),
to_signed(-3, 11),
to_signed(-3, 11),
to_signed(-2, 11),
to_signed(-2, 11),
to_signed(-2, 11),
to_signed(-1, 11),
to_signed(-1, 11),
to_signed(-1, 11),
to_signed(-1, 11),
to_signed(-1, 11),
to_signed(-1, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 11),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(-1, 12),
to_signed(-1, 12),
to_signed(-1, 12),
to_signed(-1, 12),
to_signed(-1, 12),
to_signed(-1, 12),
to_signed(-2, 12),
to_signed(-2, 12),
to_signed(-2, 12),
to_signed(-3, 12),
to_signed(-3, 12),
to_signed(-3, 12),
to_signed(-4, 12),
to_signed(-4, 12),
to_signed(-5, 12),
to_signed(-5, 12),
to_signed(-6, 12),
to_signed(-6, 12),
to_signed(-7, 12),
to_signed(-7, 12),
to_signed(-8, 12),
to_signed(-8, 12),
to_signed(-9, 12),
to_signed(-10, 12),
to_signed(-10, 12),
to_signed(-11, 12),
to_signed(-11, 12),
to_signed(-12, 12),
to_signed(-13, 12),
to_signed(-13, 12),
to_signed(-14, 12),
to_signed(-14, 12),
to_signed(-15, 12),
to_signed(-15, 12),
to_signed(-16, 12),
to_signed(-16, 12),
to_signed(-17, 12),
to_signed(-17, 12),
to_signed(-18, 12),
to_signed(-18, 12),
to_signed(-18, 12),
to_signed(-19, 12),
to_signed(-19, 12),
to_signed(-19, 12),
to_signed(-19, 12),
to_signed(-19, 12),
to_signed(-19, 12),
to_signed(1004, 12),
to_signed(-19, 12),
to_signed(-19, 12),
to_signed(-19, 12),
to_signed(-19, 12),
to_signed(-19, 12),
to_signed(-19, 12),
to_signed(-18, 12),
to_signed(-18, 12),
to_signed(-18, 12),
to_signed(-17, 12),
to_signed(-17, 12),
to_signed(-16, 12),
to_signed(-16, 12),
to_signed(-15, 12),
to_signed(-15, 12),
to_signed(-14, 12),
to_signed(-14, 12),
to_signed(-13, 12),
to_signed(-13, 12),
to_signed(-12, 12),
to_signed(-11, 12),
to_signed(-11, 12),
to_signed(-10, 12),
to_signed(-10, 12),
to_signed(-9, 12),
to_signed(-8, 12),
to_signed(-8, 12),
to_signed(-7, 12),
to_signed(-7, 12),
to_signed(-6, 12),
to_signed(-6, 12),
to_signed(-5, 12),
to_signed(-5, 12),
to_signed(-4, 12),
to_signed(-4, 12),
to_signed(-3, 12),
to_signed(-3, 12),
to_signed(-3, 12),
to_signed(-2, 12),
to_signed(-2, 12),
to_signed(-2, 12),
to_signed(-1, 12),
to_signed(-1, 12),
to_signed(-1, 12),
to_signed(-1, 12),
to_signed(-1, 12),
to_signed(-1, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
to_signed(0, 12),
--- Coefficients du filtre Pei-Tseng A ---
to_signed(1024, 11),
to_signed(-1554, 11),
to_signed(897, 11),
to_signed(1024, 12),
to_signed(-1554, 12),
to_signed(897, 12),
--- Coefficients du filtre Pei-Tseng B ---
to_signed(961, 11),
to_signed(-1554, 11),
to_signed(961, 11),
to_signed(961, 12),
to_signed(-1554, 12),
to_signed(961, 12),
--- Coefficients du filtre Parks-McClellan ---
to_signed(-119, 11),
to_signed(122, 11),
to_signed(149, 11),
to_signed(191, 11),
to_signed(226, 11),
to_signed(239, 11),
to_signed(226, 11),
to_signed(191, 11),
to_signed(149, 11),
to_signed(122, 11),
to_signed(-119, 11),
to_signed(-119, 12),
to_signed(122, 12),
to_signed(149, 12),
to_signed(191, 12),
to_signed(226, 12),
to_signed(239, 12),
to_signed(226, 12),
to_signed(191, 12),
to_signed(149, 12),
to_signed(122, 12),
to_signed(-119, 12),
......@@ -2,16 +2,17 @@
% https://archive.physionet.org/cgi-bin/atm/ATM
% Echantillonne à 500Hz (F_Nyquist = 250Hz)
% Script OCTAVE (pas matlab...)
fid = fopen("values.txt", "w");
Fs = 500; % Frequence d'echantillonnage
Fn = Fs/2; % Frequence de Nyquist
figure(1)
%figure(1)
T = csvread('./ADCSamplesOctave.csv');
% subplot(2,3,1);plot(T(:,2));title('Raw ECG signal');xlabel('Samples (Fs=500Hz)');ylabel('Magnitude (output of an 11-bit ADC)');
%subplot(2,3,1);plot(T(:,2));title('Raw ECG signal');xlabel('Samples (Fs=500Hz)');ylabel('Magnitude (output of an 11-bit ADC)');
% Pour Octave (à supprimer sous Matlab)
pkg load signal;
fid = fopen("output.txt", "w");
% Pour les trois filtres suivants, on peut jouer sur les ordres
% donc le nombre de coefficients des filtres numériques
......@@ -19,37 +20,33 @@ fid = fopen("output.txt", "w");
fBaseLine = fir1(128, 5/Fn, 'high'); % Génération du filtre
fBaseLine = round(fBaseLine * 2^10); % Normalisation et mise à l'échelle
y_minus_BL = filter(fBaseLine, [1], T(:,2)); % Application du filtre
fprintf(fid, "\n--- 1er Filtre ---\n");
for i = 1:length(y_minus_BL)
fprintf(fid, "%f\n", y_minus_BL(i));
end
% subplot(2,3,2);plot(y_minus_BL);title('Baseline wander reduced');xlabel('Samples (Fs=500Hz)');ylabel('Magnitude (digital signal)');
% subplot(2,3,3);plot(y_minus_BL(1:1000));title('Baseline wander reduced -- zoomed');xlabel('Samples (Fs=500Hz)');ylabel('Magnitude (digital signal)');
fprintf(fid, "----------------\n");
% Élimination du bruit à 50Hz par un coupe-bande basique (Notch FIR)
f50Hz = fir1(100, [45 55]/Fn, 'stop'); % Génération du filtre
f50Hz = round(f50Hz * 2^10); % Normalisation et mise à l'échelle
y_minus_50Hz_simple = filter(f50Hz, [1], y_minus_BL); % Application du filtre
for i = 1:length(y_minus_50Hz_simple)
fprintf(fid, "%f\n", y_minus_50Hz_simple(i));
end
% subplot(2,3,4);plot(y_minus_50Hz_simple(1:1000));title('FIR1 band-cut-- zoomed');xlabel('Samples (Fs=500Hz)');ylabel('Magnitude (digital signal)');
fprintf(fid, "----------------\n");
% Élimination du bruit à 50Hz par un coupe-bande plus élaboré (Pei-Tseng) IIR
[b, a] = pei_tseng_notch(50 / Fn, 10/Fn);
b = round(b * 2^10);
a = round(a * 2^10);
y_minus_50Hz_pei_tseng = filter(b, a, y_minus_BL);
fprintf(fid, "\n--- 2eme Filtre ---\n");
for i = 1:length(y_minus_50Hz_pei_tseng)
fprintf(fid, "%f\n", y_minus_50Hz_pei_tseng(i));
end
% subplot(2,3,5);plot(y_minus_50Hz_pei_tseng(1:1000));title('Pei Tseng band-cut -- zoomed');xlabel('Samples (Fs=500Hz)');ylabel('Magnitude (digital signal)');
fprintf(fid, "----------------\n");
% Lissage du bruit haute fréquence par filtre de Parks-McClellan (Low-pass FIR)
Fpass = 50;
Fstop = 60;
......@@ -58,12 +55,17 @@ A = [1 1 0 0];
fLP = remez(10, F, A); % Génération du filtre
fLP = round(fLP * 2^10); % Normalisation et mise à l'échelle
yLP = filter(fLP, [1], y_minus_50Hz_pei_tseng); % Application du filtre
fprintf(fid, "\n--- 3eme Filtre ---\n");
for i = 1:length(yLP)
fprintf(fid, "%f\n", yLP(i));
end
fclose(fid);
% subplot(2,3,6);plot(yLP(1:1000));title('Low-pass filter to suppress high-freq noise -- zoomed');xlabel('Samples (Fs=500Hz)');ylabel('Magnitude (digital signal)');
figure(2)
% figure(2)
% subplot(2,1,1);plot(T(:,2));title('Raw ECG signal');xlabel('Samples (Fs=500Hz)');ylabel('Magnitude (digital signal)');
subplot(2,1,2);plot(yLP);title('After 3 filters');xlabel('Samples (Fs=500Hz)');ylabel('Magnitude (digital signal)');
% subplot(2,1,2);plot(yLP);title('After 3 filters');xlabel('Samples (Fs=500Hz)');ylabel('Magnitude (digital signal)');
% print(2, "ECG_raw_3filters.pdf", "-dpdflatexstandalone");
% figure(3)
......@@ -74,37 +76,33 @@ subplot(2,1,2);plot(yLP);title('After 3 filters');xlabel('Samples (Fs=500Hz)');y
% EXPORT DES COEFFICIENTS POUR VHDL
% Conversion en entiers signés et exportation
%printf("\n--- Coefficients du filtre Baseline ---\n");
printf("\n--- Coefficients du filtre Baseline ---\n");
fid = fopen("coeficientes_vhdl.txt", "w");
for i = 1:length(yLP)
fprintf(fid, "%f\n", yLP(i));
fprintf(fid, "\n--- Coefficients du filtre Baseline ---\n");
for i = 1:length(fBaseLine)
fprintf(fid, "to_signed(%d, 12),\n", fBaseLine(i));
end
%fprintf(fid, "\n--- Coefficients du filtre Baseline ---\n");
%for i = 1:length(fBaseLine)
% fprintf(fid, "to_signed(%d, 11),\n", fBaseLine(i));
%end
%fprintf(fid, "\n--- Coefficients du filtre Notch 50Hz ---\n");
%for i = 1:length(f50Hz)
% fprintf(fid, "to_signed(%d, 11),\n", f50Hz(i));
%end
%fprintf(fid, "\n--- Coefficients du filtre Pei-Tseng A ---\n");
%for i = 1:length(a)
% fprintf(fid, "to_signed(%d, 11),\n", a(i));
%end
fprintf(fid, "\n--- Coefficients du filtre Pei-Tseng A ---\n");
for i = 1:length(a)
fprintf(fid, "to_signed(%d, 12),\n", a(i));
end
%fprintf(fid, "\n--- Coefficients du filtre Pei-Tseng B ---\n");
%for i = 1:length(b)
% fprintf(fid, "to_signed(%d, 11),\n", b(i));
%end
fprintf(fid, "\n--- Coefficients du filtre Pei-Tseng B ---\n");
for i = 1:length(b)
fprintf(fid, "to_signed(%d, 12),\n", b(i));
end
%fprintf(fid, "\n--- Coefficients du filtre Parks-McClellan ---\n");
%for i = 1:length(fLP)
% fprintf(fid, "to_signed(%d, 11),\n", fLP(i));
%end
fprintf(fid, "\n--- Coefficients du filtre Parks-McClellan ---\n");
for i = 1:length(fLP)
fprintf(fid, "to_signed(%d, 12),\n", fLP(i));
end
fclose(fid);
printf("\nThe coefficients were saved in 'ouutput.txt'.\n");
printf("\nThe coefficients were saved in 'coeficientes_vhdl.txt'.\n");
\ No newline at end of file
--- 1er Filtre ---
0.000000
0.000000
0.000000
......@@ -49,7 +50,53 @@
-24486.000000
-25107.000000
-26763.000000
----------------
-27235.000000
-28672.000000
-29249.000000
-30797.000000
-31295.000000
-32649.000000
-33143.000000
-33465.000000
-34981.000000
-35255.000000
-35672.000000
-35878.000000
-36196.000000
-36506.000000
1009986.000000
-36510.000000
227.000000
65667.000000
129260.000000
187725.000000
-24898.000000
95964.000000
226027.000000
155609.000000
-42624.000000
-44390.000000
-44026.000000
-45860.000000
-46468.000000
-46823.000000
-44298.000000
-41741.000000
-34058.000000
-35431.000000
-32899.000000
-30215.000000
-29766.000000
-31178.000000
-31720.000000
-28999.000000
-27477.000000
-27051.000000
-23356.000000
-21751.000000
-21176.000000
--- 2eme Filtre ---
0.000000
0.000000
0.000000
......@@ -101,7 +148,53 @@
-24137.255157
-24777.309502
-26451.984462
----------------
-26945.407453
-28413.650507
-29013.299221
-30562.876450
-31048.854104
-32396.674904
-32892.561201
-33287.651091
-34850.523827
-35134.899412
-35595.680482
-35863.484079
-36243.422721
-36587.083681
945504.429824
-134330.197257
-28628.288173
101243.111443
200587.752612
257361.297455
27909.642727
120932.736309
202198.667674
93999.765719
-98498.703102
-62759.394014
-22913.429312
2318.223906
8259.347698
-5958.507345
-30401.698534
-56807.002377
-69767.929793
-76855.118913
-64586.840592
-42372.723257
-20683.370049
-6714.778608
-2460.172874
-6188.641831
-18783.442712
-33987.353762
-41778.182259
-43984.508697
-38936.616240
--- 3eme Filtre ---
0.000000
0.000000
0.000000
......@@ -153,3 +246,48 @@
-24912240.319270
-26671912.997716
-28123611.818423
-29722983.682499
-31353008.136208
-32902754.809049
-34472904.986410
-35993833.420082
-37315223.769529
-38956645.652377
-40310388.190944
-41601726.977095
-42877312.450321
-44215259.181000
-45315046.097985
-46432718.247961
-47263601.975037
-165063443.613073
82635864.183488
84053126.781316
107675150.530836
143014781.783280
178383412.365290
239883069.049862
226339160.255684
222139075.017194
260039255.056026
75733340.776994
206132419.639837
174057111.478851
121765868.649610
64585776.846645
10622692.372057
21639753.788805
-9925315.537044
-46310786.614378
-49416044.621109
-28270924.616315
-42469458.655877
-60124038.423241
-73218879.682026
-77523797.032443
-71686328.428358
-57954422.972234
-41215339.851185
-28781460.064110
-21016584.151478
-21577312.032120
\ No newline at end of file
......@@ -370,11 +370,6 @@ BEGIN
END IF;
END PROCESS store_result;
O_total <= STD_LOGIC_VECTOR(SR_Y);
END ARCHITECTURE arch_operativeUnit;
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment