17 KiB
Attocube - Test Bench
- Estimation of the Spectral Density of the Attocube Noise
- Effect of the "bubble sheet" and "Aluminium tube"
- Measurement of the Attocube's non-linearity
Estimation of the Spectral Density of the Attocube Noise
Introduction ignore
Long and Slow measurement
The first measurement was made during ~17 hours with a sampling time of $T_s = 0.1\,s$.
load('./mat/long_test_plastic.mat', 'x', 't')
Ts = 0.1; % [s]
Let's fit the data with a step response to a first order low pass filter (Figure fig:long_meas_time_domain_fit).
f = @(b,x) b(1)*(1 - exp(-x/b(2)));
y_cur = x(t < 17.5*60*60);
t_cur = t(t < 17.5*60*60);
nrmrsd = @(b) norm(y_cur - f(b,t_cur)); % Residual Norm Cost Function
B0 = [400e-9, 2*60*60]; % Choose Appropriate Initial Estimates
[B,rnrm] = fminsearch(nrmrsd, B0); % Estimate Parameters ‘B’
The corresponding time constant is (in [h]):
2.0658
We can see in Figure fig:long_meas_time_domain_full that there is a transient period where the measured displacement experiences some drifts.
This is probably due to thermal effects.
We only select the data between t1
and t2
.
The obtained displacement is shown in Figure fig:long_meas_time_domain_zoom.
t1 = 10.5; t2 = 17.5; % [h]
x = x(t > t1*60*60 & t < t2*60*60);
x = x - mean(x);
t = t(t > t1*60*60 & t < t2*60*60);
t = t - t(1);
The Power Spectral Density of the measured displacement is computed
win = hann(ceil(length(x)/20));
[p_1, f_1] = pwelch(x, win, [], [], 1/Ts);
As a low pass filter was used in the measurement process, we multiply the PSD by the square of the inverse of the filter's norm.
G_lpf = 1/(1 + s/2/pi);
p_1 = p_1./abs(squeeze(freqresp(G_lpf, f_1, 'Hz'))).^2;
Only frequencies below 2Hz are taken into account (high frequency noise will be measured afterwards).
p_1 = p_1(f_1 < 2);
f_1 = f_1(f_1 < 2);
Short and Fast measurement
An second measurement is done in order to estimate the high frequency noise of the interferometer. The measurement is done with a sampling time of $T_s = 0.1\,ms$ and a duration of ~100s.
load('./mat/short_test_plastic.mat')
Ts = 1e-4; % [s]
x = detrend(x, 0);
The time domain measurement is shown in Figure fig:short_meas_time_domain.
The Power Spectral Density of the measured displacement is computed
win = hann(ceil(length(x)/20));
[p_2, f_2] = pwelch(x, win, [], [], 1/Ts);
Obtained Amplitude Spectral Density of the measured displacement
The computed ASD of the two measurements are combined in Figure fig:psd_combined.
Effect of the "bubble sheet" and "Aluminium tube"
Introduction ignore
Aluminium Tube and Bubble Sheet
load('./mat/short_test_plastic.mat');
Ts = 1e-4; % [s]
x = detrend(x, 0);
win = hann(ceil(length(x)/10));
[p_1, f_1] = pwelch(x, win, [], [], 1/Ts);
Only Aluminium Tube
load('./mat/short_test_alu_tube.mat');
Ts = 1e-4; % [s]
x = detrend(x, 0);
The time domain measurement is shown in Figure fig:short_meas_time_domain.
win = hann(ceil(length(x)/10));
[p_2, f_2] = pwelch(x, win, [], [], 1/Ts);
Nothing
load('./mat/short_test_without_material.mat');
Ts = 1e-4; % [s]
x = detrend(x, 0);
The time domain measurement is shown in Figure fig:short_meas_time_domain.
win = hann(ceil(length(x)/10));
[p_3, f_3] = pwelch(x, win, [], [], 1/Ts);
Comparison
Measurement of the Attocube's non-linearity
Introduction ignore
The measurement setup is shown in Figure fig:exp_setup_schematic.
Here are the equipment used in the test bench:
A DAC and voltage amplified are used to move the mass with the Amplified Piezoelectric Actuator (APA95ML). The encoder and the attocube are measure ring the same motion.
As will be shown shortly, this measurement permitted to measure the period non-linearity of the Attocube.
Load Data
The measurement data are loaded and the offset are removed using the detrend
command.
load('mat/int_enc_comp.mat', 'interferometer', 'encoder', 'u', 't');
Ts = 1e-4; % Sampling Time [s]
interferometer = detrend(interferometer, 0);
encoder = detrend(encoder, 0);
u = detrend(u, 0);
Time Domain Results
One period of the displacement of the mass as measured by the encoder and interferometer are shown in Figure fig:int_enc_one_cycle. It consist of the sinusoidal motion at 0.5Hz with an amplitude of approximately $70\mu m$.
The frequency of the motion is chosen such that no resonance in the system is excited. This should improve the coherence between the measurements made by the encoder and interferometer.
The difference between the two measurements during the same period is shown in Figure fig:int_enc_one_cycle_error.
Difference between Encoder and Interferometer as a function of time
The data is filtered using a second order low pass filter with a cut-off frequency $\omega_0$ as defined below.
w0 = 2*pi*5; % [rad/s]
xi = 0.7;
G_lpf = 1/(1 + 2*xi/w0*s + s^2/w0^2);
After filtering, the data is "re-shaped" such that we can superimpose all the measured periods as shown in Figure fig:int_enc_error_mean_time. This gives an idea of the measurement error as given by the Attocube during a $70 \mu m$ motion.
d_err_mean = reshape(lsim(G_lpf, encoder - interferometer, t), [2/Ts floor(Ts/2*length(encoder))]);
d_err_mean = d_err_mean - mean(d_err_mean);
Difference between Encoder and Interferometer as a function of position
Figure fig:int_enc_error_mean_time gives the measurement error as a function of time. We here wish the compute this measurement error as a function of the position (as measured by the encoer).
To do so, all the attocube measurements corresponding to each position measured by the Encoder (resolution of $1nm$) are averaged. Figure fig:int_enc_error_mean_position is obtained where we clearly see an error with a period comparable to the motion range and a much smaller period corresponding to the non-linear period errors that we wish the estimate.
[e_sorted, ~, e_ind] = unique(encoder);
i_mean = zeros(length(e_sorted), 1);
for i = 1:length(e_sorted)
i_mean(i) = mean(interferometer(e_ind == i));
end
i_mean_error = (i_mean - e_sorted);
The period of the non-linearity seems to be equal to $765 nm$ which corresponds to half the wavelength of the Laser ($1.53 \mu m$). For the motion range done here, the non-linearity is measured over ~18 periods which permits to do some averaging.
win_length = 1530/2; % length of the windows (corresponds to 765 nm)
num_avg = floor(length(e_sorted)/win_length); % number of averaging
i_init = ceil((length(e_sorted) - win_length*num_avg)/2); % does not start at the extremity
e_sorted_mean_over_period = mean(reshape(i_mean_error(i_init:i_init+win_length*num_avg-1), [win_length num_avg]), 2);
The obtained periodic non-linearity is shown in Figure fig:int_non_linearity_period_wavelength.