1 clc; clear all; close all; 2 3 %% Figure light theme 4 5 set(0, "defaultAxesColorOrder", [ 6 1.0000 0.0000 0.0000; # red 7 0.0000 0.0000 1.0000; # blue 8 1.0000 0.4980 0.0549; # orange 9 0.0000 0.7490 1.0000; # cyan 10 0.1725 0.6275 0.1725; # green 11 0.5451 0.7020 0.0000; # olive 12 0.0471 0.4000 0.1373; # deep green 13 0.4000 0.7608 0.5020; # mint 14 0.6350 0.0780 0.1840; # dark red 15 0.0000 0.5882 0.5333; # teal 16 0.8510 0.6471 0.1255; # gold 17 0.5490 0.3373 0.2941; # brown 18 0.8902 0.4667 0.7608; # pink 19 0.5804 0.4039 0.7412; # purple 20 0.4980 0.4980 0.4980; # gray 21 ]); 22 23 set(0, "DefaultFigureColor", [1 1 1]); 24 set(0, "DefaultAxesColor", [1 1 1]); 25 set(0, "DefaultAxesXColor", [0 0 0]); 26 set(0, "DefaultAxesYColor", [0 0 0]); 27 set(0, "DefaultTextColor", [0 0 0]); 28 29 set(0, "DefaultAxesGridColor", [0 0 0]); 30 set(0, 'DefaultAxesGridAlpha', 1.00); 31 32 set(0, "DefaultAxesMinorGridColor", [0 0 0]); 33 set(0, 'DefaultAxesMinorGridAlpha', 0.20); 34 35 set(0, "DefaultLineLinewidth", 3.00); 36 set(0, "DefaultAxesFontSize", 16); 37 set(0, "DefaultTextFontSize", 16); 38 set(0, "DefaultAxesLineWidth", 1.00); 39 40 set(0, "DefaultAxesXGrid", "on"); 41 set(0, "DefaultAxesYGrid", "on"); 42 set(0, "DefaultAxesZGrid", "on"); 43 set(0, "DefaultAxesXMinorGrid", "on"); 44 set(0, "DefaultAxesYMinorGrid", "on"); 45 set(0, "DefaultAxesXMinorTick", "on"); 46 set(0, "DefaultAxesYMinorTick", "on"); 47 48 set(0, 'DefaultAxesGridAlpha', 0.50); 49 set(0, "defaultAxesFontName", "Nimbus Sans"); 50 51 function dt = get_time_interval(filename) 52 fid = fopen(filename, "r"); 53 54 % Read line 9 55 for i = 1:9 56 line = fgetl(fid); 57 endfor 58 59 fclose(fid); 60 61 % Extract the value after the comma 62 value = strtrim(strsplit(line, ","){2}); 63 64 % Convert the value to seconds 65 dt = sscanf(value, "%f"); 66 67 if strfind(value, "uS") 68 dt *= 1e-6; 69 elseif strfind(value, "mS") 70 dt *= 1e-3; 71 elseif strfind(value, "nS") 72 dt *= 1e-9; 73 elseif strfind(value, "S") 74 % already in seconds 75 endif 76 endfunction 77 78 args = argv(); 79 80 if isempty(args) 81 error("Usage: %s <filename>", program_name()); 82 endif 83 84 filename = args{1}; 85 basename = tolower(strrep(filename, ".CSV", "")); 86 png_savename = [basename, ".png"] 87 fft_savename = [basename, "_fft.png"] 88 89 data = dlmread(filename, ",", 10, 0); 90 91 figure("visible", "off"); 92 grid on; 93 94 set(gcf, "paperunits", "inches"); 95 set(gcf, "papersize", [10 4]); 96 set(gcf, "paperposition", [0 0 10 4]); 97 98 index = data(:, 1); 99 voltage = data(:, 2); 100 101 dt = get_time_interval(filename) 102 % dt = 0.80e-6; 103 104 n = length(voltage) 105 trigger_offset = 50; 106 time = ((0:n-1) - (n/2 - trigger_offset)) * dt; 107 108 t_max = ((n-1)/2*dt)*1e6 109 v_max = max(voltage) 110 111 plot(time*1e3, voltage); 112 113 xlim([-(t_max-trigger_offset)/1.05/1e3 (t_max-trigger_offset)/1.05/1e3]) 114 ylim([-v_max*1.10 v_max*1.10]) 115 116 xlabel("TIEMPO [ms]"); 117 ylabel("VOLTAJE [V]"); 118 grid on; 119 120 print(png_savename, "-dpng", "-r600"); 121 close 122 123 % FFT 124 figure("visible", "off"); 125 grid on; 126 127 set(gcf, "paperunits", "inches"); 128 set(gcf, "papersize", [10 4]); 129 set(gcf, "paperposition", [0 0 10 4]); 130 131 Y = fft(voltage); 132 133 % Two-sided magnitude spectrum 134 P2 = abs(Y / n); 135 136 % Single-sided spectrum 137 P1 = P2(1:floor(n/2)+1); 138 P1(2:end-1) = 2 * P1(2:end-1); 139 140 % Frequency axis 141 f = (0:floor(n/2)) / (n * dt); 142 143 % Plot 144 plot(f / 1000, P1, "linewidth", 1.5); 145 146 xlabel("FRECUENCIA [kHz]"); 147 ylabel("MAGNITUDE [V]"); 148 grid on; 149 150 xlim([0 200]) 151 152 print(fft_savename, "-dpng", "-r600");
