File data_analysis/unittests/entanglement_evaluation_test.m changed (mode: 100644) (index 0c909ea..ced7d29) |
... |
... |
function entanglement_evaluation_properties_test(shared) |
70 |
70 |
ev = entanglement_evaluation_setup_test(shared); |
ev = entanglement_evaluation_setup_test(shared); |
71 |
71 |
assertEqual(ev.samplingrate, shared.samplingrate); |
assertEqual(ev.samplingrate, shared.samplingrate); |
72 |
72 |
|
|
73 |
|
function entanglement_evaluation_corrfct_test(shared) |
|
|
73 |
|
function entanglement_evaluation_modefunctions_test(shared) |
74 |
74 |
ev = entanglement_evaluation_setup_test(shared); |
ev = entanglement_evaluation_setup_test(shared); |
|
75 |
|
ev.mech_frequencies = [1, 2, 3]; |
|
76 |
|
ev.opt_pulse_widths = ones(size(ev.mech_frequencies)); |
|
77 |
|
ev.pulse_gammas = logspace(-1,1,2); |
|
78 |
|
ev.calculateModeVectors; |
75 |
79 |
|
|
76 |
|
max_lags = 10; |
|
77 |
|
ev.blocked_cross_correlation(max_lags); |
|
78 |
|
xx = ev.correlation_functions{1}{1,1}; |
|
79 |
|
pp = ev.correlation_functions{1}{2,2}; |
|
80 |
|
xp = ev.correlation_functions{1}{1,2}; |
|
81 |
|
px = ev.correlation_functions{1}{2,1}; |
|
82 |
|
assertAlmostEqual(xx, flipud(xx)); |
|
83 |
|
assertAlmostEqual(pp, flipud(pp)); |
|
84 |
|
assertAlmostEqual(xp, flipud(px)); |
|
|
80 |
|
%figure; plot(real(ev.readout_modes')) |
|
81 |
|
% check orthonormality |
|
82 |
|
on_matrix_entangling = ev.entangling_modes*(ev.entangling_modes)'; |
|
83 |
|
on_matrix_readout = ev.readout_modes*(ev.readout_modes)'; |
|
84 |
|
for k=1:ev.pulse_gammas_no |
|
85 |
|
start_mode = (k-1)*ev.mech_frequencies_no + 1; |
|
86 |
|
stop_mode = k*ev.mech_frequencies_no; |
|
87 |
|
assertAlmostEqual(... |
|
88 |
|
on_matrix_entangling(start_mode:stop_mode,start_mode:stop_mode),... |
|
89 |
|
eye(ev.mech_frequencies_no), 1e-12) |
|
90 |
|
assertAlmostEqual(... |
|
91 |
|
on_matrix_readout(start_mode:stop_mode,start_mode:stop_mode),... |
|
92 |
|
eye(ev.mech_frequencies_no), 1e-12) |
|
93 |
|
end |
|
94 |
|
|
|
95 |
|
% check correct sidebands are addressed |
|
96 |
|
tol = 1e-12; |
|
97 |
|
mean_rotation_freq = @(vector)mean(diff(phase(vector))*shared.samplingrate)/(2*pi); |
|
98 |
|
for f=1:ev.mech_frequencies_no |
|
99 |
|
% entangling_modes should pick out down-scattered light --> should be prop. to exp(+i om t) |
|
100 |
|
assertAlmostEqual(... |
|
101 |
|
mean_rotation_freq(ev.entangling_modes(f,:)),... |
|
102 |
|
-ev.mech_frequencies(f), tol) |
|
103 |
|
% readout modes should pick out up-scattered light --> should be prop. to exp(-i om t) |
|
104 |
|
assertAlmostEqual(... |
|
105 |
|
mean_rotation_freq(ev.readout_modes(f,:)),... |
|
106 |
|
+ev.mech_frequencies(f), tol) |
|
107 |
|
% for some reasons it's exactly the other way round... |
|
108 |
|
end |
|
109 |
|
%figure; plot(phase(ev.readout_modes(1,1:100))) |
85 |
110 |
|
|
86 |
|
xx_ = xcorr(shared.x.data, shared.x.data, max_lags); |
|
87 |
|
xp_ = xcorr(shared.x.data, shared.p.data, max_lags); |
|
88 |
|
assertAlmostEqual(xx, xx_); |
|
89 |
|
|
|
90 |
|
rel_tol = 1e-12; |
|
91 |
|
assertAlmostEqual(xp, xp_, rel_tol); |
|
92 |
|
|
|
93 |
111 |
function entanglement_evaluation_run_test(shared) |
function entanglement_evaluation_run_test(shared) |
94 |
112 |
ev = entanglement_evaluation_setup_test(shared); |
ev = entanglement_evaluation_setup_test(shared); |
95 |
113 |
ev.evaluation_folder = shared.evaluation_folder; |
ev.evaluation_folder = shared.evaluation_folder; |
|
... |
... |
function entanglement_evaluation_run_test(shared) |
100 |
118 |
ev.calculateModeVectors; |
ev.calculateModeVectors; |
101 |
119 |
ev.calculatePulsedQuadratures(1); |
ev.calculatePulsedQuadratures(1); |
102 |
120 |
ev.exportResults; |
ev.exportResults; |
103 |
|
|
|
104 |
121 |
%type(fullfile(ev.evaluation_folder, 'evaluation_parameters.txt')) |
%type(fullfile(ev.evaluation_folder, 'evaluation_parameters.txt')) |
105 |
122 |
|
|
106 |
123 |
function entanglement_evaluation_exportdata_test(shared) |
function entanglement_evaluation_exportdata_test(shared) |
|
... |
... |
function entanglement_evaluation_exportdata_test(shared) |
134 |
151 |
assertEqual(dlmread(fullfile(ev.evaluation_folder, '01_02.tsv')), modes_after) |
assertEqual(dlmread(fullfile(ev.evaluation_folder, '01_02.tsv')), modes_after) |
135 |
152 |
|
|
136 |
153 |
modes_after = repmat([31, 310, 32, 320, 3100, 31000, 3200, 32000], pulse_pairs_no, 1); |
modes_after = repmat([31, 310, 32, 320, 3100, 31000, 3200, 32000], pulse_pairs_no, 1); |
137 |
|
assertEqual(dlmread(fullfile(ev.evaluation_folder, '01_03.tsv')), modes_after) |
|
|
154 |
|
assertEqual(dlmread(fullfile(ev.evaluation_folder, '01_03.tsv')), modes_after) |
|
155 |
|
|
|
156 |
|
function entanglement_evaluation_corrfct_test(shared) |
|
157 |
|
ev = entanglement_evaluation_setup_test(shared); |
|
158 |
|
|
|
159 |
|
max_lags = 10; |
|
160 |
|
ev.blocked_cross_correlation(max_lags); |
|
161 |
|
xx = ev.correlation_functions{1}{1,1}; |
|
162 |
|
pp = ev.correlation_functions{1}{2,2}; |
|
163 |
|
xp = ev.correlation_functions{1}{1,2}; |
|
164 |
|
px = ev.correlation_functions{1}{2,1}; |
|
165 |
|
assertAlmostEqual(xx, flipud(xx)); |
|
166 |
|
assertAlmostEqual(pp, flipud(pp)); |
|
167 |
|
assertAlmostEqual(xp, flipud(px)); |
|
168 |
|
|
|
169 |
|
xx_ = xcorr(shared.x.data, shared.x.data, max_lags); |
|
170 |
|
xp_ = xcorr(shared.x.data, shared.p.data, max_lags); |
|
171 |
|
assertAlmostEqual(xx, xx_); |
|
172 |
|
|
|
173 |
|
rel_tol = 1e-12; |
|
174 |
|
assertAlmostEqual(xp, xp_, rel_tol); |