Compare commits

..

7 Commits

Author SHA1 Message Date
d06304bc05 Update manuscript 2025-07-14 21:37:48 +02:00
583176cb80 Small typo 2025-07-05 14:21:13 +02:00
5262c4a460 Better figure outputs 2025-07-04 22:05:14 +02:00
e55ca8b01a Removed unused lead 2025-07-04 22:04:59 +02:00
c004fabe7d Corrected data 2025-07-04 22:04:51 +02:00
45b910444f Typo 2025-07-04 22:04:28 +02:00
3602c8ab08 Change labels 2025-07-04 22:04:20 +02:00
7 changed files with 17 additions and 21 deletions

View File

@@ -507,11 +507,11 @@ tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
plot(f, abs(squeeze(freqresp(G_m1_vc(1,1), f, 'Hz'))), 'color', colors(1,:), ...
'DisplayName', '$f_{ni}/f_i$ - $\Omega_z = 0$')
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_i$ - $\Omega_z = 0$')
plot(f, abs(squeeze(freqresp(G_m1_vc_Rz_slow(1,1), f, 'Hz'))), 'color', colors(2,:), ...
'DisplayName', '$f_{ni}/f_i$ - $\Omega_z = 36$ deg/s')
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_i$ - $\Omega_z = 36$ deg/s')
plot(f, abs(squeeze(freqresp(G_m1_vc_Rz_fast(1,1), f, 'Hz'))), 'color', colors(3,:), ...
'DisplayName', '$f_{ni}/f_i$ - $\Omega_z = 360$ deg/s')
'DisplayName', '$\epsilon_{\mathcal{L}i}/f_i$ - $\Omega_z = 360$ deg/s')
for i = 1:5
for j = i+1:6
plot(f, abs(squeeze(freqresp(G_m1_vc(i,j), f, 'Hz'))), 'color', [colors(1,:), 0.2], ...
@@ -591,11 +591,11 @@ tiledlayout(3, 1, 'TileSpacing', 'compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
plot(f, abs(squeeze(freqresp(Khac(i,i)*G_hac_m1( i,i), f, 'Hz'))), ...
plot(f, abs(squeeze(freqresp(Khac(1,1)*G_hac_m1( 1,1), f, 'Hz'))), ...
'color', [colors(1,:), 0.5], 'DisplayName', '1kg');
plot(f, abs(squeeze(freqresp(Khac(i,i)*G_hac_m25(i,i), f, 'Hz'))), ...
plot(f, abs(squeeze(freqresp(Khac(1,1)*G_hac_m25(1,1), f, 'Hz'))), ...
'color', [colors(2,:), 0.5], 'DisplayName', '25kg');
plot(f, abs(squeeze(freqresp(Khac(i,i)*G_hac_m50(i,i), f, 'Hz'))), ...
plot(f, abs(squeeze(freqresp(Khac(1,1)*G_hac_m50(1,1), f, 'Hz'))), ...
'color', [colors(3,:), 0.5], 'DisplayName', '50kg');
for i = 2:6
plot(f, abs(squeeze(freqresp(Khac(i,i)*G_hac_m1( i,i), f, 'Hz'))), 'color', [colors(1,:), 0.5], 'HandleVisibility', 'off');

View File

@@ -131,7 +131,7 @@ plot(freqs, abs(squeeze(freqresp(G_CoK(3, 1), freqs, 'Hz'))), 'color', [0,0,0,0.
'DisplayName', '$R_{z,\{K\}}/F_{x,\{K\}}$');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Kagnitude');
xlabel('Frequency [Hz]'); ylabel('Magnitude');
ylim([1e-10, 1e-3]);
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
leg.ItemTokenSize(1) = 18;

View File

@@ -68,8 +68,8 @@ io(io_i) = linio([mdl, '/dac_noise'], 1, 'input'); io_i = io_i + 1; % DAC n
io(io_i) = linio([mdl, '/amp_noise'], 1, 'input'); io_i = io_i + 1; % Voltage Amplifier noise [V]
io(io_i) = linio([mdl, '/NASS/adc_noise'], 1, 'input'); io_i = io_i + 1; % ADC noise [V]
io(io_i) = linio([mdl, '/NASS/enc_noise'], 1, 'input'); io_i = io_i + 1; % Encoder noise [m]
io(io_i) = linio([mdl, '/NASS'], 2, 'output', [], 'z'); io_i = io_i + 1; % Vertical error [m]
io(io_i) = linio([mdl, '/NASS'], 2, 'output', [], 'y'); io_i = io_i + 1; % Lateral error [m]
io(io_i) = linio([mdl, '/NASS'], 2, 'output', [], 'z'); io_i = io_i + 1; % Vertical error [m]
Gd = linearize(mdl, io);
Gd.InputName = {...
@@ -114,9 +114,9 @@ rms_unit_asd_amp = sqrt(sum((unit_asd.*abs(squeeze(freqresp(Gd('z', 'namp1'), fr
rms_unit_asd_adc = sqrt(sum((unit_asd.*abs(squeeze(freqresp(Gd('z', 'nad1' ), freqs, 'Hz'))).').^2));
% Obtained maximum ASD for different instruments
max_dac_asd = max_asd_z./rms_unit_asd_dac; % [V/sqrt(Hz)]
max_amp_asd = max_asd_z./rms_unit_asd_amp; % [V/sqrt(Hz)]
max_adc_asd = max_asd_z./rms_unit_asd_adc; % [V/sqrt(Hz)]
max_dac_asd = max_asd_z./rms_unit_asd_dac % [V/sqrt(Hz)]
max_amp_asd = max_asd_z./rms_unit_asd_amp % [V/sqrt(Hz)]
max_adc_asd = max_asd_z./rms_unit_asd_adc % [V/sqrt(Hz)]
% Estimation of the equivalent RMS noise
max_dac_rms = 1e3*max_dac_asd*sqrt(5e3) % [mV RMS]

View File

@@ -283,8 +283,8 @@ tiledlayout(3, 1, 'TileSpacing', 'compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
plot(f, abs(G_dac_adc), 'color', colors(2,:), 'DisplayName', 'Measurement');
plot(f, abs(squeeze(freqresp(G_delay, f, 'Hz'))), 'k--', 'DisplayName', 'Pure Delay');
plot(f, abs(G_dac_adc), 'color', [colors(1,:), 0.5], 'linewidth', 2.5, 'DisplayName', 'Measurement');
plot(f, abs(squeeze(freqresp(G_delay, f, 'Hz'))), '--', 'color', colors(1,:), 'DisplayName', 'Pure Delay');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [V/V]'); set(gca, 'XTickLabel',[]);
@@ -294,8 +294,8 @@ leg.ItemTokenSize(1) = 15;
ax2 = nexttile();
hold on;
plot(f, 180/pi*unwrap(angle(G_dac_adc)), 'color', colors(2,:));
plot(f, 180/pi*unwrap(angle(squeeze(freqresp(G_delay, f, 'Hz')))), 'k--', 'DisplayName', 'Pure Delay');
plot(f, 180/pi*unwrap(angle(G_dac_adc)), 'color', [colors(1,:), 0.5], 'linewidth', 2.5);
plot(f, 180/pi*unwrap(angle(squeeze(freqresp(G_delay, f, 'Hz')))), '--', 'color', colors(1,:));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
@@ -353,7 +353,7 @@ set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD [$V/\sqrt{Hz}$]');
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
leg.ItemTokenSize(1) = 15;
ylim([1e-10, 4e-4]); xlim([1, 5e3]);
ylim([1e-10, 1e-3]); xlim([1, 5e3]);
xticks([1e0, 1e1, 1e2, 1e3])
%% Load all the measurements

View File

@@ -204,10 +204,6 @@ wc = 2*pi*5; % [rad/s]
% Integrator
H_int = wc/s;
% Lead to increase phase margin
a = 2; % Amount of phase lead / width of the phase lead / high frequency gain
H_lead = 1/sqrt(a)*(1 + s/(wc/sqrt(a)))/(1 + s/(wc*sqrt(a)));
% Low Pass filter to increase robustness
H_lpf = 1/(1 + s/2/pi/30);

View File

@@ -307,7 +307,7 @@ win = hanning(Nfft);
Noverlap = floor(Nfft/2);
%% Open-Loop measurement
data_ol_Wz180 = load('2023-08-11_16-51_m0_lac_off.mat'); % no rotation
data_ol_Wz180 = load('2023-08-11_17-39_m0_lac_off_30rpm.mat');
a = J_int_to_X*[data_ol_Wz180.d1; data_ol_Wz180.d2; data_ol_Wz180.d3; data_ol_Wz180.d4; data_ol_Wz180.d5];
data_ol_Wz180.Dx_int = a(1,:);