├── .DS_Store ├── 1 AOA Search ├── Angle-of-Arrival-Based Gesture Recognition Using Ultrasonic Multi-Frequency Signals.pdf ├── alg_aoa_search.m ├── main_search_aoa_1d.m └── wrapping.m ├── 2 AOA Random Ferns ├── alg_aoa_fern.m ├── main_random_ferns_1d.m └── wrapping.m ├── 3 PDP for Sensor Pairs ├── Main_test_1027.m ├── P1_Initialization_phone.m ├── Sub_Locating_Active_Area.m ├── alg_aoa_search.m ├── alg_disambiguity_freq.m ├── alg_projection_constrained.m ├── data01.mat ├── data02.mat ├── data03.mat ├── data04.mat ├── data05.mat ├── data06.mat ├── data07.mat ├── data08.mat ├── data09.mat ├── data10.mat ├── data11.mat ├── data12.mat ├── data13.mat ├── data14.mat ├── data15.mat ├── get_projections.m ├── project_nd.m └── wrapping.m ├── 4 PDP for NULA ├── .DS_Store ├── Fig_2_Main_PDP_1freq_2d.m ├── Fig_4_affectof_d_delta.m ├── Fig_8_3_2q_esprit.m ├── Fig_8_4_nr_esprit.m ├── Fig_8_5_plots_ESPRIT.m ├── SNR_CRLB.m ├── alg_2qorder.m ├── alg_disambiguity_spatial.m ├── alg_em_esprit.m ├── alg_get_projections.m ├── alg_indicator_estimation.m ├── alg_mle.m ├── alg_mle_coarse.m ├── alg_mle_fine.m ├── alg_music_complex.m ├── alg_offset_correction.m ├── alg_projection.m ├── alg_projection_constrain.m ├── alg_projection_constrain_mirror.m ├── chen_WCL2021-0665_fig1.eps ├── chen_WCL2021-0665_fig2-1.eps ├── chen_WCL2021-0665_fig2-2.eps ├── chen_WCL2021-0665_fig3-1.eps ├── chen_WCL2021-0665_fig3-2.eps ├── chen_WCL2021-0665_fig3-3.eps ├── chen_WCL2021-0665_fig3-4.eps ├── chen_WCL2021-0665_fig3-5.eps ├── chen_WCL2021-0665_fig3-6.eps ├── esprit_data_1_3.mat ├── esprit_data_1_5.mat ├── esprit_data_1_8.mat ├── esprit_data_2_3.mat ├── esprit_data_2_5.mat ├── esprit_data_2_8.mat ├── fig_8_3_data_3.mat ├── fig_8_3_data_5.mat ├── fig_8_3_data_8.mat ├── fig_8_4_data_3_res2.mat ├── fig_8_4_data_5_res2.mat ├── fig_8_4_data_8_res2.mat ├── project_nd.m ├── sim1-3sensors.png ├── sim1-5sensors.png ├── sim1-8sensors.png ├── sim2-3sensors.png ├── sim2-5sensors.png ├── sim2-8sensors.png ├── vectarrow.m └── wrapping.m └── README.md /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/.DS_Store -------------------------------------------------------------------------------- /1 AOA Search/Angle-of-Arrival-Based Gesture Recognition Using Ultrasonic Multi-Frequency Signals.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/1 AOA Search/Angle-of-Arrival-Based Gesture Recognition Using Ultrasonic Multi-Frequency Signals.pdf -------------------------------------------------------------------------------- /1 AOA Search/alg_aoa_search.m: -------------------------------------------------------------------------------- 1 | % Search based aoa algorithm 2 | % Author: hui.chen@kaust.edu.sa 3 | % Revised on 28-Mar-2017 4 | % Cleaned redundant part on 2018-09-19 5 | 6 | function output = alg_aoa_search(phi,phase_all) 7 | % raw search 8 | ang_range = -89:90; % search area from -89 to 90. 9 | error = zeros(1,length(ang_range)); 10 | for i = 1:length(ang_range) 11 | error_temp = wrapping(phi-phase_all(i,:)); 12 | error(i) = sum(abs(error_temp)); 13 | end 14 | % figure;plot(error,'-^') 15 | [~, a2] = min(error); 16 | output = ang_range(a2); 17 | 18 | % fine search 19 | if(a2~=1 && a2 ~= length(ang_range)) 20 | xc = [a2-1 error(a2-1);a2 error(a2);a2+1 error(a2+1)]; 21 | xc2 = 0.5*(xc(3,2)-xc(1,2))/(2*xc(2,2)-xc(3,2)-xc(1,2)); 22 | output = output + xc2; 23 | end 24 | 25 | end 26 | -------------------------------------------------------------------------------- /1 AOA Search/main_search_aoa_1d.m: -------------------------------------------------------------------------------- 1 | % Alg-1: Search based phase unwrapping algorithm 2 | % Author: hui.chen@kaust.edu.sa 3 | % Last revised on 2018-09-19 4 | close all; 5 | clear all; 6 | clc; 7 | %% 1d phase difference calculation. 8 | s1 = [0.8839 0]; % sensor 1 location in a 2-d plane, in [cm] 9 | s2 = [-0.8839 0]; 10 | d = norm(s1-s2); % distance between the two sensors 11 | distance = 1000; % assuming a far field model 12 | v_speed = 343; % speed of the sound 13 | fs = 192000; % sampling frequency 14 | nfft = 1024; 15 | F = 0:fs/nfft:(fs-fs/nfft); % frequency axis after fft 16 | freq = F([102 108 113 118]); % carrier signal frequency 17 | interval = 1; 18 | ang_range = -89:interval:90; % search from -89 to 90 with interval 19 | phi = zeros(1,length(freq)); 20 | phase_all = []; % phase difference of all the angles in ang_range 21 | for i = 1:length(ang_range) 22 | angle0 = ang_range(i); 23 | td = -sin(angle0/180*pi)*d; % time difference of arrival 24 | phi = 2*pi*td/100./(v_speed./freq); 25 | phi = wrapping(phi); 26 | phase_all = [phase_all; phi]; 27 | end 28 | size(phase_all) % size = searching angles by freqs 29 | %% search algorithm: estimate aoa from observed phase difference 30 | angle_real = 55.3; 31 | td = -sin(angle_real/180*pi)*d; 32 | phi_obs = 2*pi*td/100./(v_speed./freq); 33 | noise = 0.1; % standard deviation of the noise 34 | phi_obs = phi_obs + randn(size(phi_obs))*noise; 35 | 36 | angle_est = alg_aoa_search(phi_obs, phase_all); 37 | disp(['The estimated angle is ', num2str(angle_est,'%2.2f'), '[deg] | error = ', ... 38 | num2str(abs(angle_real-angle_est),'%2.2f'), '[deg]']); 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /1 AOA Search/wrapping.m: -------------------------------------------------------------------------------- 1 | function output = wrapping(input) 2 | output = mod(input+pi,2*pi)-pi; 3 | end -------------------------------------------------------------------------------- /2 AOA Random Ferns/alg_aoa_fern.m: -------------------------------------------------------------------------------- 1 | % Random ferns aoa algorithm 2 | % Author: hui.chen@kaust.edu.sa 3 | % Revised on 28-Mar-2017 4 | % Cleaned redundant part on 2018-09-19 5 | 6 | function output = alg_aoa_fern(phase_test,r1,r2,fern_mat,phase_all) 7 | area = 90; 8 | fern_ind = unique([r1 r2]); 9 | error = zeros(1,180) + 500; 10 | 11 | for row = 1:length(fern_ind) 12 | error_temp = wrapping(phase_all(fern_ind(row),:)-phase_test); 13 | error(fern_ind(row)) = sum(abs(error_temp)); 14 | end 15 | value = sign(error(r1)-error(r2)+0.001); 16 | v2 = [zeros(1,90-area) value*fern_mat(90-area+1:90+area,:)']; 17 | candidate = find(v2>=length(fern_mat(1,:))); 18 | if(isempty(candidate)) 19 | candidate = find(v2>=length(fern_mat(1,:))-2); 20 | if(isempty(candidate)) 21 | candidate = 90; 22 | end 23 | end 24 | 25 | for row = 1:length(candidate) 26 | current = candidate(row); 27 | error_temp = wrapping(phase_all(current,:) - phase_test); 28 | error(candidate(row)) = sum(abs(error_temp')); 29 | end 30 | 31 | [~, a2] = min(error); 32 | if(a2~=1 && a2 ~= length(phase_all)) 33 | error_temp = wrapping(phase_all(a2-1:a2+1,:) - repmat(phase_test,3,1)); 34 | error(a2-1:a2+1) = sum(abs(error_temp')); 35 | xc = [a2-1 error(a2-1);a2 error(a2);a2+1 error(a2+1)]; 36 | xc2 = 0.5*(xc(3,2)-xc(1,2))/(2*xc(2,2)-xc(3,2)-xc(1,2)); 37 | output = (a2)-90 + xc2; 38 | end 39 | end 40 | -------------------------------------------------------------------------------- /2 AOA Random Ferns/main_random_ferns_1d.m: -------------------------------------------------------------------------------- 1 | % Alg-2: Accelerated AOA algorithm using random ferns 2 | % Author: hui.chen@kaust.edu.sa 3 | % Last revised on 2018-09-19 4 | close all; 5 | clear all; 6 | clc; 7 | %% 1d phase difference calculation. 8 | s1 = [0.8839 0]; % sensor 1 location in a 2-d plane 9 | s2 = [-0.8839 0]; 10 | d = norm(s1-s2); % distance between the two sensors 11 | distance = 1000; % assuming a far field model 12 | v_speed = 343; % speed of the sound 13 | fs = 192000; % sampling frequency 14 | nfft = 1024; 15 | F = 0:fs/nfft:(fs-fs/nfft); % frequency axis after fft 16 | freq = F([102 108 113 118]); % carrier signal frequency 17 | interval = 1; 18 | ang_range = -89:interval:90; % search from -89 to 90 with interval 19 | phi = zeros(1,length(freq)); 20 | phase_all = []; % phase difference of all the angles in ang_range 21 | for i = 1:length(ang_range) 22 | angle0 = ang_range(i); 23 | td = -sin(angle0/180*pi)*d; % time difference of arrival 24 | phi = 2*pi*td/100./(v_speed./freq); 25 | phi = wrapping(phi); 26 | phase_all = [phase_all; phi]; 27 | end 28 | size(phase_all) % size = searching angles by freqs 29 | %% create error_table 30 | error_table = []; 31 | error = zeros(size(ang_range)); 32 | for num = 1:length(ang_range) 33 | phase = phase_all(num,:); 34 | for x = 1:length(ang_range) 35 | diff_phase = phase_all(x,:); 36 | m = length(diff_phase); 37 | error_temp = wrapping(diff_phase - phase); 38 | error(x) = sum(abs(error_temp)); 39 | end 40 | error_table = [error_table; error]; 41 | end 42 | figure;plot(ang_range,error_table(35+90,:)); % the error table at 35 [deg] 43 | title('Search-based AOA Estimation [\theta = 35]') 44 | xlabel('Searching Angle');ylabel('Error'); 45 | %% fern matrix creation 46 | fern_num = 5; 47 | fern_point = [47 -29 7 -69 -4] + 90; 48 | rn = combnk(fern_point,2); % create all possible combinations 49 | r1 = rn(:,1); 50 | r2 = rn(:,2); 51 | bin = zeros(1,2^10); 52 | fern_mat = []; 53 | result = zeros(1,length(ang_range)); 54 | for i = 1:length(ang_range) 55 | value = sign(error_table(i + (180-searching_area)/2,r1)-error_table(i + (180-searching_area)/2,r2)+0.001); 56 | result(i) = (value+1)/2*fliplr(2.^(0:9))'; 57 | bin(1+result(i)) = bin(1+result(i)) + 1; 58 | fern_mat = [fern_mat ;value]; 59 | end 60 | % size(fern_mat) 61 | figure;plot(bin); 62 | xlabel('Cluster Index in Dec');ylabel('Num of Cluster Elements'); 63 | 64 | max(bin) 65 | sum(bin)/length(nonzeros(bin)) 66 | 67 | figure;plot(ang_range,error_table(71,:)) 68 | hold on;plot(fern_point-90,error_table(71,fern_point),'r*') 69 | % value = sign(error_table(91,r1)-error_table(91,r2)+0.001); 70 | title('Search-based AOA Estimation') 71 | xlabel('Horizontal Angle Theta');ylabel('Error'); 72 | 73 | % save fern_raw.mat r1 r2 fern_mat raw_phase 74 | % save fern_vec.mat r1 r2 fern_mat vec_phase 75 | 76 | %% error table test 77 | test_num = -33 + 90; 78 | result0 = error_table(test_num,r1)-error_table(test_num,r2); 79 | value0 = sign(result0) 80 | 81 | for i = 1:180 82 | value = sign(error_table(i,r1)-error_table(i,r2)); 83 | result(i) = value0*value'; 84 | end 85 | figure;plot(ang_range,(result)); 86 | title('Pattern Recognition for Angles'); 87 | xlabel('Candidate Angle Value [Deg]');ylabel('Cross Correlation Value'); 88 | temp = find(result==10)-90 89 | % error_table(76,(find(result==10)-71+90)) 90 | % figure;plot(error_table(76,:)) 91 | %% test AOA algorithm 92 | angle_real = -55.5; 93 | td = -sin(angle_real/180*pi)*d; 94 | phi_obs = 2*pi*td/100./(v_speed./freq); 95 | 96 | noise = 0.01; % standard deviation of the noise 97 | phi_obs = phi_obs + randn(size(phi_obs))*noise; 98 | phase_test = wrapping(phi_obs); 99 | 100 | angle_est = alg_aoa_fern(phase_test,r1,r2,fern_mat, phase_all) 101 | 102 | disp(['The estimated angle is ', num2str(angle_est,'%2.2f'), '[deg] | error = ', ... 103 | num2str(abs(angle_real-angle_est),'%2.2f'), '[deg]']); 104 | %% Extra part: best fern selection test 105 | e = []; 106 | r_all = []; 107 | range_max = 140; 108 | fern_points = 5; 109 | error_table_n = error_table(90-floor(range_max/2)+1:90+floor(range_max/2),:); 110 | for sel_i = 1:100 111 | fern_point = randperm(range_max,fern_points); 112 | rn = combnk(fern_point,2); 113 | fern_num = length(rn(:,1)); 114 | r1 = rn(:,1); 115 | r2 = rn(:,2); 116 | bin = zeros(1,2^fern_num); 117 | fern_mat = []; 118 | value = []; 119 | for i = 1:range_max 120 | value = sign(error_table_n(i,r1)-error_table_n(i,r2)+0.001); 121 | result(i) = (value+1)/2*fliplr(2.^(0:fern_num-1))'; 122 | bin(1+result(i)) = bin(1+result(i)) + 1; 123 | fern_mat = [fern_mat ;value]; 124 | end 125 | % size(fern_mat) 126 | % figure;plot(bin); 127 | p = bin/sum(bin); 128 | entropy = - sum(nonzeros(p).*log2(nonzeros(p))) / ceil(log2(length(p))); 129 | e(sel_i) = entropy; 130 | r_all = [r_all; fern_point]; 131 | % save fern.mat r1 r2 fern_mat 132 | end 133 | % r_all(37,:) 134 | figure;plot(e);xlabel('Simulation Time');ylabel('Efficiency') 135 | %% visualize the selected fern 136 | [a1 a2] = max(e); 137 | a1 138 | fern_point = r_all(a2,:); 139 | rn = combnk(fern_point,2); 140 | r1 = rn(:,1); 141 | r2 = rn(:,2); 142 | bin = zeros(1,2^fern_num); 143 | fern_mat = []; 144 | value = []; 145 | for i = 1:range_max 146 | value = sign(error_table_n(i,r1)-error_table_n(i,r2)+0.001); 147 | result(i) = (value+1)/2*fliplr(2.^(0:fern_num-1))'; 148 | bin(1+result(i)) = bin(1+result(i)) + 1; 149 | fern_mat = [fern_mat ;value]; 150 | end 151 | % size(fern_mat) 152 | figure;plot(bin); 153 | length(value) 154 | a1 155 | length(bin) 156 | length(nonzeros(bin)) 157 | max(bin) 158 | sum(bin)/length(nonzeros(bin)) 159 | 160 | -------------------------------------------------------------------------------- /2 AOA Random Ferns/wrapping.m: -------------------------------------------------------------------------------- 1 | function output = wrapping(input) 2 | output = mod(input+pi,2*pi)-pi; 3 | end -------------------------------------------------------------------------------- /3 PDP for Sensor Pairs/Main_test_1027.m: -------------------------------------------------------------------------------- 1 | close all; 2 | clear all; 3 | clc; 4 | %% 1 Set all the parameters 5 | global tx_ref; 6 | global nfft fs F freq v d; 7 | global theta_max projections changes; 8 | nfft = 1024; 9 | fs = 96000; 10 | F = 0:fs/nfft:(fs-fs/nfft); 11 | P1_Initialization_phone 12 | b_array = [183 199 215]; %96K 17 18.5 20; 13 | b_two = [1 3]; % use only two frequencies to fit the paper. (can use three actually..) 14 | freq = F(b_array(b_two)); 15 | v = 343; 16 | d = 0.025/sqrt(2); 17 | theta_max = 89; 18 | search_area = [-theta_max, theta_max]; 19 | 20 | error_s = zeros(1,7); 21 | error_m = zeros(1,7); 22 | anglexs = zeros(3,1000); % Dual Freq, Grid Search, PDP 23 | angleys = zeros(3,1000); 24 | success = zeros(3,15); 25 | angle_cell = cell(1,15); 26 | %% 2 Load Data & Preprocess (find block peak) 27 | for file_i = 1:15 28 | file_ind = file_i 29 | if(file_i<10) % zero ahead 30 | file_ind = ['data0' num2str(file_ind) '.mat']; 31 | else 32 | file_ind = ['data' num2str(file_ind) '.mat']; 33 | end 34 | load(file_ind); 35 | [cc,gesture_area,peak_pos] = Sub_Locating_Active_Area(y(1,:),tx_ref,0.0008); 36 | pulse_pos = peak_pos(5:1004); % discard first and last several. 37 | g1 = zeros(size(freq)); 38 | g2 = zeros(size(freq)); 39 | tic 40 | phi_obs = []; 41 | phi_rf = []; % phase for range refinement. 42 | phi_r = []; 43 | mangle1 = []; 44 | mangle2 = []; 45 | for i = 1:length(pulse_pos) 46 | part = y([1 2], pulse_pos(i):pulse_pos(i)+p_len-1); 47 | fs = 96000; 48 | signal_e = 0; 49 | noise_e = 0; 50 | % check the SNR 51 | % for snr_i = 1:999 52 | % signal_e = signal_e + sum(y(2,peak_pos(snr_i):peak_pos(snr_i)+600-1).^2); 53 | % noise_e = noise_e + sum(y(2,peak_pos(snr_i)+600:peak_pos(snr_i)+1200-1).^2); 54 | % end 55 | % snr(file_i) = 20*log10(sqrt((signal_e-noise_e) / noise_e)); 56 | 57 | hamming_mat = [hamming(p_len/3) hamming(p_len/3)]; 58 | Y1 = fft(part(:,1:200)'.*hamming_mat,nfft); % fft for frequency 1 59 | Y2 = fft(part(:,201:400)'.*hamming_mat,nfft); 60 | Y3 = fft(part(:,401:600)'.*hamming_mat,nfft); 61 | Y = [Y1(b_array(1),:) ;Y2(b_array(2),:);Y3(b_array(3),:)]; 62 | Y1 = Y(:,1); Y2 = Y(:,2); 63 | for fre_i = 1:length(b_array) 64 | g_temp = Y(fre_i,2).*(transpose(Y(fre_i,1)')); 65 | g1(fre_i) = angle(g_temp); 66 | end 67 | phi_obs = [phi_obs; g1]; % phase for horizontal angle 68 | end 69 | toc 70 | 71 | %% AOA estimation 72 | [projections,changes,pro_start, pro_stop] = get_projections(theta_max, d, v, freq); 73 | 74 | tic 75 | for angle_i = 1:length(phi_obs) 76 | anglexs(3,angle_i) = alg_projection_constrained(phi_obs(angle_i,b_two), search_area); 77 | end 78 | toc 79 | 80 | tic 81 | for angle_i = 1:length(phi_obs) 82 | ref = phi_obs(angle_i,b_two); 83 | anglexs(2,angle_i) = alg_aoa_search(ref,freq,search_area,d); 84 | end 85 | toc 86 | 87 | tic 88 | for angle_i = 1:length(phi_obs) 89 | ref = phi_obs(angle_i,b_two); 90 | anglexs(1,angle_i) = alg_disambiguity_freq(freq(1),freq(2),ref(1),ref(2),d); 91 | end 92 | toc 93 | results_all{file_i} = anglexs; 94 | end 95 | % save F8_1027.mat 96 | %% Plot figure 97 | % load F8_1027.mat 98 | for i = 1:15 99 | anglexs = results_all{i}; 100 | for s_i = 1:3 101 | success(s_i,i) = sum(abs(anglexs(s_i,:)) > 2.5); 102 | end 103 | end 104 | snr_set = -18:-4; 105 | sr = (1000-success)/1000; 106 | figure; 107 | plot(snr_set,sr([1],:)','-.or','LineWidth',2);hold on; 108 | plot(snr_set,sr([2],:)','--og','LineWidth',2);hold on; 109 | plot(snr_set,sr([3],:)','-ob','LineWidth',2); 110 | 111 | for i = 1:15 112 | anglexs = results_all{i}; 113 | for s_i = 1:3 114 | success(s_i,i) = sum(abs(anglexs(s_i,:)) > 5); 115 | end 116 | end 117 | snr_set = -18:-4; 118 | sr = (1000-success)/1000; 119 | hold on; 120 | plot(snr_set,sr([1],:)','-.^r','LineWidth',2);hold on; 121 | plot(snr_set,sr([2],:)','--^g','LineWidth',2);hold on; 122 | plot(snr_set,sr([3],:)','-^b','LineWidth',2);% legend('Search','Fine Search','PDP') 123 | xlabel('SNR') 124 | ylabel('Percentage') 125 | set(gca,'FontSize',12) 126 | legend('P(e<2.5^{o}) Dual Freq','P(e<2.5^{o}) Grid Search','P(e<2.5^{o}) PDP',... 127 | 'P(e<5^{o}) Dual Freq','P(e<5^{o}) Grid Search','P(e<5^{o}) PDP') 128 | axis([-18 -4 0 1]) 129 | % grid on; 130 | %% 3d plotting with synchronized signal 131 | rmse = zeros(3,15); 132 | for i = 1:15 133 | anglex = results_all{i}; 134 | rmse(1,i) = sqrt(mean(anglex(1,:).^2)); 135 | rmse(2,i) = sqrt(mean(anglex(2,:).^2)); 136 | rmse(3,i) = sqrt(mean(anglex(3,:).^2)); 137 | end 138 | figure;plot(rmse','LineWidth',2); 139 | legend('Dual Freq','Grid Search','PDP') 140 | xlabel('SNR') 141 | ylabel('RMSE of the Error [Deg]') 142 | set(gca,'FontSize',12) 143 | 144 | -------------------------------------------------------------------------------- /3 PDP for Sensor Pairs/P1_Initialization_phone.m: -------------------------------------------------------------------------------- 1 | %% 1 Initialization: fhss signal 2 | % global dir fs b_len h_len num_hops p_len chan_min chan_bw chan_max ... 3 | % num_bits num_pulses v carr_gain bw_carr f_carr tx_ref 4 | global tx_ref; 5 | global nfft fs F freq v d; 6 | dir = 'C:\Users\chenh0c\Desktop\Demo_2018\signal\'; 7 | s1 = [1.25/sqrt(2) 0]; % sensor position definition, 1d aoa in [cm] 8 | s2 = [-1.25/sqrt(2) 0]; 9 | d = norm(s1-s2)/100; % in meter 10 | r = 150; 11 | nfft = 1024; 12 | fs = 96000; 13 | F = 0:fs/nfft:(fs-fs/nfft); 14 | b_array = [183 199 215]; %96K 17 18.5 20; 15 | % b_array = [193 209 225]; %96K 18 19.5 21; 16 | freq = F(b_array); 17 | fs = 96000; % sampling frequency 18 | b_len = 1920; % length of one block ( hops--> pulse--> block ) 19 | h_len = 400/2; % length of hop in samples 20 | num_hops = 3; % hop numbers in the pulse 21 | p_len = num_hops*h_len; % pulse length 22 | chan_min = 17000; % channel minimum freq (Hz) 23 | chan_bw = 3000; % channel bandwidth (Hz) 24 | chan_max = chan_min+chan_bw; % channel maximum freq (Hz) 25 | num_bits = 24; % quantization bits 26 | num_pulses = 2000; 27 | v = 343; % speed of sound 28 | carr_gain = ones(1,num_hops); % gain for channel (no attenuation case all 1) 29 | bw_carr = chan_bw/(num_hops-1); % bandwidth of each carrier (Hz) 30 | f_carr = chan_min+bw_carr*(0:num_hops-1); % carrier frequencies (Hz) 31 | t = 0:1/fs:(h_len-1)/fs; 32 | tx_ref = zeros(1,b_len); 33 | % tx_time = 0:length(tx_ref)figure;plot() 34 | win = hamming(h_len)'; 35 | for i = 1:num_hops 36 | tx_ref(1+(i-1)*h_len:i*h_len) = win.*sin(2*pi*f_carr(i)*t); 37 | end 38 | % figure;plot(tx_ref) 39 | % figure;plot(abs(fft(tx_ref,2^17))) 40 | tx = zeros(1,b_len*num_pulses); 41 | for i = 1:num_pulses 42 | tx(1+(i-1)*b_len:i*b_len) = tx_ref; 43 | end 44 | % figure;plot(tx(1:10000)) 45 | %% 46 | % filename = strcat(dir,'tx_phone_18K_21K_3hops_20s.wav'); 47 | % audiowrite(filename,tx,fs,'BitsPerSample',num_bits); -------------------------------------------------------------------------------- /3 PDP for Sensor Pairs/Sub_Locating_Active_Area.m: -------------------------------------------------------------------------------- 1 | % Sub-Program: Locating gesture area 2 | % find the gesture area for a sequence of gestures 3 | % cc: cross correlation value between the received signal and the reference 4 | % start point of each gesture and their length in blocks 5 | % Created on 2017-02-17 6 | % Created by Chen Hui (hui.chen@kaust.edu.sa) 7 | % Revised on 2017-03-24 8 | 9 | function [cc,gesture_area,peak_pos] = Sub_Locating_Active_Area(y1,tx_ref,thres) 10 | 11 | b_len = length(tx_ref); 12 | cc = conv(y1,fliplr(tx_ref)); 13 | cc = cc(length(tx_ref):end); 14 | % figure;plot(abs(cc)); 15 | peak = zeros(1,floor(length(y1)/b_len)); 16 | peak_pos = peak; 17 | 18 | for i = 1:length(peak) 19 | [a,b] = max(abs(cc(1+(i-1)*b_len:i*b_len))); 20 | peak(i) = a; 21 | peak_pos(i) = b + (i-1)*b_len; 22 | end 23 | % figure;plot(peak); 24 | % figure;plot(peak_pos) 25 | % figure;plot(y1(peak_pos(50):peak_pos(50)+1000)) 26 | peak = [peak 0]; 27 | cc_flag = zeros(size(peak)); 28 | cc_flag((abs(peak)>thres))=1; 29 | % cc_flag = [cc_flag 0]; 30 | 31 | % figure;plot(cc_flag,'*');axis([0 1400 -0.2 1.2]) 32 | counter_active = 1; 33 | active = 0; % gesture active 34 | start = []; 35 | stop = []; 36 | for i = 1:length(peak) 37 | if(cc_flag(i) && ~active) 38 | start(counter_active) = i; 39 | active = 1; 40 | end 41 | if(~cc_flag(i) && active) 42 | stop(counter_active) = i; 43 | counter_active = counter_active + 1; 44 | active = 0; 45 | end 46 | end 47 | % locating gesture area 48 | % gesture_area = zeros(1,2); 49 | 50 | % if(~isempty((start(2:end)-stop(1:end-1))<5)) 51 | if(length(start)>length(stop)) 52 | start = start(1:end-1); 53 | end 54 | 55 | temp2 = find((start(2:end)-stop(1:end-1))<5); 56 | % end 57 | if(~isempty(temp2)) 58 | for i = 1:length(temp2) 59 | stop(temp2(end-i+1))=stop(temp2(end-i+1)+1); 60 | stop(temp2(end-i+1)+1) = 0; 61 | end 62 | end 63 | 64 | temp1 = find((stop-start)>10); 65 | 66 | gesture_area = [start(temp1) ; stop(temp1)]'; 67 | % gesture_area(1,:) 68 | % active_area = gesture_area(:,2) - gesture_area(:,1); 69 | %% find the bases of each gesture 70 | % base = zeros(1,length(gesture_area(:,1))); 71 | % for i = 1:length(active_area) 72 | % start_temp(i) = (gesture_area(i,1))*b_len; 73 | % [~,base(i)] = max(abs(cc(start_temp:start_temp+b_len))); 74 | % end 75 | % base = base + start_temp - b_len; 76 | % active_area = active_area-1; 77 | end -------------------------------------------------------------------------------- /3 PDP for Sensor Pairs/alg_aoa_search.m: -------------------------------------------------------------------------------- 1 | % add candidates for unwrapping_search. 2 | % Revised on 28-Mar-2017 3 | % 4 | % 5 | function angle_out = alg_aoa_search(g1,f1,search_range,d) 6 | 7 | % step1: load data 8 | ang = search_range(1):1:search_range(2); 9 | % d = 2.5/sqrt(2); 10 | diff_range = -sin(ang/180*pi)*d; 11 | % [mm, nn] = size(f1); 12 | v = 343; 13 | phi = g1; 14 | 15 | % step2: generate all the possible phase difference (no need to do this every time, just load data) 16 | diff_fai = zeros(length(diff_range),length(f1));% angle and frequency 17 | for i = 1:length(diff_range) 18 | for j = 1:length(f1) 19 | diff_fai(i,j) = -diff_range(i)/(v/f1(j))*2*pi; 20 | while(diff_fai(i,j)>=pi || diff_fai(i,j)<-pi) 21 | if(diff_fai(i,j) > pi) 22 | diff_fai(i,j) = diff_fai(i,j)-2*pi; 23 | end 24 | if(diff_fai(i,j) <= -pi) 25 | diff_fai(i,j) = diff_fai(i,j)+2*pi; 26 | end 27 | end 28 | end 29 | end 30 | 31 | % step3: calculate error and find the min 32 | error = zeros(1,length(diff_range)); 33 | for i = 1:length(diff_range) 34 | error_temp = (phi-diff_fai(i,:)); 35 | % noise may cause error. (eg: 0 and 1.99*pi are the same) 36 | extra_l = find(error_temp>1.5*pi); 37 | error_temp(extra_l) = error_temp(extra_l)-2*pi; 38 | extra_s = find(error_temp<-1.5*pi); 39 | error_temp(extra_s) = error_temp(extra_s)+2*pi; 40 | error(i) = sum(abs(error_temp)); 41 | end 42 | % figure;plot(error) 43 | [a1, a2] = min(error); 44 | % step4: do 2rd order curve fitting 45 | if(a2==1) 46 | a2 = a2+1; 47 | end 48 | if(a2 == length(ang)) 49 | a2 = a2-1; 50 | end 51 | angle_out = ang(a2); 52 | 53 | end 54 | -------------------------------------------------------------------------------- /3 PDP for Sensor Pairs/alg_disambiguity_freq.m: -------------------------------------------------------------------------------- 1 | % unwrap the phase using 2 freq components and corresponding phase 2 | % difference 3 | function data_out = alg_disambiguity_freq(f1,f2,phi1,phi2,d) 4 | mu = f1/(f2-f1); 5 | % step 1 6 | k = -1:1; 7 | phi_cand = mu*(-phi1 + phi2 + 2*pi*k); % phi1-phi2 /// phi2-phi1 8 | % 2*pi*f1*d/c 9 | % step 2 10 | [phi_u1,kuv] = min(abs(phi_cand)); 11 | phi_u1 = phi_cand(kuv); 12 | % step 3 13 | ku = (phi_u1-phi1)/2/pi; 14 | ku = round(ku); 15 | % step 4 16 | data_out = phi1+2*pi*ku; 17 | 18 | % 19 | % thres = 4.5; 20 | % if(data_out>thres) 21 | % data_out = data_out-2*pi; 22 | % end 23 | % if(data_out<-thres) 24 | % data_out = data_out+2*pi; 25 | % end 26 | % 27 | % phase(i) = data_out; 28 | % 29 | data_out = data_out/2/pi*343./f1; 30 | data_out = real(asin(data_out*sqrt(2)/0.025)/pi*180); 31 | % 32 | 33 | end -------------------------------------------------------------------------------- /3 PDP for Sensor Pairs/alg_projection_constrained.m: -------------------------------------------------------------------------------- 1 | function [output] = alg_projection_constrained(target, search_area) 2 | global d freq v projections changes; 3 | ratio = norm(d.*2*pi*freq/v); 4 | %************************ projection algorithm ********************** 5 | [m,n] = size(projections); 6 | rx_p = project_nd(freq/1000, target); 7 | dis_p = zeros(1,m); 8 | for i = 1:m 9 | dis_p(i) = norm(projections(i,:)-rx_p); 10 | end 11 | [dis_est, a2] = min(dis_p); 12 | real_target = target + changes(a2,:); 13 | real_proj = project_nd(freq,real_target); 14 | dt = sign(mean(real_target))*norm(real_proj - real_target)/ratio; 15 | out_est = real(asin(dt)*180/pi); 16 | 17 | %******************* constrained projection algorithm ********************** 18 | if(length(search_area) == 2) 19 | % stable tracking 20 | [~,dis_sorted] = sort(dis_p); 21 | for cand_i = 1:min(3,(length(dis_sorted)-1)) 22 | if((out_est>=search_area(1) && out_est<=search_area(2))) 23 | break; 24 | else 25 | real_target = target + changes(dis_sorted(cand_i+1),:); 26 | real_proj = project_nd(freq,real_target); 27 | dt = sign(mean(real_target))*norm(real_proj - real_target)/ratio; 28 | out_est = real(asin(dt)*180/pi); 29 | end 30 | end 31 | end 32 | 33 | if(out_est<= search_area(2) && out_est>=search_area(1)) 34 | output = out_est; 35 | elseif(out_est0) % reach right 16 | temp = (pi-cur(1))*d(2)/d(1)+cur(2); 17 | stop_temp = [pi temp]; 18 | stop = [stop; stop_temp]; 19 | start_temp = stop_temp-[2*pi 0]; 20 | start = [start; start_temp]; 21 | change_temp = change(end,:)+[2*pi 0]; 22 | change = [change; change_temp]; 23 | cur_real = start(end,:)+change(end,:); 24 | cur = start(end,:); 25 | elseif(diff(([pi pi]-cur)./d)<0) % reach top 26 | temp = (pi-cur(2))*d(1)/d(2)+cur(1); 27 | stop_temp = [temp pi]; 28 | stop = [stop; stop_temp]; 29 | start_temp = stop_temp-[0 2*pi]; 30 | start = [start; start_temp]; 31 | change_temp = change(end,:)+[0 2*pi]; 32 | change = [change; change_temp]; 33 | cur_real = start(end,:)+change(end,:); 34 | cur = start(end,:); 35 | else % reach the corner 36 | stop_temp = [pi pi]; 37 | stop = [stop; stop_temp]; 38 | start_temp = stop_temp-[2*pi 2*pi]; 39 | start = [start; start_temp]; 40 | change_temp = change(end,:)+[2*pi 2*pi]; 41 | change = [change; change_temp]; 42 | cur_real = start+change(end,:); 43 | cur = start(end,:); 44 | end 45 | end 46 | % process start and stop points 47 | pro1 = start(1:end-1,:); 48 | pro2 = stop; 49 | pro2 = [pro2; -pro1(2:end,:)]; 50 | pro1 = [pro1; -stop(2:end,:)]; 51 | pro1(1,:) = -pro2(1,:); 52 | changes = [change(1:end-1,:); -change(2:end-1,:)]; 53 | pro_start = pro1; 54 | pro_stop = pro2; 55 | projections = zeros(size(pro1)); 56 | for i = 1:length(pro1(:,1)) 57 | projections(i,:) = project_nd(d, pro1(i,:)); 58 | end 59 | % 2 frequency case 60 | elseif(length(freq)>=2) 61 | max_pro = d*sin(theta/180*pi)/v*freq*2*pi; % max phase difference, project on the figure; 62 | cur = zeros(size(freq)); % search projection points 63 | cur_real = zeros(size(freq)); % real 64 | change = zeros(size(freq)); 65 | stop = []; 66 | start = zeros(size(freq)); 67 | max_pi = pi*ones(size(freq)); 68 | while(sum(cur_real < max_pro)==length(freq)) 69 | [~,m2] = min(1000*(max_pi-cur)./freq); 70 | temp = (pi - cur(m2)).*freq/freq(m2) + cur; 71 | stop_temp = temp; 72 | stop = [stop; stop_temp]; 73 | change_bit = zeros(1,length(freq)); 74 | change_bit(m2) = 2*pi; 75 | temp = temp-change_bit; 76 | start_temp = temp; 77 | start = [start; start_temp]; 78 | change_temp = change(end,:)+change_bit; 79 | change = [change; change_temp]; 80 | cur_real = start(end,:)+change(end,:); 81 | cur = start(end,:); 82 | end 83 | 84 | % process start and stop points 85 | pro1 = start(1:end-1,:); 86 | pro2 = stop; 87 | pro2 = [pro2; -pro1(2:end,:)]; 88 | pro1 = [pro1; -stop(2:end,:)]; 89 | pro1(1,:) = -pro2(1,:); 90 | changes = [change(1:end-1,:); -change(2:end-1,:)]; 91 | pro_start = pro1; 92 | pro_stop = pro2; 93 | projections = zeros(size(pro1)); 94 | for i = 1:length(pro1(:,1)) 95 | projections(i,:) = project_nd(freq, pro1(i,:)); 96 | end 97 | % hold on;plot(projections(:,1),projections(:,2),'ro') 98 | end 99 | 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /3 PDP for Sensor Pairs/project_nd.m: -------------------------------------------------------------------------------- 1 | % Obtain the projected points with plane norm. 2 | % hui.chen@kaust.edu.sa 3 | function output = project_nd(plane_norm, point) 4 | f = plane_norm; 5 | p = point; 6 | t0 = -(p'*f)/(norm(f)^2); 7 | output = p + f*t0; 8 | end 9 | -------------------------------------------------------------------------------- /3 PDP for Sensor Pairs/wrapping.m: -------------------------------------------------------------------------------- 1 | function output = wrapping(phase) 2 | output = mod(phase+pi,2*pi)-pi; 3 | end -------------------------------------------------------------------------------- /4 PDP for NULA/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/.DS_Store -------------------------------------------------------------------------------- /4 PDP for NULA/Fig_2_Main_PDP_1freq_2d.m: -------------------------------------------------------------------------------- 1 | % plot wrapped phase difference (WPD) pattern, for 2 pair of sensors 2 | % author: hui.chen@kaust.edu.sa 3 | 4 | close all; 5 | clear all; 6 | clc; 7 | %% Simulation Model Building for Phase Unwrapping 8 | global v; 9 | v = 343; 10 | freq = 20000; 11 | D = 2.3; 12 | delta = 1.25; 13 | lambda = v/freq; % wavelength 14 | S = [0 1 1+delta]*D*lambda/2; % sensor location, in [m] 15 | 16 | comb = combnk(1:length(S),2); 17 | comb = comb([1 3],:); % pair 1 & 3 18 | d = abs(S(comb(:,1)) - S(comb(:,2))); % sensor inner-distance of these pairs 19 | thetam = 90; % maximum DOA, detection range [-thetam, thetam] 20 | ang_range = (-thetam):(thetam); 21 | 22 | angle_train = []; 23 | phase_real = []; 24 | phase_wrapped = []; 25 | phi = zeros(1,length(freq)-1); 26 | p = []; 27 | for x_i = -thetam:1:thetam 28 | angle0 = x_i; 29 | phi = 2*pi*freq*sin(angle0/180*pi)*d/v; 30 | phase_real = [phase_real; (phi)]; 31 | phase_wrapped = [phase_wrapped; wrapping(phi)]; 32 | end 33 | 34 | % if(length(d)==3) 35 | % figure;plot3(phase_wrapped(:,1),phase_wrapped(:,2),phase_wrapped(:,3),'.'); 36 | % character = cellstr(num2str((1:141)'-71)); 37 | % text(phase_wrapped(:,1),phase_wrapped(:,2),phase_wrapped(:,3),character); 38 | % xlabel('x');ylabel('y');zlabel('z'); 39 | % elseif(length(d)==2) 40 | % figure;plot(phase_wrapped(:,1),phase_wrapped(:,2),'.'); 41 | % character = cellstr(num2str((1:141)'-71)); 42 | % text(phase_wrapped(:,1),phase_wrapped(:,2),character); 43 | % end 44 | %% 45 | figure;plot(phase_wrapped(:,1),phase_wrapped(:,2),'.','MarkerSize',10); 46 | hold on; plot(phase_wrapped((91-20):(91+20),1),phase_wrapped((91-20):(91+20),2),'b.','MarkerSize',10); 47 | hold on; plot(phase_wrapped((91+21):(91+25),1),phase_wrapped((91+21):(91+25),2),'m.','MarkerSize',10); 48 | hold on; plot(phase_wrapped((91-25):(91-21),1),phase_wrapped((91-25):(91-21),2),'m.','MarkerSize',10); 49 | hold on; plot(phase_wrapped((91+26):(91+90),1),phase_wrapped((91+26):(91+90),2),'c.','MarkerSize',10); 50 | hold on; plot(phase_wrapped((91-90):(91-26),1),phase_wrapped((91-90):(91-26),2),'c.','MarkerSize',10); 51 | 52 | set(gca,'FontSize',16) 53 | xlabel('{$\psi_1(\theta)$ [Rad]}','Interpreter','Latex'); 54 | ylabel('{$\psi_2(\theta)$ [Rad]}','Interpreter','Latex'); 55 | set(gcf,'position',[100,100,420*1.2,400*1.2]) 56 | axis([-4 4 -3.3 3.3]) 57 | 58 | % projections 59 | [P, U] = alg_get_projections(max(ang_range), d, v, freq); 60 | hold on; 61 | plot(P(:,1),P(:,2),'-g','LineWidth',1.5); 62 | hold on; 63 | plot(P(:,1),P(:,2),'sr','MarkerSize',8,'MarkerFaceColor','r'); 64 | 65 | character = cell(1,3); 66 | character{1} = {'{$\mathbf{p}_1$}'}; 67 | character{2} = {'{$\mathbf{p}_3$}'}; 68 | character{3} = {'{$\mathbf{p}_5$}'}; 69 | % character{5} = {'p_5'}; 70 | text(P([1 3 5],1)+0.25,P([1 3 5],2)+0.2,character,'FontSize',16,'Color','r','Interpreter','Latex'); 71 | text(P(2,1)-0.05,P(2,2)-0.4,'{$\mathbf{p}_2$}','FontSize',16,'Color','r','Interpreter','Latex'); 72 | text(P(4,1)+0.15,P(4,2)+0.4,'{$\mathbf{p}_4$}','FontSize',16,'Color','r','Interpreter','Latex'); 73 | 74 | % boundaryc 75 | hold on; 76 | plot([-pi pi],[-pi -pi],'--b','LineWidth',1); 77 | plot([pi pi],[pi -pi],'--b','LineWidth',1); 78 | plot([-pi pi],[pi pi],'--b','LineWidth',1); 79 | plot([-pi -pi],[pi -pi],'--b','LineWidth',1); 80 | 81 | % highlight 82 | highlight = [-90 -25 -26 26 25 90]; 83 | hold on;plot(phase_wrapped(highlight+thetam+1,1),phase_wrapped(highlight+thetam+1,2),'.r','MarkerSize',16); 84 | % character = cellstr([num2str(highlight')]); 85 | character = cellstr(strcat([num2str(highlight')], '^\circ')); 86 | for i = 1:length(character) 87 | character{i} = ['{$' character{i} '$}']; 88 | end 89 | % s1 = num2str(highlight'); 90 | % s2 = '^\circ'; 91 | % s = strcat(s1,s2) 92 | % character = {{'-90^\circ'}, {'-25^\circ'}, {'-26^\circ'}, {'26^\circ'}, {'25^\circ'}, {'90^\circ'}} 93 | text(phase_wrapped(highlight+thetam+1,1)+0.1,phase_wrapped(highlight+thetam+1,2)-0.1,character,'FontSize',16,'Interpreter','Latex'); 94 | 95 | highlight = [-20 0 21]; 96 | hold on;plot(phase_wrapped(highlight+thetam+1,1),phase_wrapped(highlight+thetam+1,2),'.r','MarkerSize',16); 97 | % character = cellstr(num2str(highlight')); 98 | character = cellstr(strcat([num2str(highlight')], '^\circ')); 99 | for i = 1:length(character) 100 | character{i} = ['{$' character{i} '$}']; 101 | end 102 | text(phase_wrapped(highlight+thetam+1,1)-0.20,phase_wrapped(highlight+thetam+1,2)-0.35,character,'FontSize',16,'Interpreter','Latex'); 103 | 104 | set(gca,'FontSize',16) 105 | 106 | highlight = [-21 20]; 107 | hold on;plot(phase_wrapped(highlight+thetam+1,1),phase_wrapped(highlight+thetam+1,2),'.r','MarkerSize',16); 108 | % character = cellstr(num2str(highlight')); 109 | character = cellstr(strcat([num2str(highlight')], '^\circ')); 110 | for i = 1:length(character) 111 | character{i} = ['{$' character{i} '$}']; 112 | end 113 | text(phase_wrapped(highlight+thetam+1,1)+0.0,phase_wrapped(highlight+thetam+1,2)+0.35,character,'FontSize',16,'Interpreter','Latex'); 114 | 115 | set(gca,'FontSize',16) 116 | % an example of phase unwrapping 117 | % ex1 = phase_wrapped(22+thetam+1,:)+[-0.3 0.24]; 118 | % ex2 = phase_wrapped(22+thetam+1,:); 119 | % ex3 = phase_real(22+thetam+1,:); 120 | 121 | % plot(ex1(1),ex1(2),'^r','MarkerSize',5,'LineWidth',1.2); 122 | % text(ex1(1)-0.94,ex1(2)+0.2,'$\hat{\psi}(22)$','Interpreter','latex','FontSize',12,'Color','r'); 123 | % plot(ex2(1),ex2(2),'^r','MarkerSize',5,'LineWidth',1.2); 124 | % text(ex2(1)+0.2,ex2(2)-.1,'$\tilde{\psi}(22)$','Interpreter','latex','FontSize',12,'Color','r'); 125 | % plot(ex3(1),ex3(2),'^r','MarkerSize',5,'LineWidth',1.2); 126 | % text(ex3(1)+0.2,ex3(2),'$\hat{\phi}(22)$','Interpreter','latex','FontSize',12,'Color','r'); 127 | 128 | % plot(-1.5,-2.9,'xb','MarkerSize',7,'LineWidth',1.2); 129 | % text(-1.3,-2.9,'$\hat{\psi}(-15)$','Interpreter','latex','FontSize',12,'Color','b'); 130 | 131 | text('position',[P(1,1)+1, P(1,2)+1],'Interpreter','latex','String','{\boldmath$\Theta_1$}','FontSize',16,'Color','c'); 132 | text('position',[P(5,1)+1, P(5,2)+1],'Interpreter','latex','String','{\boldmath$\Theta_5$}','FontSize',16,'Color','c'); 133 | text('position',[P(3,1)+1, P(3,2)+1],'Interpreter','latex','String','{\boldmath$\Theta_3$}','FontSize',16,'Color','b'); 134 | text('position',[P(4,1)-0.9, P(4,2)-.1],'Interpreter','latex','String','{\boldmath$\Theta_4$}','FontSize',16,'Color','m'); 135 | text('position',[P(2,1)-.7, P(2,2)+0.3],'Interpreter','latex','String','{\boldmath$\Theta_2$}','FontSize',16,'Color','m'); 136 | 137 | axis([-4 4 -4 4]) 138 | 139 | set(gcf, 'Position', [10 10 500 450]) 140 | 141 | 142 | % xlabel('{Number of Antennas/SAs at BS $N_\mathrm{B}$}','Interpreter','Latex') 143 | % 144 | 145 | % print -dpng -r600 fig_2.png 146 | -------------------------------------------------------------------------------- /4 PDP for NULA/Fig_4_affectof_d_delta.m: -------------------------------------------------------------------------------- 1 | % Search based phase unwrapping algorithm tests 2 | close all; 3 | clear all; 4 | clc; 5 | %% 6 | % project_3d([a b c], p) 7 | %% Simulation Model Building for Phase Unwrapping 8 | global v; 9 | v = 343; 10 | freq = 20000; 11 | D = 1.8; 12 | delta = 1.25; 13 | lambda = v/freq; 14 | s = [0 1 1+delta]*D*lambda; % sensor location, in [lambda] 15 | comb = combnk(1:length(s),2); 16 | comb = comb([1 3],:); 17 | d = abs(s(comb(:,1)) - s(comb(:,2))); 18 | thetam = 90; 19 | ang_range = (-thetam):(thetam); 20 | Ns = floor(2*freq*sin(thetam/180*pi)*d/v) 21 | 22 | angle_train = []; 23 | phase_real = []; 24 | phase_wrapped = []; 25 | phi = zeros(1,length(freq)-1); 26 | p = []; 27 | for x_i = -thetam:1:thetam 28 | angle0 = x_i; 29 | % angle = -33.3 30 | phi = 2*pi*freq*sin(angle0/180*pi)*d/v; 31 | phase_real = [phase_real; (phi)]; 32 | phase_wrapped = [phase_wrapped; wrapping(phi)]; 33 | % phi = sin(phi); 34 | end 35 | 36 | % if(length(d)==3) 37 | % figure;plot3(phase_wrapped(:,1),phase_wrapped(:,2),phase_wrapped(:,3),'.'); 38 | % character = cellstr(num2str((1:141)'-71)); 39 | % text(phase_wrapped(:,1),phase_wrapped(:,2),phase_wrapped(:,3),character); 40 | % xlabel('x');ylabel('y');zlabel('z'); 41 | % elseif(length(d)==2) 42 | % figure;plot(phase_wrapped(:,1),phase_wrapped(:,2),'.'); 43 | % character = cellstr(num2str((1:141)'-71)); 44 | % text(phase_wrapped(:,1),phase_wrapped(:,2),character); 45 | % end 46 | 47 | 48 | figure;plot(phase_wrapped(:,1),phase_wrapped(:,2),'.','MarkerSize',10); 49 | set(gca,'FontSize',16) 50 | xlabel('{$\psi_1(\theta)$ [Rad]}','Interpreter','Latex'); 51 | ylabel('{$\psi_2(\theta)$ [Rad]}','Interpreter','Latex'); 52 | set(gcf,'position',[100,100,420*1.2,400*1.2]) 53 | axis([-4 4 -4 4]) 54 | % projections 55 | [P, U] = alg_get_projections(max(ang_range), d, v, freq); 56 | hold on; 57 | plot(P(:,1),P(:,2),'-g','LineWidth',1.5); 58 | hold on; 59 | plot(P(:,1),P(:,2),'sr','MarkerSize',8,'MarkerFaceColor','r'); 60 | character = []; 61 | for i = 1:length(P(:,1)) 62 | character = [character; ['{$' '\mathbf{p}_' num2str(i) '$}']] 63 | end 64 | character = cellstr(character); 65 | text(P(:,1)-0.07,P(:,2)-0.3,character,'FontSize',16,'Color','r', 'Interpreter', 'Latex'); 66 | 67 | % boundary 68 | hold on; 69 | plot([-pi pi],[-pi -pi],'--b','LineWidth',1); 70 | plot([pi pi],[pi -pi],'--b','LineWidth',1); 71 | plot([-pi pi],[pi pi],'--b','LineWidth',1); 72 | plot([-pi -pi],[pi -pi],'--b','LineWidth',1); 73 | % highlight 74 | 75 | 76 | highlight = [-41 -12 13 42 -90]; 77 | hold on;plot(phase_wrapped(highlight+thetam+1,1),phase_wrapped(highlight+thetam+1,2),'.r','MarkerSize',16); 78 | character = cellstr(strcat([num2str(highlight')], '^\circ')); 79 | for i = 1:length(character) 80 | character{i} = ['{$' character{i} '$}']; 81 | end 82 | text(phase_wrapped(highlight+thetam+1,1)-0.2,phase_wrapped(highlight+thetam+1,2)-0.4,character,'FontSize',16, 'Interpreter', 'Latex'); 83 | set(gca,'FontSize',14) 84 | 85 | highlight = -[-41 -12 13 42 -90]; 86 | hold on;plot(phase_wrapped(highlight+thetam+1,1),phase_wrapped(highlight+thetam+1,2),'.r','MarkerSize',16); 87 | character = cellstr(strcat([num2str(highlight')], '^\circ')); 88 | for i = 1:length(character) 89 | character{i} = ['{$' character{i} '$}']; 90 | end 91 | text(phase_wrapped(highlight+thetam+1,1)-0.2,phase_wrapped(highlight+thetam+1,2)+0.4,character,'FontSize',16, 'Interpreter', 'Latex'); 92 | set(gca,'FontSize',14) 93 | 94 | highlight = [0]; 95 | hold on;plot(phase_wrapped(highlight+thetam+1,1),phase_wrapped(highlight+thetam+1,2),'.r','MarkerSize',16); 96 | character = cellstr(strcat([num2str(highlight')], '^\circ')); 97 | for i = 1:length(character) 98 | character{i} = ['{$' character{i} '$}']; 99 | end 100 | text(phase_wrapped(highlight+thetam+1,1)+0.2,phase_wrapped(highlight+thetam+1,2)+0.1,character,'FontSize',16, 'Interpreter', 'Latex'); 101 | set(gca,'FontSize',14) 102 | 103 | highlight = [-57 -17 16 56]; 104 | hold on;plot(phase_wrapped(highlight+thetam+1,1),phase_wrapped(highlight+thetam+1,2),'.r','MarkerSize',16); 105 | character = cellstr(strcat([num2str(highlight')], '^\circ')); 106 | for i = 1:length(character) 107 | character{i} = ['{$' character{i} '$}']; 108 | end 109 | text(phase_wrapped(highlight+thetam+1,1)+0.17,phase_wrapped(highlight+thetam+1,2)-0.1,character,'FontSize',16, 'Interpreter', 'Latex'); 110 | set(gca,'FontSize',14) 111 | 112 | highlight = -[-57 -17 16 56]; 113 | hold on;plot(phase_wrapped(highlight+thetam+1,1),phase_wrapped(highlight+thetam+1,2),'.r','MarkerSize',16); 114 | character = cellstr(strcat([num2str(highlight')], '^\circ')); 115 | for i = 1:length(character) 116 | character{i} = ['{$' character{i} '$}']; 117 | end 118 | text(phase_wrapped(highlight+thetam+1,1)-0.77,phase_wrapped(highlight+thetam+1,2)-0.1,character,'FontSize',16, 'Interpreter', 'Latex'); 119 | set(gca,'FontSize',14) 120 | 121 | % print -dpng -r600 fig-3-1.png 122 | 123 | %% Simulation Model Building for Phase Unwrapping 124 | freq = 20000; 125 | D = 1.15; 126 | delta = 1.45; 127 | lambda = v/freq; 128 | s = [0 1 1+delta]*D*lambda; % sensor location, in [lambda] 129 | comb = combnk(1:length(s),2); 130 | comb = comb([1 3],:); 131 | d = abs(s(comb(:,1)) - s(comb(:,2))); 132 | thetam = 90; 133 | ang_range = (-thetam):(thetam); 134 | Ns = floor(2*freq*sin(thetam/180*pi)*d/v); 135 | 136 | % distance = 36000*10^3; 137 | lambda = v/freq; 138 | angle_train = []; 139 | phase_real = []; 140 | phase_wrapped = []; 141 | phi = zeros(1,length(freq)-1); 142 | p = []; 143 | for x_i = -thetam:1:thetam 144 | angle0 = x_i; 145 | % angle = -33.3 146 | phi = 2*pi*freq*sin(angle0/180*pi)*d/v; 147 | phase_real = [phase_real; (phi)]; 148 | phase_wrapped = [phase_wrapped; wrapping(phi)]; 149 | % phi = sin(phi); 150 | end 151 | 152 | % if(length(d)==3) 153 | % figure;plot3(phase_wrapped(:,1),phase_wrapped(:,2),phase_wrapped(:,3),'.'); 154 | % character = cellstr(num2str((1:141)'-71)); 155 | % text(phase_wrapped(:,1),phase_wrapped(:,2),phase_wrapped(:,3),character); 156 | % xlabel('x');ylabel('y');zlabel('z'); 157 | % elseif(length(d)==2) 158 | % figure;plot(phase_wrapped(:,1),phase_wrapped(:,2),'.'); 159 | % character = cellstr(num2str((1:141)'-71)); 160 | % text(phase_wrapped(:,1),phase_wrapped(:,2),character); 161 | % end 162 | 163 | 164 | figure;plot(phase_wrapped(:,1),phase_wrapped(:,2),'.','MarkerSize',10); 165 | set(gca,'FontSize',16) 166 | xlabel('{$\psi_1(\theta)$ [Rad]}','Interpreter','Latex'); 167 | ylabel('{$\psi_2(\theta)$ [Rad]}','Interpreter','Latex'); 168 | set(gcf,'position',[100,100,420*1.2,400*1.2]) 169 | axis([-4 4 -4 4]) 170 | % projections 171 | [P, U] = alg_get_projections(max(ang_range), d, v, freq); 172 | hold on; 173 | plot(P(:,1),P(:,2),'-g','LineWidth',1.5); 174 | hold on; 175 | plot(P(:,1),P(:,2),'sr','MarkerSize',8,'MarkerFaceColor','r'); 176 | % character = []; 177 | 178 | for i = 3:7 179 | character = cellstr(['{$' '\mathbf{p}_' num2str(i) '$}']); 180 | text(P(i,1)-0.15,P(i,2)-0.4,character,'FontSize',16,'Color','r','Interpreter','Latex'); 181 | end 182 | 183 | for i = 1:2 184 | character = cellstr(['{$' '\mathbf{p}_' num2str(i) '$}']); 185 | text(P(i,1)-0.3,P(i,2)+0.42,character,'FontSize',16,'Color','r','Interpreter','Latex'); 186 | end 187 | 188 | 189 | % boundary 190 | hold on; 191 | plot([-pi pi],[-pi -pi],'--b','LineWidth',1); 192 | plot([pi pi],[pi -pi],'--b','LineWidth',1); 193 | plot([-pi pi],[pi pi],'--b','LineWidth',1); 194 | plot([-pi -pi],[pi -pi],'--b','LineWidth',1); 195 | % highlight 196 | 197 | 198 | highlight = [0]; 199 | hold on;plot(phase_wrapped(highlight+thetam+1,1),phase_wrapped(highlight+thetam+1,2),'.r','MarkerSize',16); 200 | character = cellstr(strcat([num2str(highlight')], '^\circ')); 201 | for i = 1:length(character) 202 | character{i} = ['{$' character{i} '$}']; 203 | end 204 | text(phase_wrapped(highlight+thetam+1,1)+0.2,phase_wrapped(highlight+thetam+1,2)+0.1,character,'FontSize',16,'Interpreter','Latex'); 205 | set(gca,'FontSize',14) 206 | 207 | 208 | highlight = -[-18 17 -65 -64]; 209 | hold on;plot(phase_wrapped(highlight+thetam+1,1),phase_wrapped(highlight+thetam+1,2),'.r','MarkerSize',16); 210 | character = cellstr(strcat([num2str(highlight')], '^\circ')); 211 | for i = 1:length(character) 212 | character{i} = ['{$' character{i} '$}']; 213 | end 214 | text(phase_wrapped(highlight+thetam+1,1)-0.2,phase_wrapped(highlight+thetam+1,2)-0.4,character,'FontSize',16,'Interpreter','Latex'); 215 | set(gca,'FontSize',14) 216 | % 217 | highlight = [-18 17 -65 -64]; 218 | hold on;plot(phase_wrapped(highlight+thetam+1,1),phase_wrapped(highlight+thetam+1,2),'.r','MarkerSize',16); 219 | character = cellstr(strcat([num2str(highlight')], '^\circ')); 220 | for i = 1:length(character) 221 | character{i} = ['{$' character{i} '$}']; 222 | end 223 | text(phase_wrapped(highlight+thetam+1,1)-0.35,phase_wrapped(highlight+thetam+1,2)+0.4,character,'FontSize',16,'Interpreter','Latex'); 224 | set(gca,'FontSize',14) 225 | 226 | 227 | highlight = [25 -26]; 228 | hold on;plot(phase_wrapped(highlight+thetam+1,1),phase_wrapped(highlight+thetam+1,2),'.r','MarkerSize',16); 229 | character = cellstr(strcat([num2str(highlight')], '^\circ')); 230 | for i = 1:length(character) 231 | character{i} = ['{$' character{i} '$}']; 232 | end 233 | text(phase_wrapped(highlight+thetam+1,1)+0.17,phase_wrapped(highlight+thetam+1,2)-0.1,character,'FontSize',16,'Interpreter','Latex'); 234 | set(gca,'FontSize',14) 235 | 236 | highlight = -[25 -26]; 237 | hold on;plot(phase_wrapped(highlight+thetam+1,1),phase_wrapped(highlight+thetam+1,2),'.r','MarkerSize',16); 238 | character = cellstr(strcat([num2str(highlight')], '^\circ')); 239 | for i = 1:length(character) 240 | character{i} = ['{$' character{i} '$}']; 241 | end 242 | text(phase_wrapped(highlight+thetam+1,1)-0.82,phase_wrapped(highlight+thetam+1,2)+0.15,character,'FontSize',16,'Interpreter','Latex'); 243 | set(gca,'FontSize',14) 244 | 245 | % print -dpng -r600 fig-3-2.png 246 | -------------------------------------------------------------------------------- /4 PDP for NULA/Fig_8_3_2q_esprit.m: -------------------------------------------------------------------------------- 1 | close all; 2 | clear all; 3 | clc; 4 | %% 5 | global v S_lambda; 6 | nLoops = 1; 7 | freq = 20000; % frequency (Hz) 8 | Fs = 4*freq; % sampling frequency (Hz) 9 | v = 343; 10 | lambda = v/freq; 11 | 12 | % S_integer = [0 10 21]; 13 | S_integer = [0 10 21 33 46]; 14 | % S_integer = [0 10 21 33 46 60 75 91]; 15 | 16 | d0 = 0.5; 17 | S = S_integer*lambda/2*d0; 18 | S_lambda = S/(lambda/2); % Array element positions 19 | 20 | 21 | comb_3d = combnk(1:length(S),2); 22 | d_all = abs(S(comb_3d(:,1)) - S(comb_3d(:,2))); 23 | 24 | 25 | thetam = 70; 26 | ang_range = (-thetam):(thetam); 27 | Ns = floor(2*freq*sin(thetam/180*pi)*d_all/v); 28 | Nr = length(S); %length(arrp) % number of sensors 29 | Np = 1; % number of snapshot 30 | 31 | snrdB = 0:2.5:40; 32 | % snrdB = 35; 33 | nSnr = length(snrdB); 34 | rvec1 = zeros(1,length(snrdB)); % pdp 35 | rvec2 = zeros(1,length(snrdB)); % music 36 | rvec3 = zeros(1,length(snrdB)); % MLE 37 | rvec4 = zeros(1,length(snrdB)); % 2q -order 38 | rvec5 = zeros(1,length(snrdB)); % Two-Stage 39 | rvec6 = zeros(1,length(snrdB)); % ESPRIT 40 | 41 | doa_center = 40; 42 | for i_snr = 1:length(snrdB) 43 | rng(1); 44 | snr = snrdB(i_snr); 45 | disp(snr); 46 | % snr = 20 47 | ang_range = doa_center + rand(1,100)-0.5; 48 | results1 = zeros(size(ang_range)); 49 | results2 = zeros(size(ang_range)); 50 | results3 = zeros(size(ang_range)); 51 | results4 = zeros(size(ang_range)); 52 | results5 = zeros(size(ang_range)); 53 | results6 = zeros(size(ang_range)); 54 | 55 | nLoops = 1; 56 | for i_angle = 1:length(ang_range) 57 | temp_angle = ang_range(i_angle); 58 | for iLoop = 1:nLoops 59 | theta = temp_angle/180*pi; 60 | a = exp(1j*pi*S_lambda*sin(theta))'; 61 | a = sqrt(Nr)*a/norm(a); 62 | t = (0:Np-1)'/Fs; 63 | s = exp(1j*pi*freq*t ); 64 | s = s/norm(s); 65 | y0 = a*transpose(s); 66 | y = awgn(y0, snr, 'measured'); 67 | % covariance matrix 68 | estR = zeros(Nr, Nr); 69 | for k=1:Np 70 | estR = estR + y(:, k)*y(:, k)'; 71 | end 72 | end 73 | 74 | % pdp all 75 | test_pdp = y(comb_3d(:,1),:).*transpose(y(comb_3d(:,2),:)'); 76 | p_test = atan2(imag(test_pdp),real(test_pdp))'; 77 | [P, U] = alg_get_projections(thetam, d_all, v, freq); 78 | tic; 79 | % doa = alg_projection(p_test, P, U, freq, d_all); % original PDP algorithm 80 | doa = alg_projection_constrain_mirror(p_test, P, U, freq, d_all, thetam); % adding constraints, improves performance in low SNR 81 | r1 = doa - temp_angle; 82 | results1(i_angle) = r1; 83 | 84 | % mle fine 85 | tic; 86 | output = alg_mle_fine(estR, S_lambda, thetam, 0.01); 87 | r3 = output - temp_angle; 88 | results3(i_angle) = r3; 89 | 90 | % mle 91 | % tic; 92 | % output = alg_mle(estR, S_lambda, thetam, 0.5); 93 | % time_all(4) = time_all(4)+toc; 94 | % r4 = output - temp_angle; 95 | % results4(i_angle) = r4; 96 | 97 | % 2q order 98 | comb = combnk(1:length(S),2); 99 | coe = 1; 100 | psi_ind = zeros(1,length(S)-coe); 101 | for j = 1:(length(S)-coe) 102 | psi_ind(j) = find((comb(:,1) == j)&(comb(:,2)==(j+coe))); 103 | end 104 | tic; 105 | [~, r4] = alg_2qorder(p_test, psi_ind, d_all, lambda); 106 | results4(i_angle) = r4 - temp_angle; 107 | 108 | 109 | % two-step 110 | comb_ref = [ones(1,length(S)-1); 2:length(S)]'; 111 | test = y(comb_ref(:,1),:).*transpose(y(comb_ref(:,2),:)'); 112 | p_test_oc = atan2(imag(test),real(test))'; 113 | doa = alg_offset_correction([0 p_test_oc], S_lambda); 114 | results5(i_angle) = doa - temp_angle; 115 | 116 | % EM-esprit 117 | a = exp(1j*pi*(S_integer+1)'*d0*sin(theta)); 118 | Y = awgn(a, snr, 'measured'); 119 | theta0 = temp_angle+(rand(1,1)-0.5)*2*2; 120 | DOA = alg_em_esprit(theta0, Y, s, S_integer+1, d0, 1, 20); 121 | r6 = DOA(end); 122 | results6(i_angle) = r6 - temp_angle; 123 | 124 | % music 125 | tic; 126 | output = alg_music_complex(estR, thetam, 0.01); 127 | r2 = output-temp_angle; 128 | results2(i_angle) = r2; 129 | end 130 | rvec1(i_snr) = mean((results1).^2); 131 | rvec2(i_snr) = mean((results2).^2); 132 | rvec3(i_snr) = mean((results3).^2); 133 | rvec4(i_snr) = mean((results4).^2); 134 | rvec5(i_snr) = mean((results5).^2); 135 | rvec6(i_snr) = mean((results6).^2); 136 | end 137 | 138 | 139 | % figure;plot(results1) 140 | % 141 | % figure;plot(results2) 142 | 143 | %% 144 | % save fig_8_3_data_3.mat; 145 | % load fig_8_3_data_3.mat; 146 | 147 | % save fig_8_3_data_5.mat; 148 | % load fig_8_3_data_5.mat; 149 | 150 | % save fig_8_3_data_8.mat; 151 | % load fig_8_3_data_8.mat; 152 | 153 | % time_all / length(snr) 154 | %% 155 | % CRLB 156 | result = 0; 157 | d = S/(lambda/2); 158 | M = length(d); 159 | snr = M*10.^(snrdB/10); 160 | for i = 1:M 161 | result = result + (d(i)-mean(d))^2; 162 | end 163 | result = result/M; 164 | 165 | CRB = 1/2/pi^2/result./snr; 166 | crlb = CRB*(180/pi/cos(39.5/180*pi))^2; 167 | % hold on;semilogy(snrdB, crlb); 168 | % plot_ind = 9:21; 169 | % plot_ind = 9:17; 170 | % plot_ind = 1:13; 171 | plot_ind = 1:length(snrdB); 172 | 173 | linewidth = 1.5; 174 | markersize = 6; 175 | figure; 176 | 177 | 178 | semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 179 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec2(plot_ind)),'--^c','LineWidth',linewidth,'MarkerSize',markersize); 180 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec3(plot_ind)),'-*r','LineWidth',linewidth,'MarkerSize',markersize); 181 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec4(plot_ind)),'--dr','LineWidth',linewidth,'MarkerSize',markersize); 182 | 183 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec5(plot_ind)),'-dg','LineWidth',linewidth,'MarkerSize',markersize); 184 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec6(plot_ind)),'>m-.','LineWidth',linewidth,'MarkerSize',markersize*1.2); 185 | hold on; semilogy(snrdB(plot_ind), sqrt(crlb(plot_ind)),'--k','LineWidth',2); 186 | 187 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 188 | % axis([0 60 10^-7 10^4]) 189 | xlabel('SNR [dB]'); 190 | ylabel('RMSE [Deg]'); 191 | legend('PDP','MUSIC (0.01^\circ)','MLE (0.01^\circ)','2Q-Order','Two-Step','EM-ESPRIT','CRLB'); 192 | 193 | grid on; set(gca,'FontSize',12) 194 | 195 | % set(gcf,'position',[100,100,420*1.2,400*1.2]) 196 | 197 | 198 | % print -dpng -r600 sim-4sensors.png -------------------------------------------------------------------------------- /4 PDP for NULA/Fig_8_4_nr_esprit.m: -------------------------------------------------------------------------------- 1 | close all; 2 | clear all; 3 | clc; 4 | %% 5 | global v S_lambda; 6 | rng(1); 7 | nLoops = 1; 8 | freq = 20000; % frequency (Hz) 9 | Fs = 4*freq; % sampling frequency (Hz) 10 | v = 343; 11 | lambda = v/freq; 12 | % S = [0 1 3 6 13 20 27 31 35 36]*lambda/2; 13 | 14 | 15 | % d0 = 0.2; % antenna spacing in wavelength. 16 | % S = [0 1 6]*lambda/2*d0; 17 | % % S = [0 1 6 10 23 26]*lambda/2*d0; 18 | % % S = [0 1 6 10 23 26 34 41]*lambda/2*d0; 19 | % 20 | % S_lambda = S/(lambda/2); % Array element positions 21 | % S_integer = S_lambda/d0; 22 | 23 | S_integer = [0 1 6]; 24 | % S_integer = [0 1 6 10 23]; 25 | % S_integer = [0 1 6 10 23 26 34 41]; 26 | 27 | d0 = 0.4; 28 | S = S_integer*lambda/2*d0; 29 | S_lambda = S/(lambda/2); % Array element positions 30 | 31 | 32 | comb_3d = combnk(1:length(S),2); 33 | % comb_3d = comb_3d(4:12,:); 34 | d_all = abs(S(comb_3d(:,1)) - S(comb_3d(:,2))); 35 | 36 | % comb_pdp = comb_3d([1 3 6 7 10],:); 37 | % d_pdp = abs(S(comb_pdp(:,1)) - S(comb_pdp(:,2))); 38 | 39 | % comb_pdp2 = comb_3d(7:10,:); 40 | % d_pdp2 = abs(S(comb_pdp2(:,1)) - S(comb_pdp2(:,2))); 41 | 42 | thetam = 70; 43 | ang_range = (-thetam):(thetam); 44 | Ns = floor(2*freq*sin(thetam/180*pi)*d_all/v); 45 | Nr = length(S); %length(arrp) % number of sensors 46 | Np = 1; % number of snapshot 47 | 48 | snrdB = (-10:2.5:30); 49 | % snrdB = 15; 50 | % snrdB = 60; 51 | nSnr = length(snrdB); 52 | rvec1 = zeros(1,length(snrdB)); % pdp 53 | rvec2 = zeros(1,length(snrdB)); % MUSIC 0.01 54 | rvec3 = zeros(1,length(snrdB)); % MLE 0.01 55 | rvec4 = zeros(1,length(snrdB)); % 2Q-Order or MLE 0.5 56 | rvec5 = zeros(1,length(snrdB)); % Two-Step 57 | rvec6 = zeros(1,length(snrdB)); % EM-ESPRIT 5 58 | 59 | time_all = zeros(1,5); 60 | 61 | doa_center = 40; 62 | for i_snr = 1:length(snrdB) 63 | snr = snrdB(i_snr) 64 | % ang_range = -29:0.05:31; 65 | % ang_range = ones(1,50)*30; 66 | ang_range = doa_center + rand(1000,1)-0.5; 67 | results1 = zeros(size(ang_range)); 68 | results2 = zeros(size(ang_range)); 69 | results3 = zeros(size(ang_range)); 70 | results4 = zeros(size(ang_range)); 71 | results5 = zeros(size(ang_range)); 72 | results6 = zeros(size(ang_range)); 73 | 74 | nLoops = 1; 75 | for i_angle = 1:length(ang_range) 76 | temp_angle = ang_range(i_angle); 77 | for iLoop = 1:nLoops 78 | theta = temp_angle/180*pi; 79 | a = exp(1j*pi*S_lambda*sin(theta))'; 80 | a = sqrt(Nr)*a/norm(a); 81 | t = (0:Np-1)'/Fs; 82 | s = exp(1j*pi*freq*t); 83 | s = s/norm(s); 84 | y0 = a*transpose(s); 85 | y = awgn(y0, snr, 'measured'); 86 | % y = y0; 87 | % covariance matrix 88 | estR = zeros(Nr, Nr); 89 | for k=1:Np 90 | estR = estR + y(:, k)*y(:, k)'; 91 | end 92 | end 93 | 94 | 95 | % two-step 96 | comb_ref = [ones(1,length(S)-1); 2:length(S)]'; 97 | test = y(comb_ref(:,1),:).*transpose(y(comb_ref(:,2),:)'); 98 | p_test_oc = atan2(imag(test),real(test))'; 99 | doa = alg_offset_correction([0 p_test_oc], S_lambda); 100 | results5(i_angle) = doa - temp_angle; 101 | 102 | 103 | % pdp all 104 | test = y(comb_3d(:,1),:).*transpose(y(comb_3d(:,2),:)'); 105 | p_test = atan2(imag(test),real(test))'; 106 | [P, U] = alg_get_projections(thetam, d_all, v, freq); 107 | % size(P) 108 | tic; 109 | doa = alg_projection_constrain_mirror(p_test, P, U, freq, d_all, thetam); 110 | % time_all(1) = time_all(1)+toc; 111 | r1 = doa - temp_angle; 112 | results1(i_angle) = r1; 113 | % end 114 | 115 | 116 | % pdp sub 117 | % test = y(comb_pdp(:,1),:).*transpose(y(comb_pdp(:,2),:)'); 118 | % p_test = atan2(imag(test),real(test))'; 119 | % [P, U] = alg_get_projections(thetam, d_pdp, v, freq); 120 | % % doa = alg_projection(p_test, P, U, freq, d_pdp); 121 | % doa = alg_projection_constrain_mirror(p_test, P, U, freq, d_pdp, thetam); 122 | % 123 | % r4 = doa - temp_angle; 124 | % results4(i_angle) = r4; 125 | 126 | % music 127 | tic; 128 | output = alg_music_complex(estR, thetam, 0.2); 129 | r2 = output-temp_angle; 130 | results2(i_angle) = r2; 131 | 132 | % mle fine 133 | % tic; 134 | output = alg_mle_fine(estR, S_lambda, thetam, 0.01); 135 | r3 = output - temp_angle; 136 | results3(i_angle) = r3; 137 | 138 | % mle coarse 139 | tic; 140 | output = alg_mle(estR, S_lambda, thetam, 0.5); 141 | % time_all(4) = time_all(4)+toc; 142 | r4 = output - temp_angle; 143 | results4(i_angle) = r4; 144 | 145 | 146 | % EM-esprit 147 | a = exp(1j*pi*(S_integer+1)'*d0*sin(theta)); 148 | Y = awgn(a, snr, 'measured'); 149 | % theta0 = output; 150 | theta0 = temp_angle+(rand(1,1)-0.5)*2*2; 151 | 152 | DOA = alg_em_esprit(theta0, Y, s, S_integer+1, d0, 1, 20); 153 | r6 = DOA(end); 154 | results6(i_angle) = r6 - temp_angle; 155 | 156 | 157 | 158 | 159 | end 160 | rvec1(i_snr) = mean((results1).^2); 161 | rvec2(i_snr) = mean((results2).^2); 162 | rvec3(i_snr) = mean((results3).^2); 163 | rvec4(i_snr) = mean((results4).^2); 164 | rvec5(i_snr) = mean((results5).^2); 165 | rvec6(i_snr) = mean((results6).^2); 166 | % rvec8(i_snr) = mean((results8).^2); 167 | 168 | 169 | end 170 | 171 | %% 172 | % save fig_8_4_data_3.mat; 173 | % load fig_8_4_data_3.mat; 174 | 175 | % save fig_8_4_data_5.mat; 176 | % load fig_8_4_data_5.mat; 177 | 178 | % save fig_8_4_data_8.mat; 179 | % load fig_8_4_data_8.mat; 180 | 181 | % save fig_8_4_data_3_res2.mat; 182 | % load fig_8_4_data_3_res2.mat; 183 | 184 | % save fig_8_4_data_5_res2.mat; 185 | % load fig_8_4_data_5_res2.mat; 186 | 187 | % save fig_8_4_data_8_res2.mat; 188 | % load fig_8_4_data_8_res2.mat; 189 | 190 | d = S/(lambda/2); 191 | M = length(d); 192 | SNR = M*10.^(snrdB/10); 193 | result = 0; 194 | for i = 1:M 195 | result = result + (d(i)-mean(d))^2; 196 | end 197 | result = result/M; 198 | CRB = 1/2/pi^2/result./SNR; 199 | crlb = (CRB*(180/pi/cos(39.5/180*pi))^2); 200 | 201 | plot_ind = 1:17; 202 | linewidth = 1.5; 203 | markersize = 6; 204 | 205 | figure; 206 | semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 207 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec2(plot_ind)),'--^c','LineWidth',linewidth,'MarkerSize',markersize); 208 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec3(plot_ind)),'-*r','LineWidth',linewidth,'MarkerSize',markersize); 209 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec4(plot_ind)),'--dr','LineWidth',linewidth,'MarkerSize',markersize); 210 | 211 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec5(plot_ind)),'-dg','LineWidth',linewidth,'MarkerSize',markersize); 212 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec6(plot_ind)),'>m-.','LineWidth',linewidth,'MarkerSize',markersize*1.2); 213 | hold on; semilogy(snrdB(plot_ind), sqrt(crlb(plot_ind)),'--k','LineWidth',2); 214 | 215 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 216 | % semilogy(snrdB,(rvec4),'-+c','LineWidth',linewidth,'MarkerSize',markersize); 217 | % hold on; 218 | % hold on;semilogy(snrdB,(rvec5),'-^m','LineWidth',linewidth,'MarkerSize',markersize); 219 | % % semilogy(snrdB,(crlb),'-sk','LineWidth',linewidth,'MarkerSize',markersize); 220 | % hold on; semilogy(snrdB, crlb,'--b','LineWidth',2); 221 | 222 | % axis([0 60 10^-7 10^4]) 223 | xlabel('SNR [dB]'); 224 | ylabel('RMSE [Deg]'); 225 | % legend('PDP-3d','PDP-2d','MUSIC','SD') 226 | % legend('PDP-3d','PDP-2d','MUSIC','SD','2q Small Dis','2q Large Dis') 227 | % legend('PDP-SUB','MUSIC','2Q-Order','PDP-ALL','MLE','CLRB') 228 | legend('PDP','MUSIC (0.01^\circ)','MLE (0.01^\circ)','MLE (0.5^\circ)','Two-Step','EM-ESPRIT','CRLB'); 229 | grid on; set(gca,'FontSize',12) 230 | % set(gcf,'position',[100,100,420*1.2,400*1.2]) 231 | % axis([5 30 10^-0.7 10^1.5]) 232 | 233 | % print -dpng -r600 sim-10sensors.png -------------------------------------------------------------------------------- /4 PDP for NULA/Fig_8_5_plots_ESPRIT.m: -------------------------------------------------------------------------------- 1 | close all; 2 | clear all; 3 | clc; 4 | % load data before plotting 5 | %% Fig 1 6 | load fig_8_3_data_3.mat; 7 | % close all; 8 | plot_ind = 7:17; 9 | linewidth = 1.5; 10 | markersize = 6; 11 | figure; 12 | semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 13 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec2(plot_ind)),'--^c','LineWidth',linewidth,'MarkerSize',markersize); 14 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec3(plot_ind)),'-*r','LineWidth',linewidth,'MarkerSize',markersize); 15 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec4(plot_ind)),'-+m','LineWidth',linewidth,'MarkerSize',markersize); 16 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec5(plot_ind)),'-dg','LineWidth',linewidth,'MarkerSize',markersize); 17 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec6(plot_ind)),'>m-.','LineWidth',linewidth,'MarkerSize',markersize*1.2); 18 | hold on; semilogy(snrdB(plot_ind), sqrt(crlb(plot_ind)),'--k','LineWidth',2); 19 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 20 | 21 | grid on;set(gca,'FontSize',13); 22 | xlabel('{SNR [dB]}','Interpreter','Latex'); 23 | ylabel('{RMSE [Deg]}','Interpreter','Latex'); 24 | 25 | % set(gca,'FontSize',12) 26 | 27 | % Zoomed plot **************************************** 28 | bounds = [32 33 10^-1.35 10^-1.15]; % area to be zoomed 29 | pos = [0.16 0.15 0.17 0.2]; % projected area [x, y, x_width, y_width] 30 | vertex = [2 3]; % vertex to be linked 31 | p = gca; 32 | % Calculate x,y points of zoomPlot 33 | x1 = (pos(1)-p.Position(1))/p.Position(3)*diff(p.XLim)+p.XLim(1); 34 | x2 = (pos(1)+pos(3)-p.Position(1))/p.Position(3)*diff(p.XLim)+(p.XLim(1)); 35 | y1 = 10^((pos(2)-(p.Position(2)))/(p.Position(4))*diff(log10(p.YLim))+log10(p.YLim(1))); 36 | y2 = 10^(((pos(2)+pos(4)-p.Position(2))/p.Position(4))*diff(log10(p.YLim))+log10(p.YLim(1))); 37 | 38 | 39 | rectangle('Position',[bounds(1) bounds(3) (bounds(2)-bounds(1)) (bounds(4)-bounds(3))]); 40 | hold on; 41 | offset = [0 -0.025 -0.0025 0]; 42 | if any(vertex==1) 43 | plot([bounds(1) x1], [bounds(4) y2 + offset(1)], '-.k'); % Line to vertex 1 44 | end 45 | if any(vertex==2) 46 | plot([bounds(2) x2], [bounds(4) y2 + offset(2)], '-.k'); % Line to vertex 2 47 | end 48 | if any(vertex==3) 49 | plot([bounds(2) x2], [bounds(3) y1 + offset(3)], '-.k'); % Line to vertex 4 50 | end 51 | if any(vertex==4) 52 | plot([bounds(1) x1], [bounds(3) y1 + offset(4)], '-.k'); % Line to vertex 3 53 | end 54 | % legend hide 55 | z = axes('position',pos); 56 | 57 | box on; % put box around new pair of axes 58 | semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 59 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec2(plot_ind)),'--^c','LineWidth',linewidth,'MarkerSize',markersize); 60 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec3(plot_ind)),'-*r','LineWidth',linewidth,'MarkerSize',markersize); 61 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec4(plot_ind)),'-+m','LineWidth',linewidth,'MarkerSize',markersize); 62 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec5(plot_ind)),'-dg','LineWidth',linewidth,'MarkerSize',markersize); 63 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec6(plot_ind)),'>m-.','LineWidth',linewidth,'MarkerSize',markersize*1.2); 64 | hold on;semilogy(snrdB(plot_ind),sqrt(crlb(plot_ind)),'--k','LineWidth',2); 65 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 66 | 67 | axis(bounds); 68 | 69 | set(gca,'xtick',[]) 70 | set(gca,'ytick',[]) 71 | set(gca,'xticklabel',{[]}) 72 | set(gca,'yticklabel',{[]}) 73 | 74 | % set(gcf,'position',[100,100,420*1.2,400*1.2]) 75 | % print -dpng -r600 sim1-3sensors.png 76 | 77 | legend('PDP','MUSIC ($0.01^\circ$)','MLE ($0.01^\circ$)','2Q-order','Two-step','EM-ESPRIT ($2^\circ$)','CRLB','Interpreter','Latex'); 78 | grid on; set(gca,'FontSize',13) 79 | 80 | set(gcf,'position', [100,100,350*1.5,350]) 81 | 82 | 83 | %% Fig 2 84 | load fig_8_3_data_5.mat; 85 | plot_ind = 3:13; 86 | linewidth = 1.5; 87 | markersize = 6; 88 | figure; 89 | semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 90 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec2(plot_ind)),'--^c','LineWidth',linewidth,'MarkerSize',markersize); 91 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec3(plot_ind)),'-*r','LineWidth',linewidth,'MarkerSize',markersize); 92 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec4(plot_ind)),'-m+','LineWidth',linewidth,'MarkerSize',markersize); 93 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec5(plot_ind)),'-dg','LineWidth',linewidth,'MarkerSize',markersize); 94 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec6(plot_ind)),'>m-.','LineWidth',linewidth,'MarkerSize',markersize*1.2); 95 | hold on;semilogy(snrdB(plot_ind), sqrt(crlb(plot_ind)),'--k','LineWidth',2); 96 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 97 | 98 | % axis([0 60 10^-7 10^4]) 99 | xlabel('{SNR [dB]}','Interpreter','Latex'); 100 | ylabel('{RMSE [Deg]}','Interpreter','Latex'); 101 | 102 | grid on;set(gca,'FontSize',13); 103 | % set(gcf,'position',[100,100,420*1.2,400*1.2]) 104 | 105 | % Zoomed plot **************************************** 106 | bounds = [24.5 25.5 10^-1.43 10^-1]; % area to be zoomed 107 | pos = [0.17 0.15 0.17 0.2]; % projected area [x, y, x_width, y_width] 108 | vertex = [2 3]; % vertex to be linked 109 | p = gca; 110 | % Calculate x,y points of zoomPlot 111 | x1 = (pos(1)-p.Position(1))/p.Position(3)*diff(p.XLim)+p.XLim(1); 112 | x2 = (pos(1)+pos(3)-p.Position(1))/p.Position(3)*diff(p.XLim)+(p.XLim(1)); 113 | y1 = 10^((pos(2)-(p.Position(2)))/(p.Position(4))*diff(log10(p.YLim))+log10(p.YLim(1))); 114 | y2 = 10^(((pos(2)+pos(4)-p.Position(2))/p.Position(4))*diff(log10(p.YLim))+log10(p.YLim(1))); 115 | 116 | rectangle('Position',[bounds(1) bounds(3) bounds(2)-bounds(1) bounds(4)-bounds(3)]); 117 | hold on; 118 | offset = [0 -0.025 -0.0025 0]; 119 | if any(vertex==1) 120 | plot([bounds(1) x1], [bounds(4) y2 + offset(1)], '-.k'); % Line to vertex 1 121 | end 122 | if any(vertex==2) 123 | plot([bounds(2) x2], [bounds(4) y2 + offset(2)], '-.k'); % Line to vertex 2 124 | end 125 | if any(vertex==3) 126 | plot([bounds(2) x2], [bounds(3) y1 + offset(3)], '-.k'); % Line to vertex 4 127 | end 128 | if any(vertex==4) 129 | plot([bounds(1) x1], [bounds(3) y1 + offset(4)], '-.k'); % Line to vertex 3 130 | end 131 | % legend hide 132 | z = axes('position',pos); 133 | 134 | box on % put box around new pair of axes 135 | semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 136 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec2(plot_ind)),'--^c','LineWidth',linewidth,'MarkerSize',markersize); 137 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec3(plot_ind)),'-*r','LineWidth',linewidth,'MarkerSize',markersize); 138 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec4(plot_ind)),'-m+','LineWidth',linewidth,'MarkerSize',markersize); 139 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec5(plot_ind)),'-dg','LineWidth',linewidth,'MarkerSize',markersize); 140 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec6(plot_ind)),'>m-.','LineWidth',linewidth,'MarkerSize',markersize*1.2); 141 | hold on;semilogy(snrdB(plot_ind), sqrt(crlb(plot_ind)),'--k','LineWidth',2); 142 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 143 | 144 | axis(bounds); 145 | 146 | set(gca,'xtick',[]) 147 | set(gca,'ytick',[]) 148 | set(gca,'xticklabel',{[]}) 149 | set(gca,'yticklabel',{[]}) 150 | 151 | legend('PDP','MUSIC ($0.01^\circ$)','MLE ($0.01^\circ$)','2Q-order','Two-step','EM-ESPRIT ($2^\circ$)','CRLB','Interpreter','Latex'); 152 | grid on; set(gca,'FontSize',13); 153 | 154 | set(gcf,'position', [100,100,350*1.5,350]) 155 | 156 | % print -dpng -r600 sim1-5sensors.png 157 | 158 | %% Fig 3 159 | % close all 160 | load fig_8_3_data_8.mat; 161 | plot_ind = 1:13; 162 | linewidth = 1.5; 163 | markersize = 6; 164 | figure; 165 | semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 166 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec2(plot_ind)),'--^c','LineWidth',linewidth,'MarkerSize',markersize); 167 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec3(plot_ind)),'-*r','LineWidth',linewidth,'MarkerSize',markersize); 168 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec4(plot_ind)),'-m+','LineWidth',linewidth,'MarkerSize',markersize); 169 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec5(plot_ind)),'-dg','LineWidth',linewidth,'MarkerSize',markersize); 170 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec6(plot_ind)),'>m-.','LineWidth',linewidth,'MarkerSize',markersize*1.2); 171 | hold on;semilogy(snrdB(plot_ind), sqrt(crlb(plot_ind)),'--k','LineWidth',2); 172 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 173 | 174 | % axis([0 60 10^-7 10^4]) 175 | xlabel('{SNR [dB]}','Interpreter','Latex'); 176 | ylabel('{RMSE [Deg]}','Interpreter','Latex'); 177 | 178 | grid on;set(gca,'FontSize',13); 179 | % set(gcf,'position',[100,100,420*1.2,400*1.2]) 180 | 181 | % Zoomed plot **************************************** 182 | bounds = [24.5 25.5 10^-1.8 10^-1.2]; % area to be zoomed 183 | pos = [0.17 0.15 0.17 0.2]; % projected area [x, y, x_width, y_width] 184 | vertex = [2 3]; % vertex to be linked 185 | p = gca; 186 | % Calculate x,y points of zoomPlot 187 | x1 = (pos(1)-p.Position(1))/p.Position(3)*diff(p.XLim)+p.XLim(1); 188 | x2 = (pos(1)+pos(3)-p.Position(1))/p.Position(3)*diff(p.XLim)+(p.XLim(1)); 189 | y1 = 10^((pos(2)-(p.Position(2)))/(p.Position(4))*diff(log10(p.YLim))+log10(p.YLim(1))); 190 | y2 = 10^(((pos(2)+pos(4)-p.Position(2))/p.Position(4))*diff(log10(p.YLim))+log10(p.YLim(1))); 191 | 192 | rectangle('Position',[bounds(1) bounds(3) bounds(2)-bounds(1) bounds(4)-bounds(3)]); 193 | hold on; 194 | offset = [0 -0.025 -0.0025 0]; 195 | if any(vertex==1) 196 | plot([bounds(1) x1], [bounds(4) y2 + offset(1)], '-.k'); % Line to vertex 1 197 | end 198 | if any(vertex==2) 199 | plot([bounds(2) x2], [bounds(4) y2 + offset(2)], '-.k'); % Line to vertex 2 200 | end 201 | if any(vertex==3) 202 | plot([bounds(2) x2], [bounds(3) y1 + offset(3)], '-.k'); % Line to vertex 4 203 | end 204 | if any(vertex==4) 205 | plot([bounds(1) x1], [bounds(3) y1 + offset(4)], '-.k'); % Line to vertex 3 206 | end 207 | % legend hide 208 | z = axes('position',pos); 209 | 210 | box on % put box around new pair of axes 211 | semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 212 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec2(plot_ind)),'--^c','LineWidth',linewidth,'MarkerSize',markersize); 213 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec3(plot_ind)),'-*r','LineWidth',linewidth,'MarkerSize',markersize); 214 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec4(plot_ind)),'-+m','LineWidth',linewidth,'MarkerSize',markersize); 215 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec5(plot_ind)),'-dg','LineWidth',linewidth,'MarkerSize',markersize); 216 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec6(plot_ind)),'>m-.','LineWidth',linewidth,'MarkerSize',markersize*1.2); 217 | hold on;semilogy(snrdB(plot_ind), sqrt(crlb(plot_ind)),'--k','LineWidth',2); 218 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 219 | 220 | axis(bounds); 221 | 222 | set(gca,'xtick',[]) 223 | set(gca,'ytick',[]) 224 | set(gca,'xticklabel',{[]}) 225 | set(gca,'yticklabel',{[]}) 226 | 227 | 228 | legend('PDP','MUSIC ($0.01^\circ$)','MLE ($0.01^\circ$)','2Q-order','Two-step','EM-ESPRIT ($2^\circ$)','CRLB','Interpreter','Latex'); 229 | grid on; set(gca,'FontSize',13) 230 | 231 | set(gcf,'position', [100,100,350*1.5,350]) 232 | 233 | % print -dpng -r600 sim1-8sensors.png 234 | 235 | %% Fig 4 236 | % close all 237 | % load fig_8_4_data_3_res2.mat; 238 | % axis_vec = [5 30 10^-0.8 10^1.5]; 239 | 240 | % load fig_8_4_data_5_res2.mat; 241 | % axis_vec = [5 30 10^-1.4 10^1.5]; 242 | % % 243 | load fig_8_4_data_8_res2.mat; 244 | axis_vec = [0 30 10^-1.8 10^1.8]; 245 | 246 | 247 | linewidth = 1.5; 248 | markersize = 6; 249 | figure; 250 | semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 251 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec2(plot_ind)),'--^c','LineWidth',linewidth,'MarkerSize',markersize); 252 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec3(plot_ind)),'-*r','LineWidth',linewidth,'MarkerSize',markersize); 253 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec4(plot_ind)),'--dr','LineWidth',linewidth,'MarkerSize',markersize); 254 | 255 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec5(plot_ind)),'-dg','LineWidth',linewidth,'MarkerSize',markersize); 256 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec6(plot_ind)),'>m-.','LineWidth',linewidth,'MarkerSize',markersize*1.2); 257 | hold on; semilogy(snrdB(plot_ind), sqrt(crlb(plot_ind)),'--k','LineWidth',2); 258 | 259 | hold on;semilogy(snrdB(plot_ind),sqrt(rvec1(plot_ind)),'-ob','LineWidth',linewidth,'MarkerSize',markersize); 260 | 261 | xlabel('{SNR [dB]}','Interpreter','Latex'); 262 | ylabel('{RMSE [Deg]}','Interpreter','Latex'); 263 | legend('PDP','MUSIC ($0.01^\circ$)','MLE ($0.01^\circ$)','MLE ($0.5^\circ$)','Two-step','EM-ESPRIT ($2^\circ$)','CRLB','Interpreter','Latex'); 264 | grid on; set(gca,'FontSize',13) 265 | 266 | axis(axis_vec) 267 | 268 | set(gcf,'position', [100,100,350*1.5,350]) 269 | 270 | 271 | % print -dpng -r600 sim2-3sensors.png 272 | % print -dpng -r600 sim2-5sensors.png 273 | % print -dpng -r600 sim2-8sensors.png 274 | 275 | -------------------------------------------------------------------------------- /4 PDP for NULA/SNR_CRLB.m: -------------------------------------------------------------------------------- 1 | 2 | 3 | snr = 100000; 4 | 10*log10(snr) 5 | % linear_snr = log10(snr) 6 | d = [0 1 2.25]; 7 | M = length(d); 8 | 9 | 10 | result = 0; 11 | for i = 1:M 12 | result = result + (d(i)-1/M*(sum(d(1:end))))^2; 13 | end 14 | 15 | CRB = 1/2/M/snr 16 | 17 | log10(CRB/pi*180/cos(30/180*pi)) 18 | 19 | 20 | 21 | 22 | % sin(41/180*pi)-sin(40/180*pi) 23 | % sin(1/180*pi) 24 | % cos(40/180*pi) -------------------------------------------------------------------------------- /4 PDP for NULA/alg_2qorder.m: -------------------------------------------------------------------------------- 1 | function [r1,r2] = alg_2qorder(psi, psi_ind, d, lambda) 2 | % d = d_all; 3 | % psi = p_test; 4 | ds = abs(mean(diff(d(psi_ind)))); % difference set 5 | ps = mean(wrapping(diff(psi(psi_ind)))); % small phase difference 6 | r1 = real(asin(ps*lambda/2/pi/ds)*180/pi); 7 | [a, b] = sort(d, 'descend'); 8 | a_max = a(1); 9 | b_max = b(1); 10 | a_min = a(end-1); 11 | b_min = b(end-1); 12 | % small distance 13 | a = a_min; 14 | b = b_min; 15 | phi_large = (a)/ds*ps; % large phase difference 16 | psi_large = wrapping(psi(b)); 17 | phi_cycle = [-1 0 1] + round((phi_large-psi_large)/2/pi); 18 | phi_candidate = psi_large + phi_cycle*2*pi; 19 | [~,b] = min(abs(phi_candidate - phi_large)); 20 | phi_large = phi_candidate(b); 21 | % r2 = real(asin(phi_large*lambda/2/pi/a)*180/pi); 22 | phi_large_ref = phi_large*a_max/a_min; 23 | % large distance 24 | a = a_max; 25 | b = b_max; 26 | % phi_large = (a)/ds*ps; % large phase difference 27 | phi_large = phi_large_ref; 28 | psi_large = wrapping(psi(b)); 29 | phi_cycle = [-1 0 1] + round((phi_large-psi_large)/2/pi); 30 | phi_candidate = psi_large + phi_cycle*2*pi; 31 | [~,b] = min(abs(phi_candidate - phi_large_ref)); 32 | phi_large = phi_candidate(b); 33 | r2 = real(asin(phi_large*lambda/2/pi/a)*180/pi); 34 | end -------------------------------------------------------------------------------- /4 PDP for NULA/alg_disambiguity_spatial.m: -------------------------------------------------------------------------------- 1 | function output = alg_disambiguity_spatial(p_test, freq, d_3d) 2 | global v; 3 | s12 = p_test(1)/freq/2/pi; 4 | s23 = p_test(3)/freq/2/pi; 5 | u1 = d_3d(1)/(d_3d(3)-d_3d(1)); 6 | t12 = u1*(s23-s12+[-1 0 1]/freq); 7 | [~,k] = min(abs(t12)); 8 | t12m = t12(k); 9 | k12 = round(freq*(t12m-s12)); 10 | t12_hat = s12+k12/freq; 11 | output = real(asin(t12_hat*v/d_3d(1))/pi*180); 12 | end -------------------------------------------------------------------------------- /4 PDP for NULA/alg_em_esprit.m: -------------------------------------------------------------------------------- 1 | % theta_initial: initial guess of the DOA 2 | % Y: received symbol 3 | % s: transmitted symbol 4 | % S: array position 5 | % d: antenna interval 6 | % Nsource: number of sources 7 | % K: max iterations. 8 | 9 | % [ref]: El Kassis, Carine, José Picheral, and Chafic Mokbel. "EM-ESPRIT 10 | % algorithm for direction finding with nonuniform arrays." In 2007 IEEE/SP 11 | % 14th Workshop on Statistical Signal Processing, pp. 453-457. IEEE, 2007. 12 | 13 | function output = alg_em_esprit(theta_initial, Y, s, S_int, d, Nsource, K) 14 | 15 | L = S_int; 16 | Lvec = zeros(1, L(end)); 17 | Lvec(L) = 1; 18 | Lvecp = ones(1, L(end)) - Lvec; 19 | Lp = find(Lvecp==1); 20 | E = eye(L(end)); 21 | G = E(:, L); 22 | Gp = E(:, Lp); 23 | N = length(S_int); 24 | hat_theta = zeros(1, K); 25 | hat_theta(1) = theta_initial; 26 | 27 | for k = 2:K 28 | % E-step 29 | Ap = exp(1j*pi*(Lp)'*d*sind(hat_theta(k-1))); 30 | hatX = G*Y + Gp*Ap*s; 31 | eigen_values = sort(eig(Y*Y'), 'descend'); 32 | sigma0 = min(eigen_values(1:Nsource)); 33 | % sigma = 1000; 34 | % M-step 35 | R = (hatX*hatX')/length(hatX) + Gp*Gp'*sigma0; 36 | Nv = L(end); 37 | % Eigen decomposition 38 | [Vi,Li] = eig(R); 39 | [L0,I] = sort(diag(Li),'descend'); 40 | V = Vi(:,I); 41 | Vs = V(:,1:Nsource); 42 | Vs1=Vs(1:Nv-1,:); 43 | Vs2=Vs(2:Nv,:); 44 | xsi = Vs1\Vs2; 45 | % (Vs1'*Vs1)^-1*Vs1'*Vs2 46 | % xsi=linsolve(Vs(1:Nv-1,:),Vs(2:Nv,:)); 47 | % DOA estimation 48 | doa = asind((angle(eig(xsi))/(pi*d))); 49 | if abs(doa-hat_theta(k-1)) < 1e-4 50 | hat_theta(end) = doa; 51 | break; 52 | end 53 | hat_theta(k) = doa; 54 | end 55 | 56 | output = real(hat_theta); 57 | 58 | end -------------------------------------------------------------------------------- /4 PDP for NULA/alg_get_projections.m: -------------------------------------------------------------------------------- 1 | % Get all the projection points. 2 | % hui.chen@kaust.edu.sa 3 | % I will try to make this code clean later..... 4 | function [P, U] = alg_get_projections(theta, d, v, freq) 5 | 6 | % single frequency case / >=3 receivers 7 | if(length(freq)==1) 8 | max_pro = d*sin(theta/180*pi)/v*freq*2*pi; % max phase difference, project on the figure; 9 | min_pro = d*sin(-theta/180*pi)/v*freq*2*pi; 10 | cur = wrapping(min_pro); % search projection points 11 | cur_real = min_pro; % real 12 | U = []; 13 | change = cur_real - cur; 14 | stop = []; 15 | start = []; 16 | max_pi = pi*ones(size(d)); 17 | P = []; 18 | U = []; 19 | j = 1; 20 | while(sum(cur_real < max_pro)==length(d)) 21 | start = [start; cur]; 22 | U = [U; change]; 23 | j = j+1; 24 | [~,m2] = min((max_pi-cur)./d); 25 | cur = (pi - cur(m2)).*d/d(m2) + cur; 26 | cur(m2) = cur(m2) - 2*pi; 27 | change(m2) = change(m2) + 2*pi; 28 | cur_real = cur + change; 29 | end 30 | 31 | P = zeros(size(start)); 32 | for i = 1:length(start(:,1)) 33 | P(i,:) = project_nd(d, start(i,:)); 34 | end 35 | % >=2 frequency case / 2 receivers 36 | elseif(length(freq)>=2) 37 | max_pro = d*sin(theta/180*pi)/v*freq*2*pi; % max phase difference, project on the figure; 38 | cur = zeros(size(freq)); % search projection points 39 | cur_real = zeros(size(freq)); % real 40 | change = zeros(size(freq)); 41 | stop = []; 42 | start = []; 43 | max_pi = pi*ones(size(freq)); 44 | P = []; 45 | U = []; 46 | j = 1; 47 | while(sum(cur_real < max_pro)==length(freq)) 48 | start = [start; cur]; 49 | U = [U; change]; 50 | j = j+1; 51 | [~,m2] = min(1000*(max_pi-cur)./freq); 52 | cur = (pi - cur(m2)).*freq/freq(m2) + cur; 53 | cur(m2) = cur(m2) - 2*pi; 54 | change(m2) = change(m2) + 2*pi; 55 | cur_real = cur + change; 56 | end 57 | 58 | p_boarder = [start(1:j-1,:); -start(2:j-1,:)]; 59 | U = [U(1:end,:); -U(2:end,:)]; 60 | P = zeros(size(p_boarder)); 61 | for i = 1:length(p_boarder(:,1)) 62 | P(i,:) = project_nd(freq, p_boarder(i,:)); 63 | end 64 | % hold on;plot(projections(:,1),projections(:,2),'ro') 65 | end 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /4 PDP for NULA/alg_indicator_estimation.m: -------------------------------------------------------------------------------- 1 | function [Lmin, Lv] = alg_indicator_estimation(doa, d, P, U, lambda, thetam) 2 | 3 | angle0 = doa; 4 | phi_max = 2*pi*sin(thetam/180*pi)*d/lambda; 5 | phi = 2*pi*sin(angle0/180*pi)*d/lambda; 6 | psi = wrapping(phi); 7 | rx_p = project_nd(d, psi); 8 | [m, ~] = size(P); 9 | if(m == 1) 10 | dis_p = norm(P - rx_p); 11 | Lmin_doa = sqrt(length(d))*pi; 12 | else 13 | dis_p = vecnorm(P - rx_p, 2, 2); 14 | [B,I] = sort(dis_p); 15 | for ind = 2:length(I) 16 | hat_target = psi + U(I(ind),:); 17 | if(abs(hat_target(end)) < phi_max(end)) 18 | Lmin_doa = B(ind); 19 | break; 20 | end 21 | end 22 | end 23 | 24 | Lmin_mirror = ones(size(psi))*Lmin_doa; 25 | for i = 1:length(psi) 26 | psi_temp = psi; 27 | if(psi(i)+pi < Lmin_doa/2) 28 | psi_temp(i) = psi_temp(i) + 2*pi; 29 | elseif(pi-psi(i)< Lmin_doa/2) 30 | psi_temp(i) = psi_temp(i) - 2*pi; 31 | end 32 | rx_p = project_nd(d, psi_temp); 33 | 34 | dis_p = vecnorm(P - rx_p, 2, 2); 35 | [B,I] = sort(dis_p); 36 | if(B(1) < 10e-9) 37 | Lmin_mirror(i) = B(2); 38 | else 39 | Lmin_mirror(i) = B(1); 40 | end 41 | % Lmin_doa = B(ind); 42 | end 43 | Lmin_mirror; 44 | Lmin_doa; 45 | Lmin = min([Lmin_mirror Lmin_doa]); 46 | Lv = norm(d/lambda); 47 | 48 | 49 | end -------------------------------------------------------------------------------- /4 PDP for NULA/alg_mle.m: -------------------------------------------------------------------------------- 1 | function output = alg_mle(estR, S_lambda, theta_b, resolution) 2 | % refine into 0.0001; 3 | Nr = length(S_lambda); 4 | angle_all = -theta_b:resolution:theta_b; 5 | costml = zeros(1,length(angle_all)); 6 | for ang_i = 1:length(angle_all) 7 | ttt = angle_all(ang_i); 8 | av = exp(1j*pi*S_lambda*sin(ttt/180*pi))'; 9 | av = sqrt(Nr)*av/norm(av); 10 | costml(ang_i) = av'*estR*av; 11 | end 12 | [~,b] = max(abs(costml)); 13 | % coarse = angle_all(b); 14 | % 15 | % angle_all = (-1:resolution:1) + coarse; 16 | % costml = zeros(1,length(angle_all)); 17 | % for ang_i = 1:length(angle_all) 18 | % ttt = angle_all(ang_i); 19 | % av = exp(1j*pi*S_lambda*sin(ttt/180*pi))'; 20 | % av = sqrt(Nr)*av/norm(av); 21 | % costml(ang_i) = av'*estR*av; 22 | % end 23 | % [a,b] = max(abs(costml)); 24 | % fine = angle_all(b); 25 | 26 | % angle_all = (-0.02:0.02:0.02) + fine; 27 | % costml = zeros(1,length(angle_all)); 28 | % for ang_i = 1:length(angle_all) 29 | % ttt = angle_all(ang_i); 30 | % av = exp(1j*pi*S_lambda*sin(ttt/180*pi))'; 31 | % av = sqrt(Nr)*av/norm(av); 32 | % costml(ang_i) = av'*estR*av; 33 | % end 34 | % [a,b] = max(abs(costml)); 35 | output = angle_all(b); 36 | 37 | 38 | end 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /4 PDP for NULA/alg_mle_coarse.m: -------------------------------------------------------------------------------- 1 | function output = alg_mle_coarse(estR, S_lambda, theta_b, resolution) 2 | % refine into 0.0001; 3 | Nr = length(S_lambda); 4 | angle_all = -theta_b:resolution:theta_b; 5 | costml = zeros(1,length(angle_all)); 6 | for ang_i = 1:length(angle_all) 7 | ttt = angle_all(ang_i); 8 | av = exp(1j*pi*S_lambda*sin(ttt/180*pi))'; 9 | av = sqrt(Nr)*av/norm(av); 10 | costml(ang_i) = av'*estR*av; 11 | end 12 | [~,b] = max(abs(costml)); 13 | % coarse = angle_all(b); 14 | % 15 | % angle_all = (-1:resolution:1) + coarse; 16 | % costml = zeros(1,length(angle_all)); 17 | % for ang_i = 1:length(angle_all) 18 | % ttt = angle_all(ang_i); 19 | % av = exp(1j*pi*S_lambda*sin(ttt/180*pi))'; 20 | % av = sqrt(Nr)*av/norm(av); 21 | % costml(ang_i) = av'*estR*av; 22 | % end 23 | % [a,b] = max(abs(costml)); 24 | % fine = angle_all(b); 25 | 26 | % angle_all = (-0.02:0.02:0.02) + fine; 27 | % costml = zeros(1,length(angle_all)); 28 | % for ang_i = 1:length(angle_all) 29 | % ttt = angle_all(ang_i); 30 | % av = exp(1j*pi*S_lambda*sin(ttt/180*pi))'; 31 | % av = sqrt(Nr)*av/norm(av); 32 | % costml(ang_i) = av'*estR*av; 33 | % end 34 | % [a,b] = max(abs(costml)); 35 | output = angle_all(b); 36 | 37 | 38 | end 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /4 PDP for NULA/alg_mle_fine.m: -------------------------------------------------------------------------------- 1 | function output = alg_mle_fine(estR, S_lambda, theta_b, resolution) 2 | % refine into 0.0001; 3 | Nr = length(S_lambda); 4 | angle_all = -theta_b:0.2:theta_b; 5 | costml = zeros(1,length(angle_all)); 6 | for ang_i = 1:length(angle_all) 7 | ttt = angle_all(ang_i); 8 | av = exp(1j*pi*S_lambda*sin(ttt/180*pi))'; 9 | av = sqrt(Nr)*av/norm(av); 10 | costml(ang_i) = av'*estR*av; 11 | end 12 | % [~,b] = max(abs(costml)); 13 | % coarse = angle_all(b); 14 | % 15 | % angle_all = (-1:0.2:1) + coarse; 16 | % costml = zeros(1,length(angle_all)); 17 | % for ang_i = 1:length(angle_all) 18 | % ttt = angle_all(ang_i); 19 | % av = exp(1j*pi*S_lambda*sin(ttt/180*pi))'; 20 | % av = sqrt(Nr)*av/norm(av); 21 | % costml(ang_i) = av'*estR*av; 22 | % end 23 | [a,b] = max(abs(costml)); 24 | fine = angle_all(b); 25 | 26 | angle_all = (-0.2:resolution:0.2) + fine; 27 | costml = zeros(1,length(angle_all)); 28 | for ang_i = 1:length(angle_all) 29 | ttt = angle_all(ang_i); 30 | av = exp(1j*pi*S_lambda*sin(ttt/180*pi))'; 31 | av = sqrt(Nr)*av/norm(av); 32 | costml(ang_i) = av'*estR*av; 33 | end 34 | [a,b] = max(abs(costml)); 35 | output = angle_all(b); 36 | 37 | 38 | end 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /4 PDP for NULA/alg_music_complex.m: -------------------------------------------------------------------------------- 1 | function output = alg_music_complex(estR, thetam, resolution) 2 | global S_lambda; 3 | 4 | Rxx = estR; 5 | [EV,D]=eig(Rxx);%%%% 6 | EVA=diag(D)'; 7 | [EVA,I]=sort(EVA); 8 | EVA=fliplr(EVA); 9 | EV=fliplr(EV(:,I)); 10 | derad = pi/180; % deg -> rad 11 | kelm = length(S_lambda); 12 | dint = S_lambda; 13 | iwave = 1; 14 | 15 | % ang_range0 = -thetam:resolution:thetam; 16 | % for iang = 1:length(ang_range0) 17 | % phim=derad*ang_range0(iang); 18 | % a=exp(-1j*pi*dint*sin(phim)).'; 19 | % L=iwave; 20 | % En=EV(:,L+1:kelm); 21 | % SP(iang)=(a'*a)/(a'*En*En'*a); 22 | % end 23 | % % figure;plot(ang_range0, abs(SP)) 24 | % [~, b] = max(abs(SP)); 25 | % coarse = ang_range0(b); 26 | % output = coarse; 27 | 28 | ang_range1 = (-thetam:0.2:thetam); 29 | for iang = 1:length(ang_range1) 30 | phim=derad*ang_range1(iang); 31 | a=exp(-1j*pi*dint*sin(phim)).'; 32 | L=iwave; 33 | En=EV(:,L+1:kelm); 34 | SP(iang)=(a'*a)/(a'*En*En'*a); 35 | end 36 | [~, b] = max(abs(SP)); 37 | coarse = ang_range1(b); 38 | 39 | ang_range1 = (-0.2:resolution:0.2) + coarse; 40 | for iang = 1:length(ang_range1) 41 | phim=derad*ang_range1(iang); 42 | a=exp(-1j*pi*dint*sin(phim)).'; 43 | L=iwave; 44 | En=EV(:,L+1:kelm); 45 | SP(iang)=(a'*a)/(a'*En*En'*a); 46 | end 47 | [~, b] = max(abs(SP)); 48 | fine1 = ang_range1(b); 49 | % % 50 | output = fine1; 51 | end -------------------------------------------------------------------------------- /4 PDP for NULA/alg_offset_correction.m: -------------------------------------------------------------------------------- 1 | function output = alg_offset_correction(phi, S_lambda) 2 | % phi = [0 p_test_oc]; 3 | Nr = length(S_lambda); 4 | Nbf = 90; 5 | bf_matrix = zeros(Nr, Nr); 6 | for i = 1:Nbf 7 | for j = 1:Nr 8 | angle_temp = ((i-1)/Nbf-0.5); 9 | bf_matrix(i,j) = 1/Nr*exp(-1j*pi*2*angle_temp*S_lambda(j)); 10 | end 11 | end 12 | 13 | X = bf_matrix*exp(1j*phi'); % n*n muls 14 | [m,n] = max(abs(X)); 15 | initial = asind(2*(n-1)/Nbf-1); 16 | psi = pi*S_lambda*sind(initial); 17 | eta = sum(wrapping(phi-psi))/sum(S_lambda); 18 | output = real(asind(sind(initial) + eta/pi)); 19 | 20 | end -------------------------------------------------------------------------------- /4 PDP for NULA/alg_projection.m: -------------------------------------------------------------------------------- 1 | function [output] = alg_projection(target, P, U, freq, d) 2 | global v; 3 | if(length(d)==1) 4 | ratio = norm(d.*2*pi*freq/v); 5 | %******************* normal projection algorithm ********************** 6 | rx_p = project_nd(freq/1000, target); 7 | [m, n] = size(P); 8 | dis_p = zeros(1,m); 9 | if(m == 1) 10 | dis_p = norm(P - rx_p); 11 | else 12 | for i = 1:length(P) 13 | dis_p(i) = norm(P(i,:)-rx_p); 14 | end 15 | end 16 | [~, a2] = min(dis_p); 17 | real_target = target + U(a2,:); 18 | real_proj = project_nd(freq,real_target); 19 | dt = sign(mean(real_target))*norm(real_proj - real_target)/ratio; 20 | out_est = real(asin(dt)*180/pi); 21 | output = out_est; 22 | else 23 | rx_p = project_nd(d, target); 24 | [m, n] = size(P); 25 | dis_p = zeros(1,m); 26 | if(m == 1) 27 | dis_p = norm(P - rx_p); 28 | else 29 | for i = 1:length(P) 30 | dis_p(i) = norm(P(i,:)-rx_p); 31 | end 32 | end 33 | [~, a2] = min(dis_p); 34 | dis_to_pro = d*target'/norm(d); 35 | real_target = d/norm(d)*dis_to_pro + U(a2,:) + P(a2,:); 36 | output = real(asin(real_target(1)*v/2/pi/freq/d(1))*180/pi); 37 | end 38 | if(output>70) output = 70; end 39 | if(output<-70) output = -70; end 40 | end -------------------------------------------------------------------------------- /4 PDP for NULA/alg_projection_constrain.m: -------------------------------------------------------------------------------- 1 | function [output] = alg_projection_constrain(target, P, U, freq, d, thetam) 2 | global v; 3 | if(length(d)==1) 4 | ratio = norm(d.*2*pi*freq/v); 5 | %******************* normal projection algorithm ********************** 6 | rx_p = project_nd(freq/1000, target); 7 | [m, n] = size(P); 8 | dis_p = zeros(1,m); 9 | if(m == 1) 10 | dis_p = norm(P - rx_p); 11 | else 12 | for i = 1:length(P) 13 | dis_p(i) = norm(P(i,:)-rx_p); 14 | end 15 | end 16 | [~, a2] = min(dis_p); 17 | real_target = target + U(a2,:); 18 | real_proj = project_nd(freq,real_target); 19 | dt = sign(mean(real_target))*norm(real_proj - real_target)/ratio; 20 | out_est = real(asin(dt)*180/pi); 21 | output = out_est; 22 | else 23 | phi_max = 2*pi*freq*sin(thetam/180*pi)*d/v; 24 | rx_p = project_nd(d, target); 25 | [m, n] = size(P); 26 | dis_p = zeros(1,m); 27 | if(m == 1) 28 | dis_p = norm(P - rx_p); 29 | else 30 | for i = 1:length(P) 31 | dis_p(i) = norm(P(i,:)-rx_p); 32 | end 33 | end 34 | 35 | % [~, a2] = min(dis_p); 36 | [B, I] = sort(dis_p); 37 | for ind = 1:length(I) 38 | dis_to_pro = d*target'/norm(d); 39 | real_target = d/norm(d)*dis_to_pro + U(I(ind),:) + P(I(ind),:); 40 | if(abs(real_target(1)) < phi_max(1)) 41 | break; 42 | end 43 | end 44 | output = real(asin(real_target(1)*v/2/pi/freq/d(1))*180/pi); 45 | end 46 | if(output>70) output = 70; end 47 | if(output<-70) output = -70; end 48 | end -------------------------------------------------------------------------------- /4 PDP for NULA/alg_projection_constrain_mirror.m: -------------------------------------------------------------------------------- 1 | % this function provides some disccussions on the PDP algorithm ot improve 2 | % the performance. 3 | function [output] = alg_projection_constrain_mirror(target, P, U, freq, d, thetam) 4 | global v; 5 | if(length(d)==1) 6 | ratio = norm(d.*2*pi*freq/v); 7 | %******************* normal projection algorithm ********************** 8 | rx_p = project_nd(freq/1000, target); 9 | [m, n] = size(P); 10 | dis_p = zeros(1,m); 11 | if(m == 1) 12 | dis_p = norm(P - rx_p); 13 | else 14 | for i = 1:length(P) 15 | dis_p(i) = norm(P(i,:)-rx_p); 16 | end 17 | end 18 | [~, a2] = min(dis_p); 19 | real_target = target + U(a2,:); 20 | real_proj = project_nd(freq,real_target); 21 | dt = sign(mean(real_target))*norm(real_proj - real_target)/ratio; 22 | out_est = real(asin(dt)*180/pi); 23 | output = out_est; 24 | 25 | else 26 | % original PDP 27 | phi_max = 2*pi*freq*sin(thetam/180*pi)*d/v; 28 | rx_p = project_nd(d, target); 29 | [m, n] = size(P); 30 | dis_p = zeros(1,m); 31 | if(m == 1) 32 | dis_p = norm(P - rx_p); 33 | else 34 | for i = 1:length(P) 35 | dis_p(i) = norm(P(i,:)-rx_p); 36 | end 37 | end 38 | [B, I] = sort(dis_p); 39 | % real_target = d/norm(d)*dis_to_pro + U(I(1),:) + P(I(1),:); 40 | % output = real(asin(real_target(1)*v/2/pi/freq/d(1))*180/pi); 41 | 42 | % constrained PDP within the candidate area 43 | for ind = 1:length(I) 44 | dis_to_pro = d*target'/norm(d); 45 | real_target = d/norm(d)*dis_to_pro + U(I(ind),:) + P(I(ind),:); 46 | if(abs(real_target(1)) < phi_max(1)) 47 | Lc = B(ind); 48 | break; 49 | end 50 | end 51 | output = real(asin(real_target(1)*v/2/pi/freq/d(1))*180/pi); 52 | 53 | % mirrored PDP to remove outliers 54 | Lmin_doa = 0.5; 55 | for mirror_ind = 1:length(target) 56 | mirror = 0; 57 | psi_temp = target; 58 | if(psi_temp(mirror_ind)+pi < Lmin_doa/2) 59 | psi_temp(mirror_ind) = psi_temp(mirror_ind) + 2*pi; 60 | mirror = 1; 61 | elseif(pi-psi_temp(mirror_ind)< Lmin_doa/2) 62 | psi_temp(mirror_ind) = psi_temp(mirror_ind) - 2*pi; 63 | mirror = 1; 64 | end 65 | if(mirror == 1) 66 | rx_p = project_nd(d, psi_temp); 67 | dis_p = vecnorm(P - rx_p, 2, 2); 68 | [B,I] = sort(dis_p); 69 | if(B(1) < Lc) 70 | Lc = B(1); 71 | for ind = 1:length(I) 72 | dis_to_pro = d*psi_temp'/norm(d); 73 | real_target = d/norm(d)*dis_to_pro + U(I(ind),:) + P(I(ind),:); 74 | if(abs(real_target(1)) < phi_max(1)) 75 | Lc = B(ind); 76 | break; 77 | end 78 | end 79 | output = real(asin(real_target(1)*v/2/pi/freq/d(1))*180/pi); 80 | end 81 | end 82 | end 83 | 84 | 85 | end 86 | 87 | if(output>70) output = 70; end 88 | if(output<-70) output = -70; end 89 | end -------------------------------------------------------------------------------- /4 PDP for NULA/chen_WCL2021-0665_fig2-2.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Creator: (MATLAB, The Mathworks, Inc. Version 9.10.0.1602886 \(R2021a\). Operating System: Linux) 3 | %%Title: (/home/chenh0c/Chen Hui/03 Project/# 2019 Project/# PDP Single Freq/Github v9/chen_WCL2021-0665_fig2-2.eps) 4 | %%CreationDate: 2021-08-02T18:11:22 5 | %%Pages: (atend) 6 | %%BoundingBox: 0 0 386 360 7 | %%LanguageLevel: 3 8 | %%EndComments 9 | %%BeginProlog 10 | %%BeginResource: procset (Apache XML Graphics Std ProcSet) 1.2 0 11 | %%Version: 1.2 0 12 | %%Copyright: (Copyright 2001-2003,2010 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) 13 | /bd{bind def}bind def 14 | /ld{load def}bd 15 | /GR/grestore ld 16 | /GS/gsave ld 17 | /RM/rmoveto ld 18 | /C/curveto ld 19 | /t/show ld 20 | /L/lineto ld 21 | /ML/setmiterlimit ld 22 | /CT/concat ld 23 | /f/fill ld 24 | /N/newpath ld 25 | /S/stroke ld 26 | /CC/setcmykcolor ld 27 | /A/ashow ld 28 | /cp/closepath ld 29 | /RC/setrgbcolor ld 30 | /LJ/setlinejoin ld 31 | /GC/setgray ld 32 | /LW/setlinewidth ld 33 | /M/moveto ld 34 | /re {4 2 roll M 35 | 1 index 0 rlineto 36 | 0 exch rlineto 37 | neg 0 rlineto 38 | cp } bd 39 | /_ctm matrix def 40 | /_tm matrix def 41 | /BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd 42 | /ET { _ctm setmatrix } bd 43 | /iTm { _ctm setmatrix _tm concat } bd 44 | /Tm { _tm astore pop iTm 0 0 moveto } bd 45 | /ux 0.0 def 46 | /uy 0.0 def 47 | /F { 48 | /Tp exch def 49 | /Tf exch def 50 | Tf findfont Tp scalefont setfont 51 | /cf Tf def /cs Tp def 52 | } bd 53 | /ULS {currentpoint /uy exch def /ux exch def} bd 54 | /ULE { 55 | /Tcx currentpoint pop def 56 | gsave 57 | newpath 58 | cf findfont cs scalefont dup 59 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 60 | /UnderlinePosition get Ts mul /To exch def 61 | /UnderlineThickness get Ts mul /Tt exch def 62 | ux uy To add moveto Tcx uy To add lineto 63 | Tt setlinewidth stroke 64 | grestore 65 | } bd 66 | /OLE { 67 | /Tcx currentpoint pop def 68 | gsave 69 | newpath 70 | cf findfont cs scalefont dup 71 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 72 | /UnderlinePosition get Ts mul /To exch def 73 | /UnderlineThickness get Ts mul /Tt exch def 74 | ux uy To add cs add moveto Tcx uy To add cs add lineto 75 | Tt setlinewidth stroke 76 | grestore 77 | } bd 78 | /SOE { 79 | /Tcx currentpoint pop def 80 | gsave 81 | newpath 82 | cf findfont cs scalefont dup 83 | /FontMatrix get 0 get /Ts exch def /FontInfo get dup 84 | /UnderlinePosition get Ts mul /To exch def 85 | /UnderlineThickness get Ts mul /Tt exch def 86 | ux uy To add cs 10 mul 26 idiv add moveto Tcx uy To add cs 10 mul 26 idiv add lineto 87 | Tt setlinewidth stroke 88 | grestore 89 | } bd 90 | /QT { 91 | /Y22 exch store 92 | /X22 exch store 93 | /Y21 exch store 94 | /X21 exch store 95 | currentpoint 96 | /Y21 load 2 mul add 3 div exch 97 | /X21 load 2 mul add 3 div exch 98 | /X21 load 2 mul /X22 load add 3 div 99 | /Y21 load 2 mul /Y22 load add 3 div 100 | /X22 load /Y22 load curveto 101 | } bd 102 | /SSPD { 103 | dup length /d exch dict def 104 | { 105 | /v exch def 106 | /k exch def 107 | currentpagedevice k known { 108 | /cpdv currentpagedevice k get def 109 | v cpdv ne { 110 | /upd false def 111 | /nullv v type /nulltype eq def 112 | /nullcpdv cpdv type /nulltype eq def 113 | nullv nullcpdv or 114 | { 115 | /upd true def 116 | } { 117 | /sametype v type cpdv type eq def 118 | sametype { 119 | v type /arraytype eq { 120 | /vlen v length def 121 | /cpdvlen cpdv length def 122 | vlen cpdvlen eq { 123 | 0 1 vlen 1 sub { 124 | /i exch def 125 | /obj v i get def 126 | /cpdobj cpdv i get def 127 | obj cpdobj ne { 128 | /upd true def 129 | exit 130 | } if 131 | } for 132 | } { 133 | /upd true def 134 | } ifelse 135 | } { 136 | v type /dicttype eq { 137 | v { 138 | /dv exch def 139 | /dk exch def 140 | /cpddv cpdv dk get def 141 | dv cpddv ne { 142 | /upd true def 143 | exit 144 | } if 145 | } forall 146 | } { 147 | /upd true def 148 | } ifelse 149 | } ifelse 150 | } if 151 | } ifelse 152 | upd true eq { 153 | d k v put 154 | } if 155 | } if 156 | } if 157 | } forall 158 | d length 0 gt { 159 | d setpagedevice 160 | } if 161 | } bd 162 | /RE { % /NewFontName [NewEncodingArray] /FontName RE - 163 | findfont dup length dict begin 164 | { 165 | 1 index /FID ne 166 | {def} {pop pop} ifelse 167 | } forall 168 | /Encoding exch def 169 | /FontName 1 index def 170 | currentdict definefont pop 171 | end 172 | } bind def 173 | %%EndResource 174 | %%BeginResource: procset (Apache XML Graphics EPS ProcSet) 1.0 0 175 | %%Version: 1.0 0 176 | %%Copyright: (Copyright 2002-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0) 177 | /BeginEPSF { %def 178 | /b4_Inc_state save def % Save state for cleanup 179 | /dict_count countdictstack def % Count objects on dict stack 180 | /op_count count 1 sub def % Count objects on operand stack 181 | userdict begin % Push userdict on dict stack 182 | /showpage { } def % Redefine showpage, { } = null proc 183 | 0 setgray 0 setlinecap % Prepare graphics state 184 | 1 setlinewidth 0 setlinejoin 185 | 10 setmiterlimit [ ] 0 setdash newpath 186 | /languagelevel where % If level not equal to 1 then 187 | {pop languagelevel % set strokeadjust and 188 | 1 ne % overprint to their defaults. 189 | {false setstrokeadjust false setoverprint 190 | } if 191 | } if 192 | } bd 193 | /EndEPSF { %def 194 | count op_count sub {pop} repeat % Clean up stacks 195 | countdictstack dict_count sub {end} repeat 196 | b4_Inc_state restore 197 | } bd 198 | %%EndResource 199 | %FOPBeginFontDict 200 | %%IncludeResource: font Courier-Oblique 201 | %%IncludeResource: font Courier-BoldOblique 202 | %%IncludeResource: font Courier-Bold 203 | %%IncludeResource: font ZapfDingbats 204 | %%IncludeResource: font Symbol 205 | %%IncludeResource: font Helvetica 206 | %%IncludeResource: font Helvetica-Oblique 207 | %%IncludeResource: font Helvetica-Bold 208 | %%IncludeResource: font Helvetica-BoldOblique 209 | %%IncludeResource: font Times-Roman 210 | %%IncludeResource: font Times-Italic 211 | %%IncludeResource: font Times-Bold 212 | %%IncludeResource: font Times-BoldItalic 213 | %%IncludeResource: font Courier 214 | %FOPEndFontDict 215 | %%BeginResource: encoding WinAnsiEncoding 216 | /WinAnsiEncoding [ 217 | /.notdef /.notdef /.notdef /.notdef /.notdef 218 | /.notdef /.notdef /.notdef /.notdef /.notdef 219 | /.notdef /.notdef /.notdef /.notdef /.notdef 220 | /.notdef /.notdef /.notdef /.notdef /.notdef 221 | /.notdef /.notdef /.notdef /.notdef /.notdef 222 | /.notdef /.notdef /.notdef /.notdef /.notdef 223 | /.notdef /.notdef /space /exclam /quotedbl 224 | /numbersign /dollar /percent /ampersand /quotesingle 225 | /parenleft /parenright /asterisk /plus /comma 226 | /hyphen /period /slash /zero /one 227 | /two /three /four /five /six 228 | /seven /eight /nine /colon /semicolon 229 | /less /equal /greater /question /at 230 | /A /B /C /D /E 231 | /F /G /H /I /J 232 | /K /L /M /N /O 233 | /P /Q /R /S /T 234 | /U /V /W /X /Y 235 | /Z /bracketleft /backslash /bracketright /asciicircum 236 | /underscore /quoteleft /a /b /c 237 | /d /e /f /g /h 238 | /i /j /k /l /m 239 | /n /o /p /q /r 240 | /s /t /u /v /w 241 | /x /y /z /braceleft /bar 242 | /braceright /asciitilde /bullet /Euro /bullet 243 | /quotesinglbase /florin /quotedblbase /ellipsis /dagger 244 | /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft 245 | /OE /bullet /Zcaron /bullet /bullet 246 | /quoteleft /quoteright /quotedblleft /quotedblright /bullet 247 | /endash /emdash /asciitilde /trademark /scaron 248 | /guilsinglright /oe /bullet /zcaron /Ydieresis 249 | /space /exclamdown /cent /sterling /currency 250 | /yen /brokenbar /section /dieresis /copyright 251 | /ordfeminine /guillemotleft /logicalnot /sfthyphen /registered 252 | /macron /degree /plusminus /twosuperior /threesuperior 253 | /acute /mu /paragraph /middot /cedilla 254 | /onesuperior /ordmasculine /guillemotright /onequarter /onehalf 255 | /threequarters /questiondown /Agrave /Aacute /Acircumflex 256 | /Atilde /Adieresis /Aring /AE /Ccedilla 257 | /Egrave /Eacute /Ecircumflex /Edieresis /Igrave 258 | /Iacute /Icircumflex /Idieresis /Eth /Ntilde 259 | /Ograve /Oacute /Ocircumflex /Otilde /Odieresis 260 | /multiply /Oslash /Ugrave /Uacute /Ucircumflex 261 | /Udieresis /Yacute /Thorn /germandbls /agrave 262 | /aacute /acircumflex /atilde /adieresis /aring 263 | /ae /ccedilla /egrave /eacute /ecircumflex 264 | /edieresis /igrave /iacute /icircumflex /idieresis 265 | /eth /ntilde /ograve /oacute /ocircumflex 266 | /otilde /odieresis /divide /oslash /ugrave 267 | /uacute /ucircumflex /udieresis /yacute /thorn 268 | /ydieresis 269 | ] def 270 | %%EndResource 271 | %FOPBeginFontReencode 272 | /Courier-Oblique findfont 273 | dup length dict begin 274 | {1 index /FID ne {def} {pop pop} ifelse} forall 275 | /Encoding WinAnsiEncoding def 276 | currentdict 277 | end 278 | /Courier-Oblique exch definefont pop 279 | /Courier-BoldOblique findfont 280 | dup length dict begin 281 | {1 index /FID ne {def} {pop pop} ifelse} forall 282 | /Encoding WinAnsiEncoding def 283 | currentdict 284 | end 285 | /Courier-BoldOblique exch definefont pop 286 | /Courier-Bold findfont 287 | dup length dict begin 288 | {1 index /FID ne {def} {pop pop} ifelse} forall 289 | /Encoding WinAnsiEncoding def 290 | currentdict 291 | end 292 | /Courier-Bold exch definefont pop 293 | /Helvetica findfont 294 | dup length dict begin 295 | {1 index /FID ne {def} {pop pop} ifelse} forall 296 | /Encoding WinAnsiEncoding def 297 | currentdict 298 | end 299 | /Helvetica exch definefont pop 300 | /Helvetica-Oblique findfont 301 | dup length dict begin 302 | {1 index /FID ne {def} {pop pop} ifelse} forall 303 | /Encoding WinAnsiEncoding def 304 | currentdict 305 | end 306 | /Helvetica-Oblique exch definefont pop 307 | /Helvetica-Bold findfont 308 | dup length dict begin 309 | {1 index /FID ne {def} {pop pop} ifelse} forall 310 | /Encoding WinAnsiEncoding def 311 | currentdict 312 | end 313 | /Helvetica-Bold exch definefont pop 314 | /Helvetica-BoldOblique findfont 315 | dup length dict begin 316 | {1 index /FID ne {def} {pop pop} ifelse} forall 317 | /Encoding WinAnsiEncoding def 318 | currentdict 319 | end 320 | /Helvetica-BoldOblique exch definefont pop 321 | /Times-Roman findfont 322 | dup length dict begin 323 | {1 index /FID ne {def} {pop pop} ifelse} forall 324 | /Encoding WinAnsiEncoding def 325 | currentdict 326 | end 327 | /Times-Roman exch definefont pop 328 | /Times-Italic findfont 329 | dup length dict begin 330 | {1 index /FID ne {def} {pop pop} ifelse} forall 331 | /Encoding WinAnsiEncoding def 332 | currentdict 333 | end 334 | /Times-Italic exch definefont pop 335 | /Times-Bold findfont 336 | dup length dict begin 337 | {1 index /FID ne {def} {pop pop} ifelse} forall 338 | /Encoding WinAnsiEncoding def 339 | currentdict 340 | end 341 | /Times-Bold exch definefont pop 342 | /Times-BoldItalic findfont 343 | dup length dict begin 344 | {1 index /FID ne {def} {pop pop} ifelse} forall 345 | /Encoding WinAnsiEncoding def 346 | currentdict 347 | end 348 | /Times-BoldItalic exch definefont pop 349 | /Courier findfont 350 | dup length dict begin 351 | {1 index /FID ne {def} {pop pop} ifelse} forall 352 | /Encoding WinAnsiEncoding def 353 | currentdict 354 | end 355 | /Courier exch definefont pop 356 | %FOPEndFontReencode 357 | %%EndProlog 358 | %%Page: 1 1 359 | %%PageBoundingBox: 0 0 386 360 360 | %%BeginPageSetup 361 | [1 0 0 -1 0 360] CT 362 | %%EndPageSetup 363 | GS 364 | [0.75 0 0 0.75 0 0] CT 365 | 1 GC 366 | N 367 | 0 0 514 480 re 368 | f 369 | GR 370 | GS 371 | [0.75 0 0 0.75 0 0] CT 372 | 1 GC 373 | N 374 | 0 0 514 480 re 375 | f 376 | GR 377 | GS 378 | [0.75 0 0 0.75 0 0] CT 379 | 1 GC 380 | N 381 | 67 425 M 382 | 465 425 L 383 | 465 36 L 384 | 67 36 L 385 | cp 386 | f 387 | GR 388 | GS 389 | [0.75 0 0 0.75 0 0] CT 390 | 0.149 GC 391 | 2 setlinecap 392 | 1 LJ 393 | 0.667 LW 394 | N 395 | 67 425 M 396 | 465 425 L 397 | S 398 | GR 399 | GS 400 | [0.75 0 0 0.75 0 0] CT 401 | 0.149 GC 402 | 2 setlinecap 403 | 1 LJ 404 | 0.667 LW 405 | N 406 | 67 36 M 407 | 465 36 L 408 | S 409 | GR 410 | GS 411 | [0.75 0 0 0.75 0 0] CT 412 | 0.149 GC 413 | 2 setlinecap 414 | 1 LJ 415 | 0.667 LW 416 | N 417 | 67 425 M 418 | 67 421.02 L 419 | S 420 | GR 421 | GS 422 | [0.75 0 0 0.75 0 0] CT 423 | 0.149 GC 424 | 2 setlinecap 425 | 1 LJ 426 | 0.667 LW 427 | N 428 | 166.5 425 M 429 | 166.5 421.02 L 430 | S 431 | GR 432 | GS 433 | [0.75 0 0 0.75 0 0] CT 434 | 0.149 GC 435 | 2 setlinecap 436 | 1 LJ 437 | 0.667 LW 438 | N 439 | 266 425 M 440 | 266 421.02 L 441 | S 442 | GR 443 | GS 444 | [0.75 0 0 0.75 0 0] CT 445 | 0.149 GC 446 | 2 setlinecap 447 | 1 LJ 448 | 0.667 LW 449 | N 450 | 365.5 425 M 451 | 365.5 421.02 L 452 | S 453 | GR 454 | GS 455 | [0.75 0 0 0.75 0 0] CT 456 | 0.149 GC 457 | 2 setlinecap 458 | 1 LJ 459 | 0.667 LW 460 | N 461 | 465 425 M 462 | 465 421.02 L 463 | S 464 | GR 465 | GS 466 | [0.75 0 0 0.75 0 0] CT 467 | 0.149 GC 468 | 2 setlinecap 469 | 1 LJ 470 | 0.667 LW 471 | N 472 | 67 36 M 473 | 67 39.98 L 474 | S 475 | GR 476 | GS 477 | [0.75 0 0 0.75 0 0] CT 478 | 0.149 GC 479 | 2 setlinecap 480 | 1 LJ 481 | 0.667 LW 482 | N 483 | 166.5 36 M 484 | 166.5 39.98 L 485 | S 486 | GR 487 | GS 488 | [0.75 0 0 0.75 0 0] CT 489 | 0.149 GC 490 | 2 setlinecap 491 | 1 LJ 492 | 0.667 LW 493 | N 494 | 266 36 M 495 | 266 39.98 L 496 | S 497 | GR 498 | GS 499 | [0.75 0 0 0.75 0 0] CT 500 | 0.149 GC 501 | 2 setlinecap 502 | 1 LJ 503 | 0.667 LW 504 | N 505 | 365.5 36 M 506 | 365.5 39.98 L 507 | S 508 | GR 509 | GS 510 | [0.75 0 0 0.75 0 0] CT 511 | 0.149 GC 512 | 2 setlinecap 513 | 1 LJ 514 | 0.667 LW 515 | N 516 | 465 36 M 517 | 465 39.98 L 518 | S 519 | GR 520 | GS 521 | [0.75 0 0 0.75 50.25 323.55] CT 522 | 0.149 GC 523 | /Helvetica 18.667 F 524 | GS 525 | [1 0 0 1 0 0] CT 526 | -9.5 18 moveto 527 | 1 -1 scale 528 | (-4) t 529 | GR 530 | GR 531 | GS 532 | [0.75 0 0 0.75 124.875 323.55] CT 533 | 0.149 GC 534 | /Helvetica 18.667 F 535 | GS 536 | [1 0 0 1 0 0] CT 537 | -9.5 18 moveto 538 | 1 -1 scale 539 | (-2) t 540 | GR 541 | GR 542 | GS 543 | [0.75 0 0 0.75 199.5 323.55] CT 544 | 0.149 GC 545 | /Helvetica 18.667 F 546 | GS 547 | [1 0 0 1 0 0] CT 548 | -6 18 moveto 549 | 1 -1 scale 550 | (0) t 551 | GR 552 | GR 553 | GS 554 | [0.75 0 0 0.75 274.125 323.55] CT 555 | 0.149 GC 556 | /Helvetica 18.667 F 557 | GS 558 | [1 0 0 1 0 0] CT 559 | -6 18 moveto 560 | 1 -1 scale 561 | (2) t 562 | GR 563 | GR 564 | GS 565 | [0.75 0 0 0.75 348.75 323.55] CT 566 | 0.149 GC 567 | /Helvetica 18.667 F 568 | GS 569 | [1 0 0 1 0 0] CT 570 | -6 18 moveto 571 | 1 -1 scale 572 | (4) t 573 | GR 574 | GR 575 | GS 576 | [0.75 0 0 0.75 199.50014 341.51999] CT 577 | 0.149 GC 578 | N 579 | -46.405 21.342 M 580 | -45.42 17.435 L 581 | -46.327 17.435 -47.186 17.092 QT 582 | -48.045 16.748 -48.569 16.084 QT 583 | -49.092 15.42 -49.092 14.451 QT 584 | -49.092 13.92 -48.897 13.217 QT 585 | -48.702 12.514 -48.483 11.935 QT 586 | -48.264 11.357 -47.905 10.404 QT 587 | -47.623 9.623 -47.623 9.139 QT 588 | -47.623 8.514 -48.077 8.514 QT 589 | -48.92 8.514 -49.452 9.365 QT 590 | -49.983 10.217 -50.248 11.279 QT 591 | -50.28 11.42 -50.42 11.42 QT 592 | -50.67 11.42 L 593 | -50.842 11.42 -50.842 11.217 QT 594 | -50.842 11.154 L 595 | -50.498 9.904 -49.803 8.935 QT 596 | -49.108 7.967 -48.045 7.967 QT 597 | -47.295 7.967 -46.78 8.459 QT 598 | -46.264 8.951 -46.264 9.717 QT 599 | -46.264 10.107 -46.436 10.529 QT 600 | -46.795 11.482 -47.014 12.045 QT 601 | -47.233 12.607 -47.428 13.326 QT 602 | -47.623 14.045 -47.623 14.607 QT 603 | -47.623 15.623 -46.983 16.185 QT 604 | -46.342 16.748 -45.295 16.889 QT 605 | -41.764 2.795 L 606 | -41.717 2.67 -41.608 2.67 QT 607 | -41.342 2.67 L 608 | -41.186 2.67 -41.186 2.889 QT 609 | -44.686 16.935 L 610 | -44.452 16.935 L 611 | -43.577 16.935 -42.592 16.412 QT 612 | -41.608 15.889 -40.803 15.037 QT 613 | -39.998 14.185 -39.53 13.201 QT 614 | -39.061 12.217 -39.061 11.373 QT 615 | -39.061 10.732 -39.264 10.381 QT 616 | -39.467 10.029 -39.795 9.646 QT 617 | -40.123 9.264 -40.123 9.029 QT 618 | -40.123 8.623 -39.788 8.287 QT 619 | -39.452 7.951 -39.045 7.951 QT 620 | -38.53 7.951 -38.311 8.412 QT 621 | -38.092 8.873 -38.092 9.451 QT 622 | -38.092 10.076 -38.217 10.685 QT 623 | -38.342 11.295 -38.561 12.139 QT 624 | -39.045 14.06 -40.561 15.592 QT 625 | -41.092 16.107 -41.725 16.545 QT 626 | -42.358 16.982 -43.053 17.232 QT 627 | -43.748 17.482 -44.467 17.482 QT 628 | -44.811 17.482 L 629 | -45.795 21.435 L 630 | -45.842 21.56 -45.967 21.56 QT 631 | -46.217 21.56 L 632 | -46.295 21.56 -46.35 21.49 QT 633 | -46.405 21.42 -46.405 21.342 QT 634 | cp 635 | f 636 | GR 637 | GS 638 | [0.75 0 0 0.75 199.50014 341.51999] CT 639 | 0.149 GC 640 | N 641 | -36.733 20.328 M 642 | -36.733 19.828 L 643 | -34.983 19.828 -34.983 19.39 QT 644 | -34.983 12.047 L 645 | -35.701 12.39 -36.811 12.39 QT 646 | -36.811 11.906 L 647 | -35.092 11.906 -34.217 11 QT 648 | -34.029 11 L 649 | -33.983 11 -33.936 11.039 QT 650 | -33.889 11.078 -33.889 11.125 QT 651 | -33.889 19.39 L 652 | -33.889 19.828 -32.139 19.828 QT 653 | -32.139 20.328 L 654 | -36.733 20.328 L 655 | cp 656 | f 657 | GR 658 | GS 659 | [0.75 0 0 0.75 199.50014 341.51999] CT 660 | 0.149 GC 661 | N 662 | -23.301 22.451 M 663 | -24.472 21.529 -25.316 20.334 QT 664 | -26.16 19.139 -26.699 17.787 QT 665 | -27.238 16.435 -27.504 14.959 QT 666 | -27.769 13.482 -27.769 11.998 QT 667 | -27.769 10.498 -27.504 9.021 QT 668 | -27.238 7.545 -26.691 6.178 QT 669 | -26.144 4.81 -25.293 3.623 QT 670 | -24.441 2.435 -23.301 1.545 QT 671 | -23.301 1.498 -23.207 1.498 QT 672 | -23.004 1.498 L 673 | -22.941 1.498 -22.894 1.553 QT 674 | -22.847 1.607 -22.847 1.685 QT 675 | -22.847 1.779 -22.879 1.81 QT 676 | -23.91 2.826 -24.59 3.974 QT 677 | -25.269 5.123 -25.683 6.42 QT 678 | -26.097 7.717 -26.285 9.107 QT 679 | -26.472 10.498 -26.472 11.998 QT 680 | -26.472 18.67 -22.91 22.139 QT 681 | -22.847 22.201 -22.847 22.31 QT 682 | -22.847 22.357 -22.902 22.428 QT 683 | -22.957 22.498 -23.004 22.498 QT 684 | -23.207 22.498 L 685 | -23.301 22.498 -23.301 22.451 QT 686 | cp 687 | f 688 | GR 689 | GS 690 | [0.75 0 0 0.75 199.50014 341.51999] CT 691 | 0.149 GC 692 | N 693 | -18.44 17.482 M 694 | -19.393 17.482 -19.972 16.787 QT 695 | -20.55 16.092 -20.768 15.107 QT 696 | -20.987 14.123 -20.987 13.154 QT 697 | -20.987 13.139 L 698 | -20.987 12.092 -20.792 10.967 QT 699 | -20.597 9.842 -20.214 8.717 QT 700 | -19.831 7.592 -19.393 6.701 QT 701 | -19.081 6.092 -18.597 5.334 QT 702 | -18.112 4.576 -17.511 3.912 QT 703 | -16.909 3.248 -16.214 2.842 QT 704 | -15.518 2.435 -14.815 2.435 QT 705 | -14.8 2.435 L 706 | -14.034 2.435 -13.526 2.857 QT 707 | -13.018 3.279 -12.737 3.935 QT 708 | -12.456 4.592 -12.347 5.342 QT 709 | -12.237 6.092 -12.237 6.764 QT 710 | -12.237 8.357 -12.667 10.014 QT 711 | -13.097 11.67 -13.847 13.217 QT 712 | -14.143 13.795 -14.651 14.592 QT 713 | -15.159 15.389 -15.729 16.014 QT 714 | -16.3 16.639 -17.003 17.06 QT 715 | -17.706 17.482 -18.425 17.482 QT 716 | -18.44 17.482 L 717 | cp 718 | -18.409 16.935 M 719 | -17.706 16.935 -17.065 16.185 QT 720 | -16.425 15.435 -15.94 14.381 QT 721 | -15.456 13.326 -15.097 12.209 QT 722 | -14.737 11.092 -14.565 10.31 QT 723 | -18.847 10.31 L 724 | -19.175 11.639 -19.362 12.599 QT 725 | -19.55 13.56 -19.55 14.482 QT 726 | -19.55 16.935 -18.409 16.935 QT 727 | cp 728 | -18.69 9.576 M 729 | -14.378 9.576 L 730 | -14.143 8.654 -14.011 8.037 QT 731 | -13.878 7.42 -13.792 6.732 QT 732 | -13.706 6.045 -13.706 5.451 QT 733 | -13.706 2.982 -14.815 2.982 QT 734 | -16.143 2.982 -17.112 5.131 QT 735 | -18.081 7.279 -18.69 9.576 QT 736 | cp 737 | f 738 | GR 739 | GS 740 | [0.75 0 0 0.75 199.50014 341.51999] CT 741 | 0.149 GC 742 | N 743 | -10.262 22.498 M 744 | -10.449 22.498 -10.449 22.31 QT 745 | -10.449 22.217 -10.403 22.185 QT 746 | -6.809 18.67 -6.809 11.998 QT 747 | -6.809 5.326 -10.356 1.857 QT 748 | -10.449 1.81 -10.449 1.685 QT 749 | -10.449 1.607 -10.387 1.553 QT 750 | -10.324 1.498 -10.262 1.498 QT 751 | -10.059 1.498 L 752 | -9.996 1.498 -9.965 1.545 QT 753 | -8.449 2.732 -7.449 4.435 QT 754 | -6.449 6.139 -5.981 8.06 QT 755 | -5.512 9.982 -5.512 11.998 QT 756 | -5.512 13.482 -5.762 14.928 QT 757 | -6.012 16.373 -6.559 17.771 QT 758 | -7.106 19.17 -7.949 20.349 QT 759 | -8.793 21.529 -9.965 22.451 QT 760 | -9.996 22.498 -10.059 22.498 QT 761 | -10.262 22.498 L 762 | cp 763 | f 764 | GR 765 | GS 766 | [0.75 0 0 0.75 199.50014 341.51999] CT 767 | 0.149 GC 768 | N 769 | 5.693 22.498 M 770 | 5.693 1.498 L 771 | 8.568 1.498 L 772 | 8.568 2.342 L 773 | 6.536 2.342 L 774 | 6.536 21.654 L 775 | 8.568 21.654 L 776 | 8.568 22.498 L 777 | 5.693 22.498 L 778 | cp 779 | f 780 | GR 781 | GS 782 | [0.75 0 0 0.75 199.50014 341.51999] CT 783 | 0.149 GC 784 | N 785 | 9.615 17.248 M 786 | 9.615 16.514 L 787 | 11.771 16.514 11.771 15.842 QT 788 | 11.771 4.31 L 789 | 11.771 3.639 9.615 3.639 QT 790 | 9.615 2.904 L 791 | 16.209 2.904 L 792 | 17.381 2.904 18.678 3.326 QT 793 | 19.975 3.748 20.85 4.623 QT 794 | 21.725 5.498 21.725 6.701 QT 795 | 21.725 7.592 21.193 8.279 QT 796 | 20.662 8.967 19.834 9.435 QT 797 | 19.006 9.904 18.146 10.107 QT 798 | 19.1 10.435 19.803 11.154 QT 799 | 20.506 11.873 20.646 12.795 QT 800 | 20.943 14.67 L 801 | 21.162 15.92 21.381 16.545 QT 802 | 21.6 17.17 22.381 17.17 QT 803 | 23.037 17.17 23.357 16.56 QT 804 | 23.678 15.951 23.678 15.232 QT 805 | 23.678 15.154 23.748 15.099 QT 806 | 23.818 15.045 23.881 15.045 QT 807 | 24.084 15.045 L 808 | 24.287 15.045 24.287 15.326 QT 809 | 24.287 15.889 24.06 16.443 QT 810 | 23.834 16.998 23.404 17.357 QT 811 | 22.975 17.717 22.396 17.717 QT 812 | 20.881 17.717 19.787 16.959 QT 813 | 18.693 16.201 18.693 14.748 QT 814 | 18.693 12.873 L 815 | 18.693 11.826 17.967 11.084 QT 816 | 17.24 10.342 16.178 10.342 QT 817 | 13.662 10.342 L 818 | 13.662 15.842 L 819 | 13.662 16.514 15.818 16.514 QT 820 | 15.818 17.248 L 821 | 9.615 17.248 L 822 | cp 823 | 13.662 9.795 M 824 | 15.912 9.795 L 825 | 17.646 9.795 18.56 9.092 QT 826 | 19.475 8.389 19.475 6.701 QT 827 | 19.475 5.029 18.568 4.334 QT 828 | 17.662 3.639 15.912 3.639 QT 829 | 14.725 3.639 L 830 | 14.35 3.639 14.139 3.67 QT 831 | 13.928 3.701 13.795 3.849 QT 832 | 13.662 3.998 13.662 4.31 QT 833 | 13.662 9.795 L 834 | cp 835 | f 836 | GR 837 | GS 838 | [0.75 0 0 0.75 199.50014 341.51999] CT 839 | 0.149 GC 840 | N 841 | 24.871 15.185 M 842 | 24.871 13.935 25.855 13.154 QT 843 | 26.839 12.373 28.214 12.045 QT 844 | 29.589 11.717 30.839 11.717 QT 845 | 30.839 10.857 L 846 | 30.839 10.248 30.574 9.685 QT 847 | 30.308 9.123 29.8 8.756 QT 848 | 29.293 8.389 28.699 8.389 QT 849 | 27.293 8.389 26.574 9.014 QT 850 | 26.964 9.014 27.23 9.318 QT 851 | 27.496 9.623 27.496 10.014 QT 852 | 27.496 10.435 27.199 10.732 QT 853 | 26.902 11.029 26.496 11.029 QT 854 | 26.074 11.029 25.777 10.732 QT 855 | 25.48 10.435 25.48 10.014 QT 856 | 25.48 8.904 26.48 8.373 QT 857 | 27.48 7.842 28.699 7.842 QT 858 | 29.543 7.842 30.402 8.201 QT 859 | 31.261 8.56 31.816 9.24 QT 860 | 32.371 9.92 32.371 10.826 QT 861 | 32.371 15.545 L 862 | 32.371 15.951 32.543 16.295 QT 863 | 32.714 16.639 33.074 16.639 QT 864 | 33.433 16.639 33.597 16.295 QT 865 | 33.761 15.951 33.761 15.545 QT 866 | 33.761 14.201 L 867 | 34.386 14.201 L 868 | 34.386 15.545 L 869 | 34.386 16.014 34.136 16.443 QT 870 | 33.886 16.873 33.472 17.123 QT 871 | 33.058 17.373 32.574 17.373 QT 872 | 31.964 17.373 31.519 16.896 QT 873 | 31.074 16.42 31.027 15.764 QT 874 | 30.636 16.545 29.878 17.014 QT 875 | 29.121 17.482 28.246 17.482 QT 876 | 27.449 17.482 26.675 17.248 QT 877 | 25.902 17.014 25.386 16.506 QT 878 | 24.871 15.998 24.871 15.185 QT 879 | cp 880 | 26.574 15.185 M 881 | 26.574 15.92 27.113 16.428 QT 882 | 27.652 16.935 28.402 16.935 QT 883 | 29.074 16.935 29.628 16.592 QT 884 | 30.183 16.248 30.511 15.67 QT 885 | 30.839 15.092 30.839 14.435 QT 886 | 30.839 12.248 L 887 | 29.886 12.248 28.886 12.56 QT 888 | 27.886 12.873 27.23 13.545 QT 889 | 26.574 14.217 26.574 15.185 QT 890 | cp 891 | f 892 | GR 893 | GS 894 | [0.75 0 0 0.75 199.50014 341.51999] CT 895 | 0.149 GC 896 | N 897 | 39.419 17.482 M 898 | 38.184 17.482 37.153 16.81 QT 899 | 36.122 16.139 35.559 15.045 QT 900 | 34.997 13.951 34.997 12.717 QT 901 | 34.997 11.451 35.614 10.357 QT 902 | 36.231 9.264 37.301 8.615 QT 903 | 38.372 7.967 39.653 7.967 QT 904 | 40.419 7.967 41.106 8.287 QT 905 | 41.794 8.607 42.294 9.185 QT 906 | 42.294 4.826 L 907 | 42.294 4.264 42.122 4.006 QT 908 | 41.95 3.748 41.637 3.693 QT 909 | 41.325 3.639 40.669 3.639 QT 910 | 40.669 2.904 L 911 | 43.762 2.67 L 912 | 43.762 15.342 L 913 | 43.762 15.889 43.934 16.146 QT 914 | 44.106 16.404 44.419 16.459 QT 915 | 44.731 16.514 45.403 16.514 QT 916 | 45.403 17.248 L 917 | 42.231 17.482 L 918 | 42.231 16.154 L 919 | 41.684 16.779 40.934 17.131 QT 920 | 40.184 17.482 39.419 17.482 QT 921 | cp 922 | 37.278 15.42 M 923 | 37.637 16.107 38.239 16.521 QT 924 | 38.84 16.935 39.544 16.935 QT 925 | 40.419 16.935 41.145 16.428 QT 926 | 41.872 15.92 42.231 15.123 QT 927 | 42.231 10.092 L 928 | 41.981 9.623 41.606 9.264 QT 929 | 41.231 8.904 40.77 8.709 QT 930 | 40.309 8.514 39.778 8.514 QT 931 | 38.684 8.514 38.02 9.131 QT 932 | 37.356 9.748 37.083 10.717 QT 933 | 36.809 11.685 36.809 12.732 QT 934 | 36.809 13.576 36.903 14.201 QT 935 | 36.997 14.826 37.278 15.42 QT 936 | cp 937 | f 938 | GR 939 | GS 940 | [0.75 0 0 0.75 199.50014 341.51999] CT 941 | 0.149 GC 942 | N 943 | 46.17 22.498 M 944 | 46.17 21.654 L 945 | 48.201 21.654 L 946 | 48.201 2.342 L 947 | 46.17 2.342 L 948 | 46.17 1.498 L 949 | 49.045 1.498 L 950 | 49.045 22.498 L 951 | 46.17 22.498 L 952 | cp 953 | f 954 | GR 955 | GS 956 | [0.75 0 0 0.75 0 0] CT 957 | 0.149 GC 958 | 2 setlinecap 959 | 1 LJ 960 | 0.667 LW 961 | N 962 | 67 425 M 963 | 67 36 L 964 | S 965 | GR 966 | GS 967 | [0.75 0 0 0.75 0 0] CT 968 | 0.149 GC 969 | 2 setlinecap 970 | 1 LJ 971 | 0.667 LW 972 | N 973 | 465 425 M 974 | 465 36 L 975 | S 976 | GR 977 | GS 978 | [0.75 0 0 0.75 0 0] CT 979 | 0.149 GC 980 | 2 setlinecap 981 | 1 LJ 982 | 0.667 LW 983 | N 984 | 67 425 M 985 | 70.98 425 L 986 | S 987 | GR 988 | GS 989 | [0.75 0 0 0.75 0 0] CT 990 | 0.149 GC 991 | 2 setlinecap 992 | 1 LJ 993 | 0.667 LW 994 | N 995 | 67 376.375 M 996 | 70.98 376.375 L 997 | S 998 | GR 999 | GS 1000 | [0.75 0 0 0.75 0 0] CT 1001 | 0.149 GC 1002 | 2 setlinecap 1003 | 1 LJ 1004 | 0.667 LW 1005 | N 1006 | 67 327.75 M 1007 | 70.98 327.75 L 1008 | S 1009 | GR 1010 | GS 1011 | [0.75 0 0 0.75 0 0] CT 1012 | 0.149 GC 1013 | 2 setlinecap 1014 | 1 LJ 1015 | 0.667 LW 1016 | N 1017 | 67 279.125 M 1018 | 70.98 279.125 L 1019 | S 1020 | GR 1021 | GS 1022 | [0.75 0 0 0.75 0 0] CT 1023 | 0.149 GC 1024 | 2 setlinecap 1025 | 1 LJ 1026 | 0.667 LW 1027 | N 1028 | 67 230.5 M 1029 | 70.98 230.5 L 1030 | S 1031 | GR 1032 | GS 1033 | [0.75 0 0 0.75 0 0] CT 1034 | 0.149 GC 1035 | 2 setlinecap 1036 | 1 LJ 1037 | 0.667 LW 1038 | N 1039 | 67 181.875 M 1040 | 70.98 181.875 L 1041 | S 1042 | GR 1043 | GS 1044 | [0.75 0 0 0.75 0 0] CT 1045 | 0.149 GC 1046 | 2 setlinecap 1047 | 1 LJ 1048 | 0.667 LW 1049 | N 1050 | 67 133.25 M 1051 | 70.98 133.25 L 1052 | S 1053 | GR 1054 | GS 1055 | [0.75 0 0 0.75 0 0] CT 1056 | 0.149 GC 1057 | 2 setlinecap 1058 | 1 LJ 1059 | 0.667 LW 1060 | N 1061 | 67 84.625 M 1062 | 70.98 84.625 L 1063 | S 1064 | GR 1065 | GS 1066 | [0.75 0 0 0.75 0 0] CT 1067 | 0.149 GC 1068 | 2 setlinecap 1069 | 1 LJ 1070 | 0.667 LW 1071 | N 1072 | 67 36 M 1073 | 70.98 36 L 1074 | S 1075 | GR 1076 | GS 1077 | [0.75 0 0 0.75 0 0] CT 1078 | 0.149 GC 1079 | 2 setlinecap 1080 | 1 LJ 1081 | 0.667 LW 1082 | N 1083 | 465 425 M 1084 | 461.02 425 L 1085 | S 1086 | GR 1087 | GS 1088 | [0.75 0 0 0.75 0 0] CT 1089 | 0.149 GC 1090 | 2 setlinecap 1091 | 1 LJ 1092 | 0.667 LW 1093 | N 1094 | 465 376.375 M 1095 | 461.02 376.375 L 1096 | S 1097 | GR 1098 | GS 1099 | [0.75 0 0 0.75 0 0] CT 1100 | 0.149 GC 1101 | 2 setlinecap 1102 | 1 LJ 1103 | 0.667 LW 1104 | N 1105 | 465 327.75 M 1106 | 461.02 327.75 L 1107 | S 1108 | GR 1109 | GS 1110 | [0.75 0 0 0.75 0 0] CT 1111 | 0.149 GC 1112 | 2 setlinecap 1113 | 1 LJ 1114 | 0.667 LW 1115 | N 1116 | 465 279.125 M 1117 | 461.02 279.125 L 1118 | S 1119 | GR 1120 | GS 1121 | [0.75 0 0 0.75 0 0] CT 1122 | 0.149 GC 1123 | 2 setlinecap 1124 | 1 LJ 1125 | 0.667 LW 1126 | N 1127 | 465 230.5 M 1128 | 461.02 230.5 L 1129 | S 1130 | GR 1131 | GS 1132 | [0.75 0 0 0.75 0 0] CT 1133 | 0.149 GC 1134 | 2 setlinecap 1135 | 1 LJ 1136 | 0.667 LW 1137 | N 1138 | 465 181.875 M 1139 | 461.02 181.875 L 1140 | S 1141 | GR 1142 | GS 1143 | [0.75 0 0 0.75 0 0] CT 1144 | 0.149 GC 1145 | 2 setlinecap 1146 | 1 LJ 1147 | 0.667 LW 1148 | N 1149 | 465 133.25 M 1150 | 461.02 133.25 L 1151 | S 1152 | GR 1153 | GS 1154 | [0.75 0 0 0.75 0 0] CT 1155 | 0.149 GC 1156 | 2 setlinecap 1157 | 1 LJ 1158 | 0.667 LW 1159 | N 1160 | 465 84.625 M 1161 | 461.02 84.625 L 1162 | S 1163 | GR 1164 | GS 1165 | [0.75 0 0 0.75 0 0] CT 1166 | 0.149 GC 1167 | 2 setlinecap 1168 | 1 LJ 1169 | 0.667 LW 1170 | N 1171 | 465 36 M 1172 | 461.02 36 L 1173 | S 1174 | GR 1175 | GS 1176 | [0.75 0 0 0.75 45.45001 318.75] CT 1177 | 0.149 GC 1178 | /Helvetica 18.667 F 1179 | GS 1180 | [1 0 0 1 0 0] CT 1181 | -19 6.5 moveto 1182 | 1 -1 scale 1183 | (-4) t 1184 | GR 1185 | GR 1186 | GS 1187 | [0.75 0 0 0.75 45.45001 282.28125] CT 1188 | 0.149 GC 1189 | /Helvetica 18.667 F 1190 | GS 1191 | [1 0 0 1 0 0] CT 1192 | -19 6.5 moveto 1193 | 1 -1 scale 1194 | (-3) t 1195 | GR 1196 | GR 1197 | GS 1198 | [0.75 0 0 0.75 45.45001 245.8125] CT 1199 | 0.149 GC 1200 | /Helvetica 18.667 F 1201 | GS 1202 | [1 0 0 1 0 0] CT 1203 | -19 6.5 moveto 1204 | 1 -1 scale 1205 | (-2) t 1206 | GR 1207 | GR 1208 | GS 1209 | [0.75 0 0 0.75 45.45001 209.34375] CT 1210 | 0.149 GC 1211 | /Helvetica 18.667 F 1212 | GS 1213 | [1 0 0 1 0 0] CT 1214 | -19 6.5 moveto 1215 | 1 -1 scale 1216 | (-1) t 1217 | GR 1218 | GR 1219 | GS 1220 | [0.75 0 0 0.75 45.45001 172.875] CT 1221 | 0.149 GC 1222 | /Helvetica 18.667 F 1223 | GS 1224 | [1 0 0 1 0 0] CT 1225 | -12 6.5 moveto 1226 | 1 -1 scale 1227 | (0) t 1228 | GR 1229 | GR 1230 | GS 1231 | [0.75 0 0 0.75 45.45001 136.40625] CT 1232 | 0.149 GC 1233 | /Helvetica 18.667 F 1234 | GS 1235 | [1 0 0 1 0 0] CT 1236 | -12 6.5 moveto 1237 | 1 -1 scale 1238 | (1) t 1239 | GR 1240 | GR 1241 | GS 1242 | [0.75 0 0 0.75 45.45001 99.9375] CT 1243 | 0.149 GC 1244 | /Helvetica 18.667 F 1245 | GS 1246 | [1 0 0 1 0 0] CT 1247 | -12 6.5 moveto 1248 | 1 -1 scale 1249 | (2) t 1250 | GR 1251 | GR 1252 | GS 1253 | [0.75 0 0 0.75 45.45001 63.46875] CT 1254 | 0.149 GC 1255 | /Helvetica 18.667 F 1256 | GS 1257 | [1 0 0 1 0 0] CT 1258 | -12 6.5 moveto 1259 | 1 -1 scale 1260 | (3) t 1261 | GR 1262 | GR 1263 | GS 1264 | [0.75 0 0 0.75 45.45001 27] CT 1265 | 0.149 GC 1266 | /Helvetica 18.667 F 1267 | GS 1268 | [1 0 0 1 0 0] CT 1269 | -12 6.5 moveto 1270 | 1 -1 scale 1271 | (4) t 1272 | GR 1273 | GR 1274 | GS 1275 | [0 -0.75 0.75 0 28.2 172.87486] CT 1276 | 0.149 GC 1277 | N 1278 | -46.405 -3.298 M 1279 | -45.42 -7.205 L 1280 | -46.327 -7.205 -47.186 -7.548 QT 1281 | -48.045 -7.892 -48.569 -8.556 QT 1282 | -49.092 -9.22 -49.092 -10.189 QT 1283 | -49.092 -10.72 -48.897 -11.423 QT 1284 | -48.702 -12.126 -48.483 -12.705 QT 1285 | -48.264 -13.283 -47.905 -14.236 QT 1286 | -47.623 -15.017 -47.623 -15.501 QT 1287 | -47.623 -16.126 -48.077 -16.126 QT 1288 | -48.92 -16.126 -49.452 -15.275 QT 1289 | -49.983 -14.423 -50.248 -13.361 QT 1290 | -50.28 -13.22 -50.42 -13.22 QT 1291 | -50.67 -13.22 L 1292 | -50.842 -13.22 -50.842 -13.423 QT 1293 | -50.842 -13.486 L 1294 | -50.498 -14.736 -49.803 -15.705 QT 1295 | -49.108 -16.673 -48.045 -16.673 QT 1296 | -47.295 -16.673 -46.78 -16.181 QT 1297 | -46.264 -15.689 -46.264 -14.923 QT 1298 | -46.264 -14.533 -46.436 -14.111 QT 1299 | -46.795 -13.158 -47.014 -12.595 QT 1300 | -47.233 -12.033 -47.428 -11.314 QT 1301 | -47.623 -10.595 -47.623 -10.033 QT 1302 | -47.623 -9.017 -46.983 -8.455 QT 1303 | -46.342 -7.892 -45.295 -7.751 QT 1304 | -41.764 -21.845 L 1305 | -41.717 -21.97 -41.608 -21.97 QT 1306 | -41.342 -21.97 L 1307 | -41.186 -21.97 -41.186 -21.751 QT 1308 | -44.686 -7.705 L 1309 | -44.452 -7.705 L 1310 | -43.577 -7.705 -42.592 -8.228 QT 1311 | -41.608 -8.751 -40.803 -9.603 QT 1312 | -39.998 -10.455 -39.53 -11.439 QT 1313 | -39.061 -12.423 -39.061 -13.267 QT 1314 | -39.061 -13.908 -39.264 -14.259 QT 1315 | -39.467 -14.611 -39.795 -14.994 QT 1316 | -40.123 -15.376 -40.123 -15.611 QT 1317 | -40.123 -16.017 -39.788 -16.353 QT 1318 | -39.452 -16.689 -39.045 -16.689 QT 1319 | -38.53 -16.689 -38.311 -16.228 QT 1320 | -38.092 -15.767 -38.092 -15.189 QT 1321 | -38.092 -14.564 -38.217 -13.955 QT 1322 | -38.342 -13.345 -38.561 -12.501 QT 1323 | -39.045 -10.58 -40.561 -9.048 QT 1324 | -41.092 -8.533 -41.725 -8.095 QT 1325 | -42.358 -7.658 -43.053 -7.408 QT 1326 | -43.748 -7.158 -44.467 -7.158 QT 1327 | -44.811 -7.158 L 1328 | -45.795 -3.205 L 1329 | -45.842 -3.08 -45.967 -3.08 QT 1330 | -46.217 -3.08 L 1331 | -46.295 -3.08 -46.35 -3.15 QT 1332 | -46.405 -3.22 -46.405 -3.298 QT 1333 | cp 1334 | f 1335 | GR 1336 | GS 1337 | [0 -0.75 0.75 0 28.2 172.87486] CT 1338 | 0.149 GC 1339 | N 1340 | -37.326 -4.312 M 1341 | -37.326 -4.687 L 1342 | -37.326 -4.718 -37.311 -4.765 QT 1343 | -35.123 -7.171 L 1344 | -34.639 -7.703 -34.334 -8.062 QT 1345 | -34.029 -8.421 -33.725 -8.898 QT 1346 | -33.42 -9.375 -33.248 -9.859 QT 1347 | -33.076 -10.343 -33.076 -10.89 QT 1348 | -33.076 -11.468 -33.287 -11.992 QT 1349 | -33.498 -12.515 -33.92 -12.828 QT 1350 | -34.342 -13.14 -34.936 -13.14 QT 1351 | -35.545 -13.14 -36.029 -12.773 QT 1352 | -36.514 -12.406 -36.717 -11.828 QT 1353 | -36.654 -11.843 -36.561 -11.843 QT 1354 | -36.248 -11.843 -36.022 -11.632 QT 1355 | -35.795 -11.421 -35.795 -11.093 QT 1356 | -35.795 -10.765 -36.022 -10.546 QT 1357 | -36.248 -10.328 -36.561 -10.328 QT 1358 | -36.889 -10.328 -37.108 -10.554 QT 1359 | -37.326 -10.781 -37.326 -11.093 QT 1360 | -37.326 -11.609 -37.131 -12.07 QT 1361 | -36.936 -12.531 -36.561 -12.89 QT 1362 | -36.186 -13.25 -35.717 -13.445 QT 1363 | -35.248 -13.64 -34.733 -13.64 QT 1364 | -33.92 -13.64 -33.233 -13.296 QT 1365 | -32.545 -12.953 -32.139 -12.336 QT 1366 | -31.733 -11.718 -31.733 -10.89 QT 1367 | -31.733 -10.281 -32.006 -9.734 QT 1368 | -32.279 -9.187 -32.694 -8.742 QT 1369 | -33.108 -8.296 -33.756 -7.726 QT 1370 | -34.404 -7.156 -34.608 -6.968 QT 1371 | -36.201 -5.453 L 1372 | -34.858 -5.453 L 1373 | -33.858 -5.453 -33.194 -5.468 QT 1374 | -32.529 -5.484 -32.483 -5.515 QT 1375 | -32.326 -5.687 -32.154 -6.812 QT 1376 | -31.733 -6.812 L 1377 | -32.139 -4.312 L 1378 | -37.326 -4.312 L 1379 | cp 1380 | f 1381 | GR 1382 | GS 1383 | [0 -0.75 0.75 0 28.2 172.87486] CT 1384 | 0.149 GC 1385 | N 1386 | -23.301 -2.189 M 1387 | -24.472 -3.111 -25.316 -4.306 QT 1388 | -26.16 -5.501 -26.699 -6.853 QT 1389 | -27.238 -8.205 -27.504 -9.681 QT 1390 | -27.769 -11.158 -27.769 -12.642 QT 1391 | -27.769 -14.142 -27.504 -15.619 QT 1392 | -27.238 -17.095 -26.691 -18.462 QT 1393 | -26.144 -19.83 -25.293 -21.017 QT 1394 | -24.441 -22.205 -23.301 -23.095 QT 1395 | -23.301 -23.142 -23.207 -23.142 QT 1396 | -23.004 -23.142 L 1397 | -22.941 -23.142 -22.894 -23.087 QT 1398 | -22.847 -23.033 -22.847 -22.955 QT 1399 | -22.847 -22.861 -22.879 -22.83 QT 1400 | -23.91 -21.814 -24.59 -20.666 QT 1401 | -25.269 -19.517 -25.683 -18.22 QT 1402 | -26.097 -16.923 -26.285 -15.533 QT 1403 | -26.472 -14.142 -26.472 -12.642 QT 1404 | -26.472 -5.97 -22.91 -2.501 QT 1405 | -22.847 -2.439 -22.847 -2.33 QT 1406 | -22.847 -2.283 -22.902 -2.212 QT 1407 | -22.957 -2.142 -23.004 -2.142 QT 1408 | -23.207 -2.142 L 1409 | -23.301 -2.142 -23.301 -2.189 QT 1410 | cp 1411 | f 1412 | GR 1413 | GS 1414 | [0 -0.75 0.75 0 28.2 172.87486] CT 1415 | 0.149 GC 1416 | N 1417 | -18.44 -7.158 M 1418 | -19.393 -7.158 -19.972 -7.853 QT 1419 | -20.55 -8.548 -20.768 -9.533 QT 1420 | -20.987 -10.517 -20.987 -11.486 QT 1421 | -20.987 -11.501 L 1422 | -20.987 -12.548 -20.792 -13.673 QT 1423 | -20.597 -14.798 -20.214 -15.923 QT 1424 | -19.831 -17.048 -19.393 -17.939 QT 1425 | -19.081 -18.548 -18.597 -19.306 QT 1426 | -18.112 -20.064 -17.511 -20.728 QT 1427 | -16.909 -21.392 -16.214 -21.798 QT 1428 | -15.518 -22.205 -14.815 -22.205 QT 1429 | -14.8 -22.205 L 1430 | -14.034 -22.205 -13.526 -21.783 QT 1431 | -13.018 -21.361 -12.737 -20.705 QT 1432 | -12.456 -20.048 -12.347 -19.298 QT 1433 | -12.237 -18.548 -12.237 -17.876 QT 1434 | -12.237 -16.283 -12.667 -14.626 QT 1435 | -13.097 -12.97 -13.847 -11.423 QT 1436 | -14.143 -10.845 -14.651 -10.048 QT 1437 | -15.159 -9.251 -15.729 -8.626 QT 1438 | -16.3 -8.001 -17.003 -7.58 QT 1439 | -17.706 -7.158 -18.425 -7.158 QT 1440 | -18.44 -7.158 L 1441 | cp 1442 | -18.409 -7.705 M 1443 | -17.706 -7.705 -17.065 -8.455 QT 1444 | -16.425 -9.205 -15.94 -10.259 QT 1445 | -15.456 -11.314 -15.097 -12.431 QT 1446 | -14.737 -13.548 -14.565 -14.33 QT 1447 | -18.847 -14.33 L 1448 | -19.175 -13.001 -19.362 -12.041 QT 1449 | -19.55 -11.08 -19.55 -10.158 QT 1450 | -19.55 -7.705 -18.409 -7.705 QT 1451 | cp 1452 | -18.69 -15.064 M 1453 | -14.378 -15.064 L 1454 | -14.143 -15.986 -14.011 -16.603 QT 1455 | -13.878 -17.22 -13.792 -17.908 QT 1456 | -13.706 -18.595 -13.706 -19.189 QT 1457 | -13.706 -21.658 -14.815 -21.658 QT 1458 | -16.143 -21.658 -17.112 -19.509 QT 1459 | -18.081 -17.361 -18.69 -15.064 QT 1460 | cp 1461 | f 1462 | GR 1463 | GS 1464 | [0 -0.75 0.75 0 28.2 172.87486] CT 1465 | 0.149 GC 1466 | N 1467 | -10.262 -2.142 M 1468 | -10.449 -2.142 -10.449 -2.33 QT 1469 | -10.449 -2.423 -10.403 -2.455 QT 1470 | -6.809 -5.97 -6.809 -12.642 QT 1471 | -6.809 -19.314 -10.356 -22.783 QT 1472 | -10.449 -22.83 -10.449 -22.955 QT 1473 | -10.449 -23.033 -10.387 -23.087 QT 1474 | -10.324 -23.142 -10.262 -23.142 QT 1475 | -10.059 -23.142 L 1476 | -9.996 -23.142 -9.965 -23.095 QT 1477 | -8.449 -21.908 -7.449 -20.205 QT 1478 | -6.449 -18.501 -5.981 -16.58 QT 1479 | -5.512 -14.658 -5.512 -12.642 QT 1480 | -5.512 -11.158 -5.762 -9.712 QT 1481 | -6.012 -8.267 -6.559 -6.869 QT 1482 | -7.106 -5.47 -7.949 -4.291 QT 1483 | -8.793 -3.111 -9.965 -2.189 QT 1484 | -9.996 -2.142 -10.059 -2.142 QT 1485 | -10.262 -2.142 L 1486 | cp 1487 | f 1488 | GR 1489 | GS 1490 | [0 -0.75 0.75 0 28.2 172.87486] CT 1491 | 0.149 GC 1492 | N 1493 | 5.693 -2.142 M 1494 | 5.693 -23.142 L 1495 | 8.568 -23.142 L 1496 | 8.568 -22.298 L 1497 | 6.536 -22.298 L 1498 | 6.536 -2.986 L 1499 | 8.568 -2.986 L 1500 | 8.568 -2.142 L 1501 | 5.693 -2.142 L 1502 | cp 1503 | f 1504 | GR 1505 | GS 1506 | [0 -0.75 0.75 0 28.2 172.87486] CT 1507 | 0.149 GC 1508 | N 1509 | 9.615 -7.392 M 1510 | 9.615 -8.126 L 1511 | 11.771 -8.126 11.771 -8.798 QT 1512 | 11.771 -20.33 L 1513 | 11.771 -21.001 9.615 -21.001 QT 1514 | 9.615 -21.736 L 1515 | 16.209 -21.736 L 1516 | 17.381 -21.736 18.678 -21.314 QT 1517 | 19.975 -20.892 20.85 -20.017 QT 1518 | 21.725 -19.142 21.725 -17.939 QT 1519 | 21.725 -17.048 21.193 -16.361 QT 1520 | 20.662 -15.673 19.834 -15.205 QT 1521 | 19.006 -14.736 18.146 -14.533 QT 1522 | 19.1 -14.205 19.803 -13.486 QT 1523 | 20.506 -12.767 20.646 -11.845 QT 1524 | 20.943 -9.97 L 1525 | 21.162 -8.72 21.381 -8.095 QT 1526 | 21.6 -7.47 22.381 -7.47 QT 1527 | 23.037 -7.47 23.357 -8.08 QT 1528 | 23.678 -8.689 23.678 -9.408 QT 1529 | 23.678 -9.486 23.748 -9.541 QT 1530 | 23.818 -9.595 23.881 -9.595 QT 1531 | 24.084 -9.595 L 1532 | 24.287 -9.595 24.287 -9.314 QT 1533 | 24.287 -8.751 24.06 -8.197 QT 1534 | 23.834 -7.642 23.404 -7.283 QT 1535 | 22.975 -6.923 22.396 -6.923 QT 1536 | 20.881 -6.923 19.787 -7.681 QT 1537 | 18.693 -8.439 18.693 -9.892 QT 1538 | 18.693 -11.767 L 1539 | 18.693 -12.814 17.967 -13.556 QT 1540 | 17.24 -14.298 16.178 -14.298 QT 1541 | 13.662 -14.298 L 1542 | 13.662 -8.798 L 1543 | 13.662 -8.126 15.818 -8.126 QT 1544 | 15.818 -7.392 L 1545 | 9.615 -7.392 L 1546 | cp 1547 | 13.662 -14.845 M 1548 | 15.912 -14.845 L 1549 | 17.646 -14.845 18.56 -15.548 QT 1550 | 19.475 -16.251 19.475 -17.939 QT 1551 | 19.475 -19.611 18.568 -20.306 QT 1552 | 17.662 -21.001 15.912 -21.001 QT 1553 | 14.725 -21.001 L 1554 | 14.35 -21.001 14.139 -20.97 QT 1555 | 13.928 -20.939 13.795 -20.791 QT 1556 | 13.662 -20.642 13.662 -20.33 QT 1557 | 13.662 -14.845 L 1558 | cp 1559 | f 1560 | GR 1561 | GS 1562 | [0 -0.75 0.75 0 28.2 172.87486] CT 1563 | 0.149 GC 1564 | N 1565 | 24.871 -9.455 M 1566 | 24.871 -10.705 25.855 -11.486 QT 1567 | 26.839 -12.267 28.214 -12.595 QT 1568 | 29.589 -12.923 30.839 -12.923 QT 1569 | 30.839 -13.783 L 1570 | 30.839 -14.392 30.574 -14.955 QT 1571 | 30.308 -15.517 29.8 -15.884 QT 1572 | 29.293 -16.251 28.699 -16.251 QT 1573 | 27.293 -16.251 26.574 -15.626 QT 1574 | 26.964 -15.626 27.23 -15.322 QT 1575 | 27.496 -15.017 27.496 -14.626 QT 1576 | 27.496 -14.205 27.199 -13.908 QT 1577 | 26.902 -13.611 26.496 -13.611 QT 1578 | 26.074 -13.611 25.777 -13.908 QT 1579 | 25.48 -14.205 25.48 -14.626 QT 1580 | 25.48 -15.736 26.48 -16.267 QT 1581 | 27.48 -16.798 28.699 -16.798 QT 1582 | 29.543 -16.798 30.402 -16.439 QT 1583 | 31.261 -16.08 31.816 -15.4 QT 1584 | 32.371 -14.72 32.371 -13.814 QT 1585 | 32.371 -9.095 L 1586 | 32.371 -8.689 32.543 -8.345 QT 1587 | 32.714 -8.001 33.074 -8.001 QT 1588 | 33.433 -8.001 33.597 -8.345 QT 1589 | 33.761 -8.689 33.761 -9.095 QT 1590 | 33.761 -10.439 L 1591 | 34.386 -10.439 L 1592 | 34.386 -9.095 L 1593 | 34.386 -8.626 34.136 -8.197 QT 1594 | 33.886 -7.767 33.472 -7.517 QT 1595 | 33.058 -7.267 32.574 -7.267 QT 1596 | 31.964 -7.267 31.519 -7.744 QT 1597 | 31.074 -8.22 31.027 -8.876 QT 1598 | 30.636 -8.095 29.878 -7.626 QT 1599 | 29.121 -7.158 28.246 -7.158 QT 1600 | 27.449 -7.158 26.675 -7.392 QT 1601 | 25.902 -7.626 25.386 -8.134 QT 1602 | 24.871 -8.642 24.871 -9.455 QT 1603 | cp 1604 | 26.574 -9.455 M 1605 | 26.574 -8.72 27.113 -8.212 QT 1606 | 27.652 -7.705 28.402 -7.705 QT 1607 | 29.074 -7.705 29.628 -8.048 QT 1608 | 30.183 -8.392 30.511 -8.97 QT 1609 | 30.839 -9.548 30.839 -10.205 QT 1610 | 30.839 -12.392 L 1611 | 29.886 -12.392 28.886 -12.08 QT 1612 | 27.886 -11.767 27.23 -11.095 QT 1613 | 26.574 -10.423 26.574 -9.455 QT 1614 | cp 1615 | f 1616 | GR 1617 | GS 1618 | [0 -0.75 0.75 0 28.2 172.87486] CT 1619 | 0.149 GC 1620 | N 1621 | 39.419 -7.158 M 1622 | 38.184 -7.158 37.153 -7.83 QT 1623 | 36.122 -8.501 35.559 -9.595 QT 1624 | 34.997 -10.689 34.997 -11.923 QT 1625 | 34.997 -13.189 35.614 -14.283 QT 1626 | 36.231 -15.376 37.301 -16.025 QT 1627 | 38.372 -16.673 39.653 -16.673 QT 1628 | 40.419 -16.673 41.106 -16.353 QT 1629 | 41.794 -16.033 42.294 -15.455 QT 1630 | 42.294 -19.814 L 1631 | 42.294 -20.376 42.122 -20.634 QT 1632 | 41.95 -20.892 41.637 -20.947 QT 1633 | 41.325 -21.001 40.669 -21.001 QT 1634 | 40.669 -21.736 L 1635 | 43.762 -21.97 L 1636 | 43.762 -9.298 L 1637 | 43.762 -8.751 43.934 -8.494 QT 1638 | 44.106 -8.236 44.419 -8.181 QT 1639 | 44.731 -8.126 45.403 -8.126 QT 1640 | 45.403 -7.392 L 1641 | 42.231 -7.158 L 1642 | 42.231 -8.486 L 1643 | 41.684 -7.861 40.934 -7.509 QT 1644 | 40.184 -7.158 39.419 -7.158 QT 1645 | cp 1646 | 37.278 -9.22 M 1647 | 37.637 -8.533 38.239 -8.119 QT 1648 | 38.84 -7.705 39.544 -7.705 QT 1649 | 40.419 -7.705 41.145 -8.212 QT 1650 | 41.872 -8.72 42.231 -9.517 QT 1651 | 42.231 -14.548 L 1652 | 41.981 -15.017 41.606 -15.376 QT 1653 | 41.231 -15.736 40.77 -15.931 QT 1654 | 40.309 -16.126 39.778 -16.126 QT 1655 | 38.684 -16.126 38.02 -15.509 QT 1656 | 37.356 -14.892 37.083 -13.923 QT 1657 | 36.809 -12.955 36.809 -11.908 QT 1658 | 36.809 -11.064 36.903 -10.439 QT 1659 | 36.997 -9.814 37.278 -9.22 QT 1660 | cp 1661 | f 1662 | GR 1663 | GS 1664 | [0 -0.75 0.75 0 28.2 172.87486] CT 1665 | 0.149 GC 1666 | N 1667 | 46.17 -2.142 M 1668 | 46.17 -2.986 L 1669 | 48.201 -2.986 L 1670 | 48.201 -22.298 L 1671 | 46.17 -22.298 L 1672 | 46.17 -23.142 L 1673 | 49.045 -23.142 L 1674 | 49.045 -2.142 L 1675 | 46.17 -2.142 L 1676 | cp 1677 | f 1678 | GR 1679 | GS 1680 | [0.75 0 0 0.75 164.33379 96.68598] CT 1681 | 0 0.447 0.741 RC 1682 | N 1683 | 2.222 0 M 1684 | 2.222 1.227 1.227 2.222 0 2.222 C 1685 | -1.227 2.222 -2.222 1.227 -2.222 0 C 1686 | -2.222 -1.227 -1.227 -2.222 0 -2.222 C 1687 | 1.227 -2.222 2.222 -1.227 2.222 0 C 1688 | cp 1689 | f 1690 | GR 1691 | GS 1692 | [0.75 0 0 0.75 164.37486 96.62779] CT 1693 | 0 0.447 0.741 RC 1694 | N 1695 | /f-1759579234{2.222 0 M 1696 | 2.222 1.227 1.227 2.222 0 2.222 C 1697 | -1.227 2.222 -2.222 1.227 -2.222 0 C 1698 | -2.222 -1.227 -1.227 -2.222 0 -2.222 C 1699 | 1.227 -2.222 2.222 -1.227 2.222 0 C 1700 | cp}def 1701 | f-1759579234 1702 | f 1703 | GR 1704 | GS 1705 | [0.75 0 0 0.75 164.49804 96.45322] CT 1706 | 0 0.447 0.741 RC 1707 | N 1708 | f-1759579234 1709 | f 1710 | GR 1711 | GS 1712 | [0.75 0 0 0.75 164.70329 96.16233] CT 1713 | 0 0.447 0.741 RC 1714 | N 1715 | f-1759579234 1716 | f 1717 | GR 1718 | GS 1719 | [0.75 0 0 0.75 164.99055 95.75523] CT 1720 | 0 0.447 0.741 RC 1721 | N 1722 | f-1759579234 1723 | f 1724 | GR 1725 | GS 1726 | [0.75 0 0 0.75 165.35973 95.23201] CT 1727 | 0 0.447 0.741 RC 1728 | N 1729 | f-1759579234 1730 | f 1731 | GR 1732 | GS 1733 | [0.75 0 0 0.75 165.81073 94.59284] CT 1734 | 0 0.447 0.741 RC 1735 | N 1736 | f-1759579234 1737 | f 1738 | GR 1739 | GS 1740 | [0.75 0 0 0.75 166.34341 93.83793] CT 1741 | 0 0.447 0.741 RC 1742 | N 1743 | f-1759579234 1744 | f 1745 | GR 1746 | GS 1747 | [0.75 0 0 0.75 166.9576 92.9675] CT 1748 | 0 0.447 0.741 RC 1749 | N 1750 | f-1759579234 1751 | f 1752 | GR 1753 | GS 1754 | [0.75 0 0 0.75 167.65312 91.9818] CT 1755 | 0 0.447 0.741 RC 1756 | N 1757 | f-1759579234 1758 | f 1759 | GR 1760 | GS 1761 | [0.75 0 0 0.75 168.42975 90.88116] CT 1762 | 0 0.447 0.741 RC 1763 | N 1764 | f-1759579234 1765 | f 1766 | GR 1767 | GS 1768 | [0.75 0 0 0.75 169.28724 89.66589] CT 1769 | 0 0.447 0.741 RC 1770 | N 1771 | f-1759579234 1772 | f 1773 | GR 1774 | GS 1775 | [0.75 0 0 0.75 170.22537 88.33637] CT 1776 | 0 0.447 0.741 RC 1777 | N 1778 | f-1759579234 1779 | f 1780 | GR 1781 | GS 1782 | [0.75 0 0 0.75 171.24382 86.89301] CT 1783 | 0 0.447 0.741 RC 1784 | N 1785 | f-1759579234 1786 | f 1787 | GR 1788 | GS 1789 | [0.75 0 0 0.75 172.34229 85.33625] CT 1790 | 0 0.447 0.741 RC 1791 | N 1792 | f-1759579234 1793 | f 1794 | GR 1795 | GS 1796 | [0.75 0 0 0.75 173.52046 83.66655] CT 1797 | 0 0.447 0.741 RC 1798 | N 1799 | f-1759579234 1800 | f 1801 | GR 1802 | GS 1803 | [0.75 0 0 0.75 174.77794 81.88443] CT 1804 | 0 0.447 0.741 RC 1805 | N 1806 | f-1759579234 1807 | f 1808 | GR 1809 | GS 1810 | [0.75 0 0 0.75 176.11436 79.99043] CT 1811 | 0 0.447 0.741 RC 1812 | N 1813 | f-1759579234 1814 | f 1815 | GR 1816 | GS 1817 | [0.75 0 0 0.75 177.52934 77.98512] CT 1818 | 0 0.447 0.741 RC 1819 | N 1820 | f-1759579234 1821 | f 1822 | GR 1823 | GS 1824 | [0.75 0 0 0.75 179.0224 75.86913] CT 1825 | 0 0.447 0.741 RC 1826 | N 1827 | f-1759579234 1828 | f 1829 | GR 1830 | GS 1831 | [0.75 0 0 0.75 180.59312 73.64308] CT 1832 | 0 0.447 0.741 RC 1833 | N 1834 | f-1759579234 1835 | f 1836 | GR 1837 | GS 1838 | [0.75 0 0 0.75 182.24102 71.30767] CT 1839 | 0 0.447 0.741 RC 1840 | N 1841 | f-1759579234 1842 | f 1843 | GR 1844 | GS 1845 | [0.75 0 0 0.75 183.96558 68.86359] CT 1846 | 0 0.447 0.741 RC 1847 | N 1848 | f-1759579234 1849 | f 1850 | GR 1851 | GS 1852 | [0.75 0 0 0.75 185.76629 66.31161] CT 1853 | 0 0.447 0.741 RC 1854 | N 1855 | f-1759579234 1856 | f 1857 | GR 1858 | GS 1859 | [0.75 0 0 0.75 187.64259 63.65249] CT 1860 | 0 0.447 0.741 RC 1861 | N 1862 | f-1759579234 1863 | f 1864 | GR 1865 | GS 1866 | [0.75 0 0 0.75 189.59393 60.88705] CT 1867 | 0 0.447 0.741 RC 1868 | N 1869 | f-1759579234 1870 | f 1871 | GR 1872 | GS 1873 | [0.75 0 0 0.75 191.61969 287.15602] CT 1874 | 0 0.447 0.741 RC 1875 | N 1876 | f-1759579234 1877 | f 1878 | GR 1879 | GS 1880 | [0.75 0 0 0.75 193.71927 284.18049] CT 1881 | 0 0.447 0.741 RC 1882 | N 1883 | f-1759579234 1884 | f 1885 | GR 1886 | GS 1887 | [0.75 0 0 0.75 195.89202 281.10125] CT 1888 | 0 0.447 0.741 RC 1889 | N 1890 | f-1759579234 1891 | f 1892 | GR 1893 | GS 1894 | [0.75 0 0 0.75 198.13726 277.91924] CT 1895 | 0 0.447 0.741 RC 1896 | N 1897 | f-1759579234 1898 | f 1899 | GR 1900 | GS 1901 | [0.75 0 0 0.75 200.45437 274.63543] CT 1902 | 0 0.447 0.741 RC 1903 | N 1904 | f-1759579234 1905 | f 1906 | GR 1907 | GS 1908 | [0.75 0 0 0.75 202.84257 271.25084] CT 1909 | 0 0.447 0.741 RC 1910 | N 1911 | f-1759579234 1912 | f 1913 | GR 1914 | GS 1915 | [0.75 0 0 0.75 205.30117 267.76648] CT 1916 | 0 0.447 0.741 RC 1917 | N 1918 | f-1759579234 1919 | f 1920 | GR 1921 | GS 1922 | [0.75 0 0 0.75 207.82942 264.1834] CT 1923 | 0 0.447 0.741 RC 1924 | N 1925 | f-1759579234 1926 | f 1927 | GR 1928 | GS 1929 | [0.75 0 0 0.75 210.42657 260.50273] CT 1930 | 0 0.447 0.741 RC 1931 | N 1932 | f-1759579234 1933 | f 1934 | GR 1935 | GS 1936 | [0.75 0 0 0.75 213.09178 256.72556] CT 1937 | 0 0.447 0.741 RC 1938 | N 1939 | f-1759579234 1940 | f 1941 | GR 1942 | GS 1943 | [0.75 0 0 0.75 215.82426 252.85304] CT 1944 | 0 0.447 0.741 RC 1945 | N 1946 | f-1759579234 1947 | f 1948 | GR 1949 | GS 1950 | [0.75 0 0 0.75 218.62319 248.88638] CT 1951 | 0 0.447 0.741 RC 1952 | N 1953 | f-1759579234 1954 | f 1955 | GR 1956 | GS 1957 | [0.75 0 0 0.75 221.48769 244.82675] CT 1958 | 0 0.447 0.741 RC 1959 | N 1960 | f-1759579234 1961 | f 1962 | GR 1963 | GS 1964 | [0.75 0 0 0.75 224.41692 240.67541] CT 1965 | 0 0.447 0.741 RC 1966 | N 1967 | f-1759579234 1968 | f 1969 | GR 1970 | GS 1971 | [0.75 0 0 0.75 227.40999 236.43363] CT 1972 | 0 0.447 0.741 RC 1973 | N 1974 | f-1759579234 1975 | f 1976 | GR 1977 | GS 1978 | [0.75 0 0 0.75 230.46595 232.10268] CT 1979 | 0 0.447 0.741 RC 1980 | N 1981 | f-1759579234 1982 | f 1983 | GR 1984 | GS 1985 | [0.75 0 0 0.75 233.58389 227.68389] CT 1986 | 0 0.447 0.741 RC 1987 | N 1988 | f-1759579234 1989 | f 1990 | GR 1991 | GS 1992 | [0.75 0 0 0.75 236.76288 223.1786] CT 1993 | 0 0.447 0.741 RC 1994 | N 1995 | f-1759579234 1996 | f 1997 | GR 1998 | GS 1999 | [0.75 0 0 0.75 240.0019 218.58822] CT 2000 | 0 0.447 0.741 RC 2001 | N 2002 | f-1759579234 2003 | f 2004 | GR 2005 | GS 2006 | [0.75 0 0 0.75 243.30002 213.91409] CT 2007 | 0 0.447 0.741 RC 2008 | N 2009 | f-1759579234 2010 | f 2011 | GR 2012 | GS 2013 | [0.75 0 0 0.75 246.6562 209.15767] CT 2014 | 0 0.447 0.741 RC 2015 | N 2016 | f-1759579234 2017 | f 2018 | GR 2019 | GS 2020 | [0.75 0 0 0.75 250.06945 204.32039] CT 2021 | 0 0.447 0.741 RC 2022 | N 2023 | f-1759579234 2024 | f 2025 | GR 2026 | GS 2027 | [0.75 0 0 0.75 253.53868 199.40373] CT 2028 | 0 0.447 0.741 RC 2029 | N 2030 | f-1759579234 2031 | f 2032 | GR 2033 | GS 2034 | [0.75 0 0 0.75 257.06289 194.40921] CT 2035 | 0 0.447 0.741 RC 2036 | N 2037 | f-1759579234 2038 | f 2039 | GR 2040 | GS 2041 | [0.75 0 0 0.75 260.64095 189.33832] CT 2042 | 0 0.447 0.741 RC 2043 | N 2044 | f-1759579234 2045 | f 2046 | GR 2047 | GS 2048 | [0.75 0 0 0.75 264.27182 184.19262] CT 2049 | 0 0.447 0.741 RC 2050 | N 2051 | f-1759579234 2052 | f 2053 | GR 2054 | GS 2055 | [0.75 0 0 0.75 267.95437 178.97367] CT 2056 | 0 0.447 0.741 RC 2057 | N 2058 | f-1759579234 2059 | f 2060 | GR 2061 | GS 2062 | [0.75 0 0 0.75 271.68748 173.68308] CT 2063 | 0 0.447 0.741 RC 2064 | N 2065 | f-1759579234 2066 | f 2067 | GR 2068 | GS 2069 | [0.75 0 0 0.75 275.47 168.32243] CT 2070 | 0 0.447 0.741 RC 2071 | N 2072 | f-1759579234 2073 | f 2074 | GR 2075 | GS 2076 | [0.75 0 0 0.75 279.30082 162.89337] CT 2077 | 0 0.447 0.741 RC 2078 | N 2079 | f-1759579234 2080 | f 2081 | GR 2082 | GS 2083 | [0.75 0 0 0.75 283.17872 157.39755] CT 2084 | 0 0.447 0.741 RC 2085 | N 2086 | f-1759579234 2087 | f 2088 | GR 2089 | GS 2090 | [0.75 0 0 0.75 287.10255 151.83665] CT 2091 | 0 0.447 0.741 RC 2092 | N 2093 | f-1759579234 2094 | f 2095 | GR 2096 | GS 2097 | [0.75 0 0 0.75 291.07111 146.21236] CT 2098 | 0 0.447 0.741 RC 2099 | N 2100 | f-1759579234 2101 | f 2102 | GR 2103 | GS 2104 | [0.75 0 0 0.75 295.08321 140.5264] CT 2105 | 0 0.447 0.741 RC 2106 | N 2107 | f-1759579234 2108 | f 2109 | GR 2110 | GS 2111 | [0.75 0 0 0.75 299.13757 134.78049] CT 2112 | 0 0.447 0.741 RC 2113 | N 2114 | f-1759579234 2115 | f 2116 | GR 2117 | GS 2118 | [0.75 0 0 0.75 303.23302 128.97638] CT 2119 | 0 0.447 0.741 RC 2120 | N 2121 | f-1759579234 2122 | f 2123 | GR 2124 | GS 2125 | [0.75 0 0 0.75 307.36828 123.11585] CT 2126 | 0 0.447 0.741 RC 2127 | N 2128 | f-1759579234 2129 | f 2130 | GR 2131 | GS 2132 | [0.75 0 0 0.75 311.54208 117.20068] CT 2133 | 0 0.447 0.741 RC 2134 | N 2135 | f-1759579234 2136 | f 2137 | GR 2138 | GS 2139 | [0.75 0 0 0.75 315.75318 111.23267] CT 2140 | 0 0.447 0.741 RC 2141 | N 2142 | f-1759579234 2143 | f 2144 | GR 2145 | GS 2146 | [0.75 0 0 0.75 85.55893 105.21364] CT 2147 | 0 0.447 0.741 RC 2148 | N 2149 | f-1759579234 2150 | f 2151 | GR 2152 | GS 2153 | [0.75 0 0 0.75 89.84073 99.14542] CT 2154 | 0 0.447 0.741 RC 2155 | N 2156 | f-1759579234 2157 | f 2158 | GR 2159 | GS 2160 | [0.75 0 0 0.75 94.15593 93.02986] CT 2161 | 0 0.447 0.741 RC 2162 | N 2163 | f-1759579234 2164 | f 2165 | GR 2166 | GS 2167 | [0.75 0 0 0.75 98.50322 86.86882] CT 2168 | 0 0.447 0.741 RC 2169 | N 2170 | f-1759579234 2171 | f 2172 | GR 2173 | GS 2174 | [0.75 0 0 0.75 102.8813 80.66419] CT 2175 | 0 0.447 0.741 RC 2176 | N 2177 | f-1759579234 2178 | f 2179 | GR 2180 | GS 2181 | [0.75 0 0 0.75 107.28878 74.41784] CT 2182 | 0 0.447 0.741 RC 2183 | N 2184 | f-1759579234 2185 | f 2186 | GR 2187 | GS 2188 | [0.75 0 0 0.75 111.72437 68.13168] CT 2189 | 0 0.447 0.741 RC 2190 | N 2191 | f-1759579234 2192 | f 2193 | GR 2194 | GS 2195 | [0.75 0 0 0.75 116.18668 61.80764] CT 2196 | 0 0.447 0.741 RC 2197 | N 2198 | f-1759579234 2199 | f 2200 | GR 2201 | GS 2202 | [0.75 0 0 0.75 120.67438 284.58755] CT 2203 | 0 0.447 0.741 RC 2204 | N 2205 | f-1759579234 2206 | f 2207 | GR 2208 | GS 2209 | [0.75 0 0 0.75 125.18608 278.19349] CT 2210 | 0 0.447 0.741 RC 2211 | N 2212 | f-1759579234 2213 | f 2214 | GR 2215 | GS 2216 | [0.75 0 0 0.75 129.72043 271.76738] CT 2217 | 0 0.447 0.741 RC 2218 | N 2219 | f-1759579234 2220 | f 2221 | GR 2222 | GS 2223 | [0.75 0 0 0.75 134.27602 265.31113] CT 2224 | 0 0.447 0.741 RC 2225 | N 2226 | f-1759579234 2227 | f 2228 | GR 2229 | GS 2230 | [0.75 0 0 0.75 138.8515 258.82672] CT 2231 | 0 0.447 0.741 RC 2232 | N 2233 | f-1759579234 2234 | f 2235 | GR 2236 | GS 2237 | [0.75 0 0 0.75 143.44544 252.31615] CT 2238 | 0 0.447 0.741 RC 2239 | N 2240 | f-1759579234 2241 | f 2242 | GR 2243 | GS 2244 | [0.75 0 0 0.75 148.05645 245.78137] CT 2245 | 0 0.447 0.741 RC 2246 | N 2247 | f-1759579234 2248 | f 2249 | GR 2250 | GS 2251 | [0.75 0 0 0.75 152.68314 239.22437] CT 2252 | 0 0.447 0.741 RC 2253 | N 2254 | f-1759579234 2255 | f 2256 | GR 2257 | GS 2258 | [0.75 0 0 0.75 157.32409 232.64717] CT 2259 | 0 0.447 0.741 RC 2260 | N 2261 | f-1759579234 2262 | f 2263 | GR 2264 | GS 2265 | [0.75 0 0 0.75 161.97788 226.05176] CT 2266 | 0 0.447 0.741 RC 2267 | N 2268 | f-1759579234 2269 | f 2270 | GR 2271 | GS 2272 | [0.75 0 0 0.75 166.64311 219.44016] CT 2273 | 0 0.447 0.741 RC 2274 | N 2275 | f-1759579234 2276 | f 2277 | GR 2278 | GS 2279 | [0.75 0 0 0.75 171.31834 212.81435] CT 2280 | 0 0.447 0.741 RC 2281 | N 2282 | f-1759579234 2283 | f 2284 | GR 2285 | GS 2286 | [0.75 0 0 0.75 176.00216 206.17641] CT 2287 | 0 0.447 0.741 RC 2288 | N 2289 | f-1759579234 2290 | f 2291 | GR 2292 | GS 2293 | [0.75 0 0 0.75 180.69312 199.52831] CT 2294 | 0 0.447 0.741 RC 2295 | N 2296 | f-1759579234 2297 | f 2298 | GR 2299 | GS 2300 | [0.75 0 0 0.75 185.38984 192.87209] CT 2301 | 0 0.447 0.741 RC 2302 | N 2303 | f-1759579234 2304 | f 2305 | GR 2306 | GS 2307 | [0.75 0 0 0.75 190.09083 186.20978] CT 2308 | 0 0.447 0.741 RC 2309 | N 2310 | f-1759579234 2311 | f 2312 | GR 2313 | GS 2314 | [0.75 0 0 0.75 194.79469 179.5434] CT 2315 | 0 0.447 0.741 RC 2316 | N 2317 | f-1759579234 2318 | f 2319 | GR 2320 | GS 2321 | [0.75 0 0 0.75 199.5 172.875] CT 2322 | 0 0.447 0.741 RC 2323 | N 2324 | f-1759579234 2325 | f 2326 | GR 2327 | GS 2328 | [0.75 0 0 0.75 204.20531 166.2066] CT 2329 | 0 0.447 0.741 RC 2330 | N 2331 | f-1759579234 2332 | f 2333 | GR 2334 | GS 2335 | [0.75 0 0 0.75 208.90917 159.54022] CT 2336 | 0 0.447 0.741 RC 2337 | N 2338 | f-1759579234 2339 | f 2340 | GR 2341 | GS 2342 | [0.75 0 0 0.75 213.61018 152.87791] CT 2343 | 0 0.447 0.741 RC 2344 | N 2345 | f-1759579234 2346 | f 2347 | GR 2348 | GS 2349 | [0.75 0 0 0.75 218.30688 146.22169] CT 2350 | 0 0.447 0.741 RC 2351 | N 2352 | f-1759579234 2353 | f 2354 | GR 2355 | GS 2356 | [0.75 0 0 0.75 222.99786 139.57359] CT 2357 | 0 0.447 0.741 RC 2358 | N 2359 | f-1759579234 2360 | f 2361 | GR 2362 | GS 2363 | [0.75 0 0 0.75 227.68167 132.93563] CT 2364 | 0 0.447 0.741 RC 2365 | N 2366 | f-1759579234 2367 | f 2368 | GR 2369 | GS 2370 | [0.75 0 0 0.75 232.3569 126.30984] CT 2371 | 0 0.447 0.741 RC 2372 | N 2373 | f-1759579234 2374 | f 2375 | GR 2376 | GS 2377 | [0.75 0 0 0.75 237.02211 119.69824] CT 2378 | 0 0.447 0.741 RC 2379 | N 2380 | f-1759579234 2381 | f 2382 | GR 2383 | GS 2384 | [0.75 0 0 0.75 241.67592 113.10283] CT 2385 | 0 0.447 0.741 RC 2386 | N 2387 | f-1759579234 2388 | f 2389 | GR 2390 | GS 2391 | [0.75 0 0 0.75 246.31686 106.52562] CT 2392 | 0 0.447 0.741 RC 2393 | N 2394 | f-1759579234 2395 | f 2396 | GR 2397 | GS 2398 | [0.75 0 0 0.75 250.94355 99.96864] CT 2399 | 0 0.447 0.741 RC 2400 | N 2401 | f-1759579234 2402 | f 2403 | GR 2404 | GS 2405 | [0.75 0 0 0.75 255.55456 93.43386] CT 2406 | 0 0.447 0.741 RC 2407 | N 2408 | f-1759579234 2409 | f 2410 | GR 2411 | GS 2412 | [0.75 0 0 0.75 260.14851 86.92327] CT 2413 | 0 0.447 0.741 RC 2414 | N 2415 | f-1759579234 2416 | f 2417 | GR 2418 | GS 2419 | [0.75 0 0 0.75 264.72398 80.43887] CT 2420 | 0 0.447 0.741 RC 2421 | N 2422 | f-1759579234 2423 | f 2424 | GR 2425 | GS 2426 | [0.75 0 0 0.75 269.27957 73.98262] CT 2427 | 0 0.447 0.741 RC 2428 | N 2429 | f-1759579234 2430 | f 2431 | GR 2432 | GS 2433 | [0.75 0 0 0.75 273.8139 67.5565] CT 2434 | 0 0.447 0.741 RC 2435 | N 2436 | f-1759579234 2437 | f 2438 | GR 2439 | GS 2440 | [0.75 0 0 0.75 278.32562 61.16246] CT 2441 | 0 0.447 0.741 RC 2442 | N 2443 | f-1759579234 2444 | f 2445 | GR 2446 | GS 2447 | [0.75 0 0 0.75 282.81331 283.94236] CT 2448 | 0 0.447 0.741 RC 2449 | N 2450 | f-1759579234 2451 | f 2452 | GR 2453 | GS 2454 | [0.75 0 0 0.75 287.27563 277.61831] CT 2455 | 0 0.447 0.741 RC 2456 | N 2457 | f-1759579234 2458 | f 2459 | GR 2460 | GS 2461 | [0.75 0 0 0.75 291.7112 271.33216] CT 2462 | 0 0.447 0.741 RC 2463 | N 2464 | f-1759579234 2465 | f 2466 | GR 2467 | GS 2468 | [0.75 0 0 0.75 296.11871 265.08582] CT 2469 | 0 0.447 0.741 RC 2470 | N 2471 | f-1759579234 2472 | f 2473 | GR 2474 | GS 2475 | [0.75 0 0 0.75 300.49677 258.88117] CT 2476 | 0 0.447 0.741 RC 2477 | N 2478 | f-1759579234 2479 | f 2480 | GR 2481 | GS 2482 | [0.75 0 0 0.75 304.84406 252.72013] CT 2483 | 0 0.447 0.741 RC 2484 | N 2485 | f-1759579234 2486 | f 2487 | GR 2488 | GS 2489 | [0.75 0 0 0.75 309.15928 246.60459] CT 2490 | 0 0.447 0.741 RC 2491 | N 2492 | f-1759579234 2493 | f 2494 | GR 2495 | GS 2496 | [0.75 0 0 0.75 313.44106 240.53636] CT 2497 | 0 0.447 0.741 RC 2498 | N 2499 | f-1759579234 2500 | f 2501 | GR 2502 | GS 2503 | [0.75 0 0 0.75 83.24682 234.51732] CT 2504 | 0 0.447 0.741 RC 2505 | N 2506 | f-1759579234 2507 | f 2508 | GR 2509 | GS 2510 | [0.75 0 0 0.75 87.45792 228.54932] CT 2511 | 0 0.447 0.741 RC 2512 | N 2513 | f-1759579234 2514 | f 2515 | GR 2516 | GS 2517 | [0.75 0 0 0.75 91.63173 222.63414] CT 2518 | 0 0.447 0.741 RC 2519 | N 2520 | f-1759579234 2521 | f 2522 | GR 2523 | GS 2524 | [0.75 0 0 0.75 95.76698 216.77362] CT 2525 | 0 0.447 0.741 RC 2526 | N 2527 | f-1759579234 2528 | f 2529 | GR 2530 | GS 2531 | [0.75 0 0 0.75 99.86243 210.9695] CT 2532 | 0 0.447 0.741 RC 2533 | N 2534 | f-1759579234 2535 | f 2536 | GR 2537 | GS 2538 | [0.75 0 0 0.75 103.91681 205.2236] CT 2539 | 0 0.447 0.741 RC 2540 | N 2541 | f-1759579234 2542 | f 2543 | GR 2544 | GS 2545 | [0.75 0 0 0.75 107.92889 199.53763] CT 2546 | 0 0.447 0.741 RC 2547 | N 2548 | f-1759579234 2549 | f 2550 | GR 2551 | GS 2552 | [0.75 0 0 0.75 111.89745 193.91334] CT 2553 | 0 0.447 0.741 RC 2554 | N 2555 | f-1759579234 2556 | f 2557 | GR 2558 | GS 2559 | [0.75 0 0 0.75 115.82128 188.35245] CT 2560 | 0 0.447 0.741 RC 2561 | N 2562 | f-1759579234 2563 | f 2564 | GR 2565 | GS 2566 | [0.75 0 0 0.75 119.69919 182.85663] CT 2567 | 0 0.447 0.741 RC 2568 | N 2569 | f-1759579234 2570 | f 2571 | GR 2572 | GS 2573 | [0.75 0 0 0.75 123.53 177.42757] CT 2574 | 0 0.447 0.741 RC 2575 | N 2576 | f-1759579234 2577 | f 2578 | GR 2579 | GS 2580 | [0.75 0 0 0.75 127.31252 172.06692] CT 2581 | 0 0.447 0.741 RC 2582 | N 2583 | f-1759579234 2584 | f 2585 | GR 2586 | GS 2587 | [0.75 0 0 0.75 131.04563 166.77633] CT 2588 | 0 0.447 0.741 RC 2589 | N 2590 | f-1759579234 2591 | f 2592 | GR 2593 | GS 2594 | [0.75 0 0 0.75 134.72818 161.55738] CT 2595 | 0 0.447 0.741 RC 2596 | N 2597 | f-1759579234 2598 | f 2599 | GR 2600 | GS 2601 | [0.75 0 0 0.75 138.35905 156.41168] CT 2602 | 0 0.447 0.741 RC 2603 | N 2604 | f-1759579234 2605 | f 2606 | GR 2607 | GS 2608 | [0.75 0 0 0.75 141.93712 151.34079] CT 2609 | 0 0.447 0.741 RC 2610 | N 2611 | f-1759579234 2612 | f 2613 | GR 2614 | GS 2615 | [0.75 0 0 0.75 145.46132 146.34626] CT 2616 | 0 0.447 0.741 RC 2617 | N 2618 | f-1759579234 2619 | f 2620 | GR 2621 | GS 2622 | [0.75 0 0 0.75 148.93056 141.42961] CT 2623 | 0 0.447 0.741 RC 2624 | N 2625 | f-1759579234 2626 | f 2627 | GR 2628 | GS 2629 | [0.75 0 0 0.75 152.3438 136.59234] CT 2630 | 0 0.447 0.741 RC 2631 | N 2632 | f-1759579234 2633 | f 2634 | GR 2635 | GS 2636 | [0.75 0 0 0.75 155.69998 131.83591] CT 2637 | 0 0.447 0.741 RC 2638 | N 2639 | f-1759579234 2640 | f 2641 | GR 2642 | GS 2643 | [0.75 0 0 0.75 158.99809 127.16179] CT 2644 | 0 0.447 0.741 RC 2645 | N 2646 | f-1759579234 2647 | f 2648 | GR 2649 | GS 2650 | [0.75 0 0 0.75 162.23713 122.57138] CT 2651 | 0 0.447 0.741 RC 2652 | N 2653 | f-1759579234 2654 | f 2655 | GR 2656 | GS 2657 | [0.75 0 0 0.75 165.41611 118.06611] CT 2658 | 0 0.447 0.741 RC 2659 | N 2660 | f-1759579234 2661 | f 2662 | GR 2663 | GS 2664 | [0.75 0 0 0.75 168.53405 113.64732] CT 2665 | 0 0.447 0.741 RC 2666 | N 2667 | f-1759579234 2668 | f 2669 | GR 2670 | GS 2671 | [0.75 0 0 0.75 171.59002 109.31638] CT 2672 | 0 0.447 0.741 RC 2673 | N 2674 | f-1759579234 2675 | f 2676 | GR 2677 | GS 2678 | [0.75 0 0 0.75 174.58307 105.07458] CT 2679 | 0 0.447 0.741 RC 2680 | N 2681 | f-1759579234 2682 | f 2683 | GR 2684 | GS 2685 | [0.75 0 0 0.75 177.51231 100.92325] CT 2686 | 0 0.447 0.741 RC 2687 | N 2688 | f-1759579234 2689 | f 2690 | GR 2691 | GS 2692 | [0.75 0 0 0.75 180.37682 96.86363] CT 2693 | 0 0.447 0.741 RC 2694 | N 2695 | f-1759579234 2696 | f 2697 | GR 2698 | GS 2699 | [0.75 0 0 0.75 183.17575 92.89696] CT 2700 | 0 0.447 0.741 RC 2701 | N 2702 | f-1759579234 2703 | f 2704 | GR 2705 | GS 2706 | [0.75 0 0 0.75 185.90823 89.02445] CT 2707 | 0 0.447 0.741 RC 2708 | N 2709 | f-1759579234 2710 | f 2711 | GR 2712 | GS 2713 | [0.75 0 0 0.75 188.57344 85.24727] CT 2714 | 0 0.447 0.741 RC 2715 | N 2716 | f-1759579234 2717 | f 2718 | GR 2719 | GS 2720 | [0.75 0 0 0.75 191.17057 81.5666] CT 2721 | 0 0.447 0.741 RC 2722 | N 2723 | f-1759579234 2724 | f 2725 | GR 2726 | GS 2727 | [0.75 0 0 0.75 193.69883 77.98353] CT 2728 | 0 0.447 0.741 RC 2729 | N 2730 | f-1759579234 2731 | f 2732 | GR 2733 | GS 2734 | [0.75 0 0 0.75 196.15743 74.49917] CT 2735 | 0 0.447 0.741 RC 2736 | N 2737 | f-1759579234 2738 | f 2739 | GR 2740 | GS 2741 | [0.75 0 0 0.75 198.54563 71.11457] CT 2742 | 0 0.447 0.741 RC 2743 | N 2744 | f-1759579234 2745 | f 2746 | GR 2747 | GS 2748 | [0.75 0 0 0.75 200.86274 67.83076] CT 2749 | 0 0.447 0.741 RC 2750 | N 2751 | f-1759579234 2752 | f 2753 | GR 2754 | GS 2755 | [0.75 0 0 0.75 203.10798 64.64876] CT 2756 | 0 0.447 0.741 RC 2757 | N 2758 | f-1759579234 2759 | f 2760 | GR 2761 | GS 2762 | [0.75 0 0 0.75 205.28073 61.56951] CT 2763 | 0 0.447 0.741 RC 2764 | N 2765 | f-1759579234 2766 | f 2767 | GR 2768 | GS 2769 | [0.75 0 0 0.75 207.38031 58.59397] CT 2770 | 0 0.447 0.741 RC 2771 | N 2772 | f-1759579234 2773 | f 2774 | GR 2775 | GS 2776 | [0.75 0 0 0.75 209.40607 284.86295] CT 2777 | 0 0.447 0.741 RC 2778 | N 2779 | f-1759579234 2780 | f 2781 | GR 2782 | GS 2783 | [0.75 0 0 0.75 211.35741 282.0975] CT 2784 | 0 0.447 0.741 RC 2785 | N 2786 | f-1759579234 2787 | f 2788 | GR 2789 | GS 2790 | [0.75 0 0 0.75 213.23371 279.4384] CT 2791 | 0 0.447 0.741 RC 2792 | N 2793 | f-1759579234 2794 | f 2795 | GR 2796 | GS 2797 | [0.75 0 0 0.75 215.03442 276.88641] CT 2798 | 0 0.447 0.741 RC 2799 | N 2800 | f-1759579234 2801 | f 2802 | GR 2803 | GS 2804 | [0.75 0 0 0.75 216.759 274.44232] CT 2805 | 0 0.447 0.741 RC 2806 | N 2807 | f-1759579234 2808 | f 2809 | GR 2810 | GS 2811 | [0.75 0 0 0.75 218.40688 272.10693] CT 2812 | 0 0.447 0.741 RC 2813 | N 2814 | f-1759579234 2815 | f 2816 | GR 2817 | GS 2818 | [0.75 0 0 0.75 219.9776 269.88087] CT 2819 | 0 0.447 0.741 RC 2820 | N 2821 | f-1759579234 2822 | f 2823 | GR 2824 | GS 2825 | [0.75 0 0 0.75 221.47066 267.76488] CT 2826 | 0 0.447 0.741 RC 2827 | N 2828 | f-1759579234 2829 | f 2830 | GR 2831 | GS 2832 | [0.75 0 0 0.75 222.88564 265.75957] CT 2833 | 0 0.447 0.741 RC 2834 | N 2835 | f-1759579234 2836 | f 2837 | GR 2838 | GS 2839 | [0.75 0 0 0.75 224.22205 263.86558] CT 2840 | 0 0.447 0.741 RC 2841 | N 2842 | f-1759579234 2843 | f 2844 | GR 2845 | GS 2846 | [0.75 0 0 0.75 225.47955 262.08346] CT 2847 | 0 0.447 0.741 RC 2848 | N 2849 | f-1759579234 2850 | f 2851 | GR 2852 | GS 2853 | [0.75 0 0 0.75 226.6577 260.41374] CT 2854 | 0 0.447 0.741 RC 2855 | N 2856 | f-1759579234 2857 | f 2858 | GR 2859 | GS 2860 | [0.75 0 0 0.75 227.75617 258.85698] CT 2861 | 0 0.447 0.741 RC 2862 | N 2863 | f-1759579234 2864 | f 2865 | GR 2866 | GS 2867 | [0.75 0 0 0.75 228.77463 257.41363] CT 2868 | 0 0.447 0.741 RC 2869 | N 2870 | f-1759579234 2871 | f 2872 | GR 2873 | GS 2874 | [0.75 0 0 0.75 229.71275 256.0841] CT 2875 | 0 0.447 0.741 RC 2876 | N 2877 | f-1759579234 2878 | f 2879 | GR 2880 | GS 2881 | [0.75 0 0 0.75 230.57025 254.86885] CT 2882 | 0 0.447 0.741 RC 2883 | N 2884 | f-1759579234 2885 | f 2886 | GR 2887 | GS 2888 | [0.75 0 0 0.75 231.34689 253.7682] CT 2889 | 0 0.447 0.741 RC 2890 | N 2891 | f-1759579234 2892 | f 2893 | GR 2894 | GS 2895 | [0.75 0 0 0.75 232.0424 252.7825] CT 2896 | 0 0.447 0.741 RC 2897 | N 2898 | f-1759579234 2899 | f 2900 | GR 2901 | GS 2902 | [0.75 0 0 0.75 232.6566 251.91206] CT 2903 | 0 0.447 0.741 RC 2904 | N 2905 | f-1759579234 2906 | f 2907 | GR 2908 | GS 2909 | [0.75 0 0 0.75 233.18925 251.15717] CT 2910 | 0 0.447 0.741 RC 2911 | N 2912 | f-1759579234 2913 | f 2914 | GR 2915 | GS 2916 | [0.75 0 0 0.75 233.64027 250.51799] CT 2917 | 0 0.447 0.741 RC 2918 | N 2919 | f-1759579234 2920 | f 2921 | GR 2922 | GS 2923 | [0.75 0 0 0.75 234.00945 249.99477] CT 2924 | 0 0.447 0.741 RC 2925 | N 2926 | f-1759579234 2927 | f 2928 | GR 2929 | GS 2930 | [0.75 0 0 0.75 234.29672 249.58765] CT 2931 | 0 0.447 0.741 RC 2932 | N 2933 | f-1759579234 2934 | f 2935 | GR 2936 | GS 2937 | [0.75 0 0 0.75 234.50196 249.29677] CT 2938 | 0 0.447 0.741 RC 2939 | N 2940 | f-1759579234 2941 | f 2942 | GR 2943 | GS 2944 | [0.75 0 0 0.75 234.62514 249.12222] CT 2945 | 0 0.447 0.741 RC 2946 | N 2947 | f-1759579234 2948 | f 2949 | GR 2950 | GS 2951 | [0.75 0 0 0.75 234.66621 249.06402] CT 2952 | 0 0.447 0.741 RC 2953 | N 2954 | f-1759579234 2955 | f 2956 | GR 2957 | GS 2958 | [0.75 0 0 0.75 0 0] CT 2959 | 0 1 0 RC 2960 | 1 LJ 2961 | 2 LW 2962 | N 2963 | 185.649 176.339 M 2964 | 331.742 274.814 L 2965 | 119.907 132.025 L 2966 | 266 230.5 L 2967 | 412.093 328.975 L 2968 | 200.258 186.186 L 2969 | 346.351 284.661 L 2970 | S 2971 | GR 2972 | GS 2973 | [0.75 0 0 0.75 139.23667 132.25391] CT 2974 | 1 0 0 RC 2975 | N 2976 | -4 -4 M 2977 | -4 4 L 2978 | 4 4 L 2979 | 4 -4 L 2980 | cp 2981 | f 2982 | GR 2983 | GS 2984 | [0.75 0 0 0.75 139.23667 132.25391] CT 2985 | 1 0 0 RC 2986 | 10.0 ML 2987 | 0.667 LW 2988 | N 2989 | -4 -4 M 2990 | -4 4 L 2991 | 4 4 L 2992 | 4 -4 L 2993 | cp 2994 | S 2995 | GR 2996 | GS 2997 | [0.75 0 0 0.75 248.80637 206.11045] CT 2998 | 1 0 0 RC 2999 | N 3000 | /f-245786148{-4 -4 M 3001 | -4 4 L 3002 | 4 4 L 3003 | 4 -4 L 3004 | cp}def 3005 | f-245786148 3006 | f 3007 | GR 3008 | GS 3009 | [0.75 0 0 0.75 248.80637 206.11045] CT 3010 | 1 0 0 RC 3011 | 10.0 ML 3012 | 0.667 LW 3013 | N 3014 | -4 -4 M 3015 | -4 4 L 3016 | 4 4 L 3017 | 4 -4 L 3018 | cp 3019 | S 3020 | GR 3021 | GS 3022 | [0.75 0 0 0.75 89.93031 99.01846] CT 3023 | 1 0 0 RC 3024 | N 3025 | f-245786148 3026 | f 3027 | GR 3028 | GS 3029 | [0.75 0 0 0.75 89.93031 99.01846] CT 3030 | 1 0 0 RC 3031 | 10.0 ML 3032 | 0.667 LW 3033 | N 3034 | -4 -4 M 3035 | -4 4 L 3036 | 4 4 L 3037 | 4 -4 L 3038 | cp 3039 | S 3040 | GR 3041 | GS 3042 | [0.75 0 0 0.75 199.5 172.875] CT 3043 | 1 0 0 RC 3044 | N 3045 | f-245786148 3046 | f 3047 | GR 3048 | GS 3049 | [0.75 0 0 0.75 199.5 172.875] CT 3050 | 1 0 0 RC 3051 | 10.0 ML 3052 | 0.667 LW 3053 | N 3054 | -4 -4 M 3055 | -4 4 L 3056 | 4 4 L 3057 | 4 -4 L 3058 | cp 3059 | S 3060 | GR 3061 | GS 3062 | [0.75 0 0 0.75 309.06969 246.73155] CT 3063 | 1 0 0 RC 3064 | N 3065 | f-245786148 3066 | f 3067 | GR 3068 | GS 3069 | [0.75 0 0 0.75 309.06969 246.73155] CT 3070 | 1 0 0 RC 3071 | 10.0 ML 3072 | 0.667 LW 3073 | N 3074 | -4 -4 M 3075 | -4 4 L 3076 | 4 4 L 3077 | 4 -4 L 3078 | cp 3079 | S 3080 | GR 3081 | GS 3082 | [0.75 0 0 0.75 150.19365 139.63956] CT 3083 | 1 0 0 RC 3084 | N 3085 | f-245786148 3086 | f 3087 | GR 3088 | GS 3089 | [0.75 0 0 0.75 150.19365 139.63956] CT 3090 | 1 0 0 RC 3091 | 10.0 ML 3092 | 0.667 LW 3093 | N 3094 | -4 -4 M 3095 | -4 4 L 3096 | 4 4 L 3097 | 4 -4 L 3098 | cp 3099 | S 3100 | GR 3101 | GS 3102 | [0.75 0 0 0.75 259.76333 213.4961] CT 3103 | 1 0 0 RC 3104 | N 3105 | f-245786148 3106 | f 3107 | GR 3108 | GS 3109 | [0.75 0 0 0.75 259.76333 213.4961] CT 3110 | 1 0 0 RC 3111 | 10.0 ML 3112 | 0.667 LW 3113 | N 3114 | -4 -4 M 3115 | -4 4 L 3116 | 4 4 L 3117 | 4 -4 L 3118 | cp 3119 | S 3120 | GR 3121 | GS 3122 | [0.75 0 0 0.75 84.33344 113.60596] CT 3123 | 1 0 0 RC 3124 | N 3125 | 0.734 9.198 M 3126 | 0.734 8.12 L 3127 | 2.188 8.12 L 3128 | 2.188 -2.614 L 3129 | 2.188 -3.099 0.734 -3.099 QT 3130 | 0.734 -4.161 L 3131 | 4.531 -4.333 L 3132 | 4.531 -3.333 L 3133 | 5.891 -4.333 7.734 -4.333 QT 3134 | 9.172 -4.333 10.273 -3.747 QT 3135 | 11.375 -3.161 11.992 -2.068 QT 3136 | 12.609 -0.974 12.609 0.448 QT 3137 | 12.609 1.932 11.906 3.026 QT 3138 | 11.203 4.12 10.008 4.682 QT 3139 | 8.813 5.245 7.328 5.245 QT 3140 | 5.797 5.245 4.672 4.323 QT 3141 | 4.672 8.12 L 3142 | 6.109 8.12 L 3143 | 6.109 9.198 L 3144 | 0.734 9.198 L 3145 | cp 3146 | 4.672 3.011 M 3147 | 5.078 3.651 5.734 4.026 QT 3148 | 6.391 4.401 7.094 4.401 QT 3149 | 8.516 4.401 9.172 3.19 QT 3150 | 9.828 1.979 9.828 0.448 QT 3151 | 9.828 -0.411 9.602 -1.302 QT 3152 | 9.375 -2.193 8.828 -2.794 QT 3153 | 8.281 -3.396 7.375 -3.396 QT 3154 | 6.594 -3.396 5.867 -3.068 QT 3155 | 5.141 -2.739 4.672 -2.146 QT 3156 | 4.672 3.011 L 3157 | cp 3158 | f 3159 | GR 3160 | GS 3161 | [0.75 0 0 0.75 84.33344 113.60596] CT 3162 | 1 0 0 RC 3163 | N 3164 | 15.051 7.164 M 3165 | 15.411 7.679 16.005 7.929 QT 3166 | 16.598 8.179 17.27 8.179 QT 3167 | 18.145 8.179 18.512 7.429 QT 3168 | 18.88 6.679 18.88 5.742 QT 3169 | 18.88 5.32 18.801 4.89 QT 3170 | 18.723 4.461 18.544 4.101 QT 3171 | 18.364 3.742 18.044 3.515 QT 3172 | 17.723 3.289 17.27 3.289 QT 3173 | 16.27 3.289 L 3174 | 16.13 3.289 16.13 3.164 QT 3175 | 16.13 3.023 L 3176 | 16.13 2.914 16.27 2.914 QT 3177 | 17.098 2.836 L 3178 | 17.614 2.836 17.965 2.445 QT 3179 | 18.317 2.054 18.481 1.484 QT 3180 | 18.645 0.914 18.645 0.398 QT 3181 | 18.645 -0.321 18.309 -0.782 QT 3182 | 17.973 -1.243 17.27 -1.243 QT 3183 | 16.708 -1.243 16.184 -1.024 QT 3184 | 15.661 -0.805 15.364 -0.368 QT 3185 | 15.395 -0.368 15.411 -0.375 QT 3186 | 15.426 -0.383 15.458 -0.383 QT 3187 | 15.801 -0.383 16.028 -0.149 QT 3188 | 16.255 0.086 16.255 0.414 QT 3189 | 16.255 0.742 16.028 0.976 QT 3190 | 15.801 1.211 15.458 1.211 QT 3191 | 15.13 1.211 14.895 0.976 QT 3192 | 14.661 0.742 14.661 0.414 QT 3193 | 14.661 -0.227 15.051 -0.704 QT 3194 | 15.442 -1.18 16.051 -1.422 QT 3195 | 16.661 -1.664 17.27 -1.664 QT 3196 | 17.739 -1.664 18.239 -1.532 QT 3197 | 18.739 -1.399 19.153 -1.149 QT 3198 | 19.567 -0.899 19.825 -0.5 QT 3199 | 20.083 -0.102 20.083 0.398 QT 3200 | 20.083 1.039 19.801 1.57 QT 3201 | 19.52 2.101 19.028 2.492 QT 3202 | 18.536 2.882 17.958 3.07 QT 3203 | 18.598 3.195 19.184 3.562 QT 3204 | 19.77 3.929 20.13 4.5 QT 3205 | 20.489 5.07 20.489 5.726 QT 3206 | 20.489 6.554 20.036 7.226 QT 3207 | 19.583 7.898 18.84 8.273 QT 3208 | 18.098 8.648 17.27 8.648 QT 3209 | 16.567 8.648 15.864 8.382 QT 3210 | 15.161 8.117 14.708 7.578 QT 3211 | 14.255 7.039 14.255 6.304 QT 3212 | 14.255 5.929 14.505 5.679 QT 3213 | 14.755 5.429 15.13 5.429 QT 3214 | 15.38 5.429 15.575 5.539 QT 3215 | 15.77 5.648 15.887 5.859 QT 3216 | 16.005 6.07 16.005 6.304 QT 3217 | 16.005 6.664 15.747 6.914 QT 3218 | 15.489 7.164 15.13 7.164 QT 3219 | 15.051 7.164 L 3220 | cp 3221 | f 3222 | GR 3223 | GS 3224 | [0.75 0 0 0.75 193.90313 187.4625] CT 3225 | 1 0 0 RC 3226 | N 3227 | /f-974613629{0.734 9.198 M 3228 | 0.734 8.12 L 3229 | 2.188 8.12 L 3230 | 2.188 -2.614 L 3231 | 2.188 -3.099 0.734 -3.099 QT 3232 | 0.734 -4.161 L 3233 | 4.531 -4.333 L 3234 | 4.531 -3.333 L 3235 | 5.891 -4.333 7.734 -4.333 QT 3236 | 9.172 -4.333 10.273 -3.747 QT 3237 | 11.375 -3.161 11.992 -2.068 QT 3238 | 12.609 -0.974 12.609 0.448 QT 3239 | 12.609 1.932 11.906 3.026 QT 3240 | 11.203 4.12 10.008 4.682 QT 3241 | 8.813 5.245 7.328 5.245 QT 3242 | 5.797 5.245 4.672 4.323 QT 3243 | 4.672 8.12 L 3244 | 6.109 8.12 L 3245 | 6.109 9.198 L 3246 | 0.734 9.198 L 3247 | cp 3248 | 4.672 3.011 M 3249 | 5.078 3.651 5.734 4.026 QT 3250 | 6.391 4.401 7.094 4.401 QT 3251 | 8.516 4.401 9.172 3.19 QT 3252 | 9.828 1.979 9.828 0.448 QT 3253 | 9.828 -0.411 9.602 -1.302 QT 3254 | 9.375 -2.193 8.828 -2.794 QT 3255 | 8.281 -3.396 7.375 -3.396 QT 3256 | 6.594 -3.396 5.867 -3.068 QT 3257 | 5.141 -2.739 4.672 -2.146 QT 3258 | 4.672 3.011 L 3259 | cp}def 3260 | f-974613629 3261 | f 3262 | GR 3263 | GS 3264 | [0.75 0 0 0.75 193.90313 187.4625] CT 3265 | 1 0 0 RC 3266 | N 3267 | /f368403175{14.051 5.851 M 3268 | 14.051 5.32 L 3269 | 18.676 -1.602 L 3270 | 18.739 -1.664 18.833 -1.664 QT 3271 | 19.051 -1.664 L 3272 | 19.223 -1.664 19.223 -1.508 QT 3273 | 19.223 5.32 L 3274 | 20.692 5.32 L 3275 | 20.692 5.851 L 3276 | 19.223 5.851 L 3277 | 19.223 7.32 L 3278 | 19.223 7.617 19.661 7.703 QT 3279 | 20.098 7.789 20.676 7.789 QT 3280 | 20.676 8.32 L 3281 | 16.551 8.32 L 3282 | 16.551 7.789 L 3283 | 17.13 7.789 17.567 7.703 QT 3284 | 18.005 7.617 18.005 7.32 QT 3285 | 18.005 5.851 L 3286 | 14.051 5.851 L 3287 | cp 3288 | 14.551 5.32 M 3289 | 18.098 5.32 L 3290 | 18.098 0.007 L 3291 | 14.551 5.32 L 3292 | cp}def 3293 | f368403175 3294 | f 3295 | GR 3296 | GS 3297 | [0.75 0 0 0.75 303.4728 261.31904] CT 3298 | 1 0 0 RC 3299 | N 3300 | f-974613629 3301 | f 3302 | GR 3303 | GS 3304 | [0.75 0 0 0.75 303.4728 261.31904] CT 3305 | 1 0 0 RC 3306 | N 3307 | /f1453945206{14.926 6.617 M 3308 | 15.083 7.054 15.403 7.414 QT 3309 | 15.723 7.773 16.161 7.976 QT 3310 | 16.598 8.179 17.067 8.179 QT 3311 | 18.145 8.179 18.559 7.336 QT 3312 | 18.973 6.492 18.973 5.289 QT 3313 | 18.973 4.773 18.95 4.414 QT 3314 | 18.926 4.054 18.848 3.726 QT 3315 | 18.708 3.195 18.364 2.804 QT 3316 | 18.02 2.414 17.505 2.414 QT 3317 | 17.005 2.414 16.645 2.562 QT 3318 | 16.286 2.711 16.059 2.921 QT 3319 | 15.833 3.132 15.653 3.359 QT 3320 | 15.473 3.586 15.426 3.601 QT 3321 | 15.27 3.601 L 3322 | 15.223 3.601 15.169 3.554 QT 3323 | 15.114 3.507 15.114 3.461 QT 3324 | 15.114 -1.555 L 3325 | 15.114 -1.586 15.161 -1.625 QT 3326 | 15.208 -1.664 15.27 -1.664 QT 3327 | 15.301 -1.664 L 3328 | 16.317 -1.18 17.458 -1.18 QT 3329 | 18.567 -1.18 19.598 -1.664 QT 3330 | 19.645 -1.664 L 3331 | 19.692 -1.664 19.739 -1.633 QT 3332 | 19.786 -1.602 19.786 -1.555 QT 3333 | 19.786 -1.414 L 3334 | 19.786 -1.336 19.755 -1.336 QT 3335 | 19.239 -0.664 18.465 -0.282 QT 3336 | 17.692 0.101 16.864 0.101 QT 3337 | 16.27 0.101 15.63 -0.071 QT 3338 | 15.63 2.773 L 3339 | 16.13 2.367 16.52 2.195 QT 3340 | 16.911 2.023 17.52 2.023 QT 3341 | 18.348 2.023 19.005 2.5 QT 3342 | 19.661 2.976 20.012 3.742 QT 3343 | 20.364 4.507 20.364 5.304 QT 3344 | 20.364 6.211 19.926 6.976 QT 3345 | 19.489 7.742 18.723 8.195 QT 3346 | 17.958 8.648 17.067 8.648 QT 3347 | 16.333 8.648 15.708 8.265 QT 3348 | 15.083 7.882 14.731 7.242 QT 3349 | 14.38 6.601 14.38 5.867 QT 3350 | 14.38 5.539 14.598 5.328 QT 3351 | 14.817 5.117 15.145 5.117 QT 3352 | 15.473 5.117 15.7 5.328 QT 3353 | 15.926 5.539 15.926 5.867 QT 3354 | 15.926 6.195 15.7 6.421 QT 3355 | 15.473 6.648 15.145 6.648 QT 3356 | 15.098 6.648 15.028 6.632 QT 3357 | 14.958 6.617 14.926 6.617 QT 3358 | cp}def 3359 | f1453945206 3360 | f 3361 | GR 3362 | GS 3363 | [0.75 0 0 0.75 144.59676 154.22706] CT 3364 | 1 0 0 RC 3365 | N 3366 | f-974613629 3367 | f 3368 | GR 3369 | GS 3370 | [0.75 0 0 0.75 144.59676 154.22706] CT 3371 | 1 0 0 RC 3372 | N 3373 | /f-560595532{17.38 8.648 M 3374 | 16.442 8.648 15.825 8.156 QT 3375 | 15.208 7.664 14.864 6.875 QT 3376 | 14.52 6.086 14.387 5.218 QT 3377 | 14.255 4.351 14.255 3.476 QT 3378 | 14.255 2.289 14.715 1.093 QT 3379 | 15.176 -0.102 16.075 -0.883 QT 3380 | 16.973 -1.664 18.208 -1.664 QT 3381 | 18.723 -1.664 19.169 -1.477 QT 3382 | 19.614 -1.289 19.864 -0.907 QT 3383 | 20.114 -0.524 20.114 0.007 QT 3384 | 20.114 0.32 19.903 0.523 QT 3385 | 19.692 0.726 19.38 0.726 QT 3386 | 19.098 0.726 18.887 0.515 QT 3387 | 18.676 0.304 18.676 0.007 QT 3388 | 18.676 -0.289 18.887 -0.5 QT 3389 | 19.098 -0.711 19.38 -0.711 QT 3390 | 19.473 -0.711 L 3391 | 19.27 -0.977 18.926 -1.11 QT 3392 | 18.583 -1.243 18.208 -1.243 QT 3393 | 17.755 -1.243 17.372 -1.039 QT 3394 | 16.989 -0.836 16.676 -0.5 QT 3395 | 16.364 -0.164 16.161 0.242 QT 3396 | 15.958 0.648 15.848 1.164 QT 3397 | 15.739 1.679 15.708 2.132 QT 3398 | 15.676 2.586 15.676 3.273 QT 3399 | 15.942 2.664 16.426 2.273 QT 3400 | 16.911 1.882 17.505 1.882 QT 3401 | 18.176 1.882 18.723 2.156 QT 3402 | 19.27 2.429 19.669 2.906 QT 3403 | 20.067 3.382 20.278 4 QT 3404 | 20.489 4.617 20.489 5.242 QT 3405 | 20.489 6.117 20.098 6.914 QT 3406 | 19.708 7.711 18.997 8.179 QT 3407 | 18.286 8.648 17.38 8.648 QT 3408 | cp 3409 | 17.38 8.179 M 3410 | 17.958 8.179 18.309 7.914 QT 3411 | 18.661 7.648 18.825 7.211 QT 3412 | 18.989 6.773 19.028 6.328 QT 3413 | 19.067 5.882 19.067 5.242 QT 3414 | 19.067 4.398 18.989 3.796 QT 3415 | 18.911 3.195 18.551 2.734 QT 3416 | 18.192 2.273 17.458 2.273 QT 3417 | 16.848 2.273 16.458 2.687 QT 3418 | 16.067 3.101 15.887 3.726 QT 3419 | 15.708 4.351 15.708 4.929 QT 3420 | 15.708 5.132 15.723 5.226 QT 3421 | 15.723 5.257 15.715 5.265 QT 3422 | 15.708 5.273 15.708 5.304 QT 3423 | 15.708 5.945 15.84 6.601 QT 3424 | 15.973 7.257 16.34 7.718 QT 3425 | 16.708 8.179 17.38 8.179 QT 3426 | cp}def 3427 | f-560595532 3428 | f 3429 | GR 3430 | GS 3431 | [0.75 0 0 0.75 254.16646 228.08359] CT 3432 | 1 0 0 RC 3433 | N 3434 | f-974613629 3435 | f 3436 | GR 3437 | GS 3438 | [0.75 0 0 0.75 254.16646 228.08359] CT 3439 | 1 0 0 RC 3440 | N 3441 | /f-1285760630{16.239 7.929 M 3442 | 16.239 7.101 16.387 6.304 QT 3443 | 16.536 5.507 16.817 4.726 QT 3444 | 17.098 3.945 17.497 3.195 QT 3445 | 17.895 2.445 18.364 1.773 QT 3446 | 19.739 -0.118 L 3447 | 18.02 -0.118 L 3448 | 15.364 -0.118 15.27 -0.055 QT 3449 | 15.083 0.195 14.911 1.336 QT 3450 | 14.473 1.336 L 3451 | 14.958 -1.821 L 3452 | 15.395 -1.821 L 3453 | 15.395 -1.774 L 3454 | 15.395 -1.508 16.317 -1.422 QT 3455 | 17.239 -1.336 18.114 -1.336 QT 3456 | 20.895 -1.336 L 3457 | 20.895 -0.946 L 3458 | 20.895 -0.946 20.895 -0.938 QT 3459 | 20.895 -0.93 20.895 -0.914 QT 3460 | 18.817 1.992 L 3461 | 18.067 3.117 17.872 4.492 QT 3462 | 17.676 5.867 17.676 7.929 QT 3463 | 17.676 8.226 17.465 8.437 QT 3464 | 17.255 8.648 16.958 8.648 QT 3465 | 16.661 8.648 16.45 8.437 QT 3466 | 16.239 8.226 16.239 7.929 QT 3467 | cp}def 3468 | f-1285760630 3469 | f 3470 | GR 3471 | GS 3472 | [0.75 0 0 0.75 128.04292 116.93702] CT 3473 | 1 0 0 RC 3474 | N 3475 | f-974613629 3476 | f 3477 | GR 3478 | GS 3479 | [0.75 0 0 0.75 128.04292 116.93702] CT 3480 | 1 0 0 RC 3481 | N 3482 | /f430043027{15.02 8.32 M 3483 | 15.02 7.789 L 3484 | 16.895 7.789 16.895 7.32 QT 3485 | 16.895 -0.555 L 3486 | 16.114 -0.18 14.926 -0.18 QT 3487 | 14.926 -0.711 L 3488 | 16.77 -0.711 17.708 -1.664 QT 3489 | 17.926 -1.664 L 3490 | 17.973 -1.664 18.02 -1.625 QT 3491 | 18.067 -1.586 18.067 -1.539 QT 3492 | 18.067 7.32 L 3493 | 18.067 7.789 19.942 7.789 QT 3494 | 19.942 8.32 L 3495 | 15.02 8.32 L 3496 | cp}def 3497 | f430043027 3498 | f 3499 | GR 3500 | GS 3501 | [0.75 0 0 0.75 237.6126 190.79356] CT 3502 | 1 0 0 RC 3503 | N 3504 | f-974613629 3505 | f 3506 | GR 3507 | GS 3508 | [0.75 0 0 0.75 237.6126 190.79356] CT 3509 | 1 0 0 RC 3510 | N 3511 | /f-1128462960{14.38 8.32 M 3512 | 14.38 7.914 L 3513 | 14.38 7.882 14.411 7.836 QT 3514 | 16.739 5.257 L 3515 | 17.27 4.679 17.598 4.296 QT 3516 | 17.926 3.914 18.247 3.406 QT 3517 | 18.567 2.898 18.755 2.375 QT 3518 | 18.942 1.851 18.942 1.273 QT 3519 | 18.942 0.648 18.715 0.086 QT 3520 | 18.489 -0.477 18.036 -0.813 QT 3521 | 17.583 -1.149 16.942 -1.149 QT 3522 | 16.301 -1.149 15.778 -0.75 QT 3523 | 15.255 -0.352 15.036 0.257 QT 3524 | 15.098 0.242 15.208 0.242 QT 3525 | 15.536 0.242 15.778 0.468 QT 3526 | 16.02 0.695 16.02 1.054 QT 3527 | 16.02 1.398 15.778 1.64 QT 3528 | 15.536 1.882 15.208 1.882 QT 3529 | 14.848 1.882 14.614 1.64 QT 3530 | 14.38 1.398 14.38 1.054 QT 3531 | 14.38 0.492 14.59 0 QT 3532 | 14.801 -0.493 15.2 -0.875 QT 3533 | 15.598 -1.258 16.098 -1.461 QT 3534 | 16.598 -1.664 17.161 -1.664 QT 3535 | 18.02 -1.664 18.762 -1.305 QT 3536 | 19.505 -0.946 19.934 -0.282 QT 3537 | 20.364 0.382 20.364 1.273 QT 3538 | 20.364 1.914 20.083 2.5 QT 3539 | 19.801 3.086 19.356 3.57 QT 3540 | 18.911 4.054 18.208 4.664 QT 3541 | 17.505 5.273 17.286 5.476 QT 3542 | 15.598 7.101 L 3543 | 17.036 7.101 L 3544 | 18.098 7.101 18.809 7.086 QT 3545 | 19.52 7.07 19.567 7.023 QT 3546 | 19.739 6.836 19.926 5.648 QT 3547 | 20.364 5.648 L 3548 | 19.942 8.32 L 3549 | 14.38 8.32 L 3550 | cp}def 3551 | f-1128462960 3552 | f 3553 | GR 3554 | GS 3555 | [0.75 0 0 0.75 0 0] CT 3556 | 0 0 1 RC 3557 | [10 6] 0 setdash 3558 | 2 LJ 3559 | 1.333 LW 3560 | N 3561 | 109.706 383.26 M 3562 | 422.294 383.26 L 3563 | S 3564 | GR 3565 | GS 3566 | [0.75 0 0 0.75 0 0] CT 3567 | 0 0 1 RC 3568 | [10 6] 0 setdash 3569 | 2 LJ 3570 | 1.333 LW 3571 | N 3572 | 422.294 77.74 M 3573 | 422.294 383.26 L 3574 | S 3575 | GR 3576 | GS 3577 | [0.75 0 0 0.75 0 0] CT 3578 | 0 0 1 RC 3579 | [10 6] 0 setdash 3580 | 2 LJ 3581 | 1.333 LW 3582 | N 3583 | 109.706 77.74 M 3584 | 422.294 77.74 L 3585 | S 3586 | GR 3587 | GS 3588 | [0.75 0 0 0.75 0 0] CT 3589 | 0 0 1 RC 3590 | [10 6] 0 setdash 3591 | 2 LJ 3592 | 1.333 LW 3593 | N 3594 | 109.706 77.74 M 3595 | 109.706 383.26 L 3596 | S 3597 | GR 3598 | GS 3599 | [0.75 0 0 0.75 199.5 172.875] CT 3600 | 1 0 0 RC 3601 | N 3602 | /f-1601493123{3.129 0 M 3603 | 3.129 -1.728 1.728 -3.129 0 -3.129 C 3604 | -1.728 -3.129 -3.129 -1.728 -3.129 0 C 3605 | -3.129 1.728 -1.728 3.129 0 3.129 C 3606 | 1.728 3.129 3.129 1.728 3.129 0 C 3607 | cp}def 3608 | f-1601493123 3609 | f 3610 | GR 3611 | GS 3612 | [0.75 0 0 0.75 199.5 172.875] CT 3613 | 1 0 0 RC 3614 | N 3615 | /f926402434{0 -2.796 M 3616 | 1.544 -2.796 2.796 -1.544 2.796 0 C 3617 | 2.796 0 L 3618 | 2.796 1.544 1.544 2.796 0 2.796 C 3619 | -1.544 2.796 -2.796 1.544 -2.796 0 C 3620 | -2.796 -1.544 -1.544 -2.796 0 -2.796 C 3621 | cp 3622 | 0 -3.462 M 3623 | -1.912 -3.462 -3.462 -1.912 -3.462 0 C 3624 | -3.462 1.912 -1.912 3.462 0 3.462 C 3625 | 1.912 3.462 3.462 1.912 3.462 0 C 3626 | 3.462 0 L 3627 | 3.462 -1.912 1.912 -3.462 0 -3.462 C 3628 | cp}def 3629 | f926402434 3630 | f 3631 | GR 3632 | GS 3633 | [0.75 0 0 0.75 206.96251 169.22812] CT 3634 | N 3635 | /f1776739717{5.25 5.589 M 3636 | 2.672 5.589 1.75 3.464 QT 3637 | 0.828 1.339 0.828 -1.583 QT 3638 | 0.828 -3.396 1.156 -5.005 QT 3639 | 1.484 -6.614 2.477 -7.739 QT 3640 | 3.469 -8.864 5.25 -8.864 QT 3641 | 6.641 -8.864 7.516 -8.193 QT 3642 | 8.391 -7.521 8.859 -6.443 QT 3643 | 9.328 -5.364 9.492 -4.146 QT 3644 | 9.656 -2.927 9.656 -1.583 QT 3645 | 9.656 0.229 9.328 1.8 QT 3646 | 9 3.37 8.023 4.479 QT 3647 | 7.047 5.589 5.25 5.589 QT 3648 | cp 3649 | 5.25 5.042 M 3650 | 6.422 5.042 6.992 3.839 QT 3651 | 7.563 2.636 7.695 1.182 QT 3652 | 7.828 -0.271 7.828 -1.911 QT 3653 | 7.828 -3.489 7.695 -4.825 QT 3654 | 7.563 -6.161 6.992 -7.239 QT 3655 | 6.422 -8.318 5.25 -8.318 QT 3656 | 4.063 -8.318 3.484 -7.232 QT 3657 | 2.906 -6.146 2.773 -4.818 QT 3658 | 2.641 -3.489 2.641 -1.911 QT 3659 | 2.641 -0.739 2.703 0.292 QT 3660 | 2.766 1.323 3.008 2.425 QT 3661 | 3.25 3.526 3.797 4.284 QT 3662 | 4.344 5.042 5.25 5.042 QT 3663 | cp}def 3664 | f1776739717 3665 | f 3666 | GR 3667 | GS 3668 | [0.75 0 0 0.75 206.96251 169.22812] CT 3669 | N 3670 | /f-1947529501{14.417 -3.466 M 3671 | 13.635 -3.466 12.971 -3.856 QT 3672 | 12.307 -4.247 11.909 -4.926 QT 3673 | 11.51 -5.606 11.51 -6.372 QT 3674 | 11.51 -7.137 11.909 -7.817 QT 3675 | 12.307 -8.497 12.971 -8.887 QT 3676 | 13.635 -9.278 14.417 -9.278 QT 3677 | 15.198 -9.278 15.862 -8.88 QT 3678 | 16.526 -8.481 16.917 -7.809 QT 3679 | 17.307 -7.137 17.307 -6.372 QT 3680 | 17.307 -5.606 16.917 -4.934 QT 3681 | 16.526 -4.262 15.862 -3.864 QT 3682 | 15.198 -3.466 14.417 -3.466 QT 3683 | cp 3684 | 14.417 -4.059 M 3685 | 15.354 -4.059 16.034 -4.747 QT 3686 | 16.714 -5.434 16.714 -6.372 QT 3687 | 16.714 -6.966 16.401 -7.505 QT 3688 | 16.089 -8.044 15.557 -8.364 QT 3689 | 15.026 -8.684 14.417 -8.684 QT 3690 | 13.948 -8.684 13.534 -8.505 QT 3691 | 13.12 -8.325 12.792 -7.997 QT 3692 | 12.464 -7.669 12.284 -7.255 QT 3693 | 12.104 -6.841 12.104 -6.372 QT 3694 | 12.104 -5.434 12.784 -4.747 QT 3695 | 13.464 -4.059 14.417 -4.059 QT 3696 | cp}def 3697 | f-1947529501 3698 | f 3699 | GR 3700 | GS 3701 | [0.75 0 0 0.75 282.81331 283.94236] CT 3702 | 1 0 0 RC 3703 | N 3704 | f-1601493123 3705 | f 3706 | GR 3707 | GS 3708 | [0.75 0 0 0.75 282.81331 283.94236] CT 3709 | 1 0 0 RC 3710 | N 3711 | f926402434 3712 | f 3713 | GR 3714 | GS 3715 | [0.75 0 0 0.75 120.67438 284.58755] CT 3716 | 1 0 0 RC 3717 | N 3718 | f-1601493123 3719 | f 3720 | GR 3721 | GS 3722 | [0.75 0 0 0.75 120.67438 284.58755] CT 3723 | 1 0 0 RC 3724 | N 3725 | f926402434 3726 | f 3727 | GR 3728 | GS 3729 | [0.75 0 0 0.75 209.40607 284.86295] CT 3730 | 1 0 0 RC 3731 | N 3732 | f-1601493123 3733 | f 3734 | GR 3735 | GS 3736 | [0.75 0 0 0.75 209.40607 284.86295] CT 3737 | 1 0 0 RC 3738 | N 3739 | f926402434 3740 | f 3741 | GR 3742 | GS 3743 | [0.75 0 0 0.75 207.38031 58.59397] CT 3744 | 1 0 0 RC 3745 | N 3746 | f-1601493123 3747 | f 3748 | GR 3749 | GS 3750 | [0.75 0 0 0.75 207.38031 58.59397] CT 3751 | 1 0 0 RC 3752 | N 3753 | f926402434 3754 | f 3755 | GR 3756 | GS 3757 | [0.75 0 0 0.75 275.35082 298.52987] CT 3758 | N 3759 | /f-484157813{1.953 5.12 M 3760 | 1.953 4.386 L 3761 | 4.578 4.386 4.578 3.714 QT 3762 | 4.578 -7.302 L 3763 | 3.484 -6.786 1.828 -6.786 QT 3764 | 1.828 -7.521 L 3765 | 4.406 -7.521 5.719 -8.864 QT 3766 | 6.016 -8.864 L 3767 | 6.078 -8.864 6.148 -8.81 QT 3768 | 6.219 -8.755 6.219 -8.677 QT 3769 | 6.219 3.714 L 3770 | 6.219 4.386 8.844 4.386 QT 3771 | 8.844 5.12 L 3772 | 1.953 5.12 L 3773 | cp}def 3774 | f-484157813 3775 | f 3776 | GR 3777 | GS 3778 | [0.75 0 0 0.75 275.35082 298.52987] CT 3779 | N 3780 | /f-794516132{11.542 1.932 M 3781 | 11.542 0.667 12.378 -0.302 QT 3782 | 13.214 -1.271 14.51 -1.911 QT 3783 | 13.729 -2.411 L 3784 | 13.01 -2.896 12.565 -3.677 QT 3785 | 12.12 -4.458 12.12 -5.318 QT 3786 | 12.12 -6.318 12.643 -7.13 QT 3787 | 13.167 -7.943 14.042 -8.404 QT 3788 | 14.917 -8.864 15.917 -8.864 QT 3789 | 16.854 -8.864 17.721 -8.489 QT 3790 | 18.589 -8.114 19.143 -7.404 QT 3791 | 19.698 -6.693 19.698 -5.724 QT 3792 | 19.698 -5.005 19.37 -4.404 QT 3793 | 19.042 -3.802 18.456 -3.318 QT 3794 | 17.87 -2.833 17.214 -2.505 QT 3795 | 18.417 -1.724 L 3796 | 19.245 -1.193 19.753 -0.31 QT 3797 | 20.26 0.573 20.26 1.557 QT 3798 | 20.26 2.682 19.651 3.62 QT 3799 | 19.042 4.557 18.042 5.073 QT 3800 | 17.042 5.589 15.917 5.589 QT 3801 | 14.823 5.589 13.815 5.143 QT 3802 | 12.807 4.698 12.175 3.862 QT 3803 | 11.542 3.026 11.542 1.932 QT 3804 | cp 3805 | 12.682 1.932 M 3806 | 12.682 2.761 13.143 3.448 QT 3807 | 13.604 4.136 14.354 4.526 QT 3808 | 15.104 4.917 15.917 4.917 QT 3809 | 17.135 4.917 18.128 4.206 QT 3810 | 19.12 3.495 19.12 2.307 QT 3811 | 19.12 1.917 18.964 1.518 QT 3812 | 18.807 1.12 18.526 0.8 QT 3813 | 18.245 0.479 17.901 0.276 QT 3814 | 15.073 -1.552 L 3815 | 14.417 -1.208 13.87 -0.677 QT 3816 | 13.323 -0.146 13.003 0.526 QT 3817 | 12.682 1.198 12.682 1.932 QT 3818 | cp 3819 | 14.135 -4.474 M 3820 | 16.682 -2.833 L 3821 | 17.557 -3.349 18.12 -4.075 QT 3822 | 18.682 -4.802 18.682 -5.724 QT 3823 | 18.682 -6.427 18.292 -7.013 QT 3824 | 17.901 -7.599 17.26 -7.927 QT 3825 | 16.62 -8.255 15.901 -8.255 QT 3826 | 15.26 -8.255 14.612 -8.013 QT 3827 | 13.964 -7.771 13.55 -7.286 QT 3828 | 13.135 -6.802 13.135 -6.146 QT 3829 | 13.135 -5.161 14.135 -4.474 QT 3830 | cp}def 3831 | f-794516132 3832 | f 3833 | GR 3834 | GS 3835 | [0.75 0 0 0.75 275.35082 298.52987] CT 3836 | N 3837 | /f-163326416{25.083 -3.466 M 3838 | 24.302 -3.466 23.638 -3.856 QT 3839 | 22.974 -4.247 22.576 -4.926 QT 3840 | 22.177 -5.606 22.177 -6.372 QT 3841 | 22.177 -7.137 22.576 -7.817 QT 3842 | 22.974 -8.497 23.638 -8.887 QT 3843 | 24.302 -9.278 25.083 -9.278 QT 3844 | 25.865 -9.278 26.529 -8.88 QT 3845 | 27.193 -8.481 27.583 -7.809 QT 3846 | 27.974 -7.137 27.974 -6.372 QT 3847 | 27.974 -5.606 27.583 -4.934 QT 3848 | 27.193 -4.262 26.529 -3.864 QT 3849 | 25.865 -3.466 25.083 -3.466 QT 3850 | cp 3851 | 25.083 -4.059 M 3852 | 26.021 -4.059 26.701 -4.747 QT 3853 | 27.38 -5.434 27.38 -6.372 QT 3854 | 27.38 -6.966 27.068 -7.505 QT 3855 | 26.755 -8.044 26.224 -8.364 QT 3856 | 25.693 -8.684 25.083 -8.684 QT 3857 | 24.615 -8.684 24.201 -8.505 QT 3858 | 23.787 -8.325 23.458 -7.997 QT 3859 | 23.13 -7.669 22.951 -7.255 QT 3860 | 22.771 -6.841 22.771 -6.372 QT 3861 | 22.771 -5.434 23.451 -4.747 QT 3862 | 24.13 -4.059 25.083 -4.059 QT 3863 | cp}def 3864 | f-163326416 3865 | f 3866 | GR 3867 | GS 3868 | [0.75 0 0 0.75 113.21188 299.17504] CT 3869 | N 3870 | /f-1588546591{2.141 0.292 M 3871 | 1.969 0.292 1.859 0.159 QT 3872 | 1.75 0.026 1.75 -0.13 QT 3873 | 1.75 -0.286 1.859 -0.419 QT 3874 | 1.969 -0.552 2.141 -0.552 QT 3875 | 14.188 -0.552 L 3876 | 14.359 -0.552 14.469 -0.419 QT 3877 | 14.578 -0.286 14.578 -0.13 QT 3878 | 14.578 0.026 14.469 0.159 QT 3879 | 14.359 0.292 14.188 0.292 QT 3880 | 2.141 0.292 L 3881 | cp}def 3882 | f-1588546591 3883 | f 3884 | GR 3885 | GS 3886 | [0.75 0 0 0.75 113.21188 299.17504] CT 3887 | N 3888 | /f-1147961615{18.546 5.12 M 3889 | 18.546 4.386 L 3890 | 21.171 4.386 21.171 3.714 QT 3891 | 21.171 -7.302 L 3892 | 20.077 -6.786 18.421 -6.786 QT 3893 | 18.421 -7.521 L 3894 | 20.999 -7.521 22.311 -8.864 QT 3895 | 22.608 -8.864 L 3896 | 22.671 -8.864 22.741 -8.81 QT 3897 | 22.811 -8.755 22.811 -8.677 QT 3898 | 22.811 3.714 L 3899 | 22.811 4.386 25.436 4.386 QT 3900 | 25.436 5.12 L 3901 | 18.546 5.12 L 3902 | cp}def 3903 | f-1147961615 3904 | f 3905 | GR 3906 | GS 3907 | [0.75 0 0 0.75 113.21188 299.17504] CT 3908 | N 3909 | /f-956952899{30.916 4.573 M 3910 | 30.916 3.401 31.119 2.284 QT 3911 | 31.322 1.167 31.712 0.081 QT 3912 | 32.103 -1.005 32.666 -2.06 QT 3913 | 33.228 -3.114 33.9 -4.036 QT 3914 | 35.806 -6.708 L 3915 | 33.416 -6.708 L 3916 | 29.681 -6.708 29.572 -6.599 QT 3917 | 29.291 -6.255 29.041 -4.661 QT 3918 | 28.431 -4.661 L 3919 | 29.119 -9.068 L 3920 | 29.744 -9.068 L 3921 | 29.744 -9.005 L 3922 | 29.744 -8.63 31.025 -8.521 QT 3923 | 32.306 -8.411 33.541 -8.411 QT 3924 | 37.447 -8.411 L 3925 | 37.447 -7.864 L 3926 | 37.447 -7.849 37.439 -7.833 QT 3927 | 37.431 -7.818 37.416 -7.802 QT 3928 | 34.525 -3.739 L 3929 | 33.462 -2.161 33.197 -0.232 QT 3930 | 32.931 1.698 32.931 4.573 QT 3931 | 32.931 4.979 32.634 5.284 QT 3932 | 32.337 5.589 31.931 5.589 QT 3933 | 31.509 5.589 31.212 5.284 QT 3934 | 30.916 4.979 30.916 4.573 QT 3935 | cp}def 3936 | f-956952899 3937 | f 3938 | GR 3939 | GS 3940 | [0.75 0 0 0.75 113.21188 299.17504] CT 3941 | N 3942 | /f1194415555{41.676 -3.466 M 3943 | 40.895 -3.466 40.231 -3.856 QT 3944 | 39.567 -4.247 39.168 -4.926 QT 3945 | 38.77 -5.606 38.77 -6.372 QT 3946 | 38.77 -7.137 39.168 -7.817 QT 3947 | 39.567 -8.497 40.231 -8.887 QT 3948 | 40.895 -9.278 41.676 -9.278 QT 3949 | 42.457 -9.278 43.121 -8.88 QT 3950 | 43.785 -8.481 44.176 -7.809 QT 3951 | 44.567 -7.137 44.567 -6.372 QT 3952 | 44.567 -5.606 44.176 -4.934 QT 3953 | 43.785 -4.262 43.121 -3.864 QT 3954 | 42.457 -3.466 41.676 -3.466 QT 3955 | cp 3956 | 41.676 -4.059 M 3957 | 42.614 -4.059 43.293 -4.747 QT 3958 | 43.973 -5.434 43.973 -6.372 QT 3959 | 43.973 -6.966 43.66 -7.505 QT 3960 | 43.348 -8.044 42.817 -8.364 QT 3961 | 42.285 -8.684 41.676 -8.684 QT 3962 | 41.207 -8.684 40.793 -8.505 QT 3963 | 40.379 -8.325 40.051 -7.997 QT 3964 | 39.723 -7.669 39.543 -7.255 QT 3965 | 39.364 -6.841 39.364 -6.372 QT 3966 | 39.364 -5.434 40.043 -4.747 QT 3967 | 40.723 -4.059 41.676 -4.059 QT 3968 | cp}def 3969 | f1194415555 3970 | f 3971 | GR 3972 | GS 3973 | [0.75 0 0 0.75 201.94357 299.45045] CT 3974 | N 3975 | /f-275212310{5.25 5.589 M 3976 | 3.953 5.589 3.078 4.893 QT 3977 | 2.203 4.198 1.727 3.096 QT 3978 | 1.25 1.995 1.063 0.784 QT 3979 | 0.875 -0.427 0.875 -1.661 QT 3980 | 0.875 -3.333 1.523 -5.005 QT 3981 | 2.172 -6.677 3.43 -7.771 QT 3982 | 4.688 -8.864 6.406 -8.864 QT 3983 | 7.125 -8.864 7.75 -8.591 QT 3984 | 8.375 -8.318 8.727 -7.794 QT 3985 | 9.078 -7.271 9.078 -6.521 QT 3986 | 9.078 -6.083 8.781 -5.794 QT 3987 | 8.484 -5.505 8.063 -5.505 QT 3988 | 7.656 -5.505 7.359 -5.802 QT 3989 | 7.063 -6.099 7.063 -6.521 QT 3990 | 7.063 -6.927 7.359 -7.224 QT 3991 | 7.656 -7.521 8.063 -7.521 QT 3992 | 8.172 -7.521 L 3993 | 7.906 -7.896 7.422 -8.075 QT 3994 | 6.938 -8.255 6.406 -8.255 QT 3995 | 5.766 -8.255 5.234 -7.982 QT 3996 | 4.703 -7.708 4.266 -7.239 QT 3997 | 3.828 -6.771 3.547 -6.2 QT 3998 | 3.266 -5.63 3.102 -4.904 QT 3999 | 2.938 -4.177 2.898 -3.536 QT 4000 | 2.859 -2.896 2.859 -1.943 QT 4001 | 3.234 -2.802 3.906 -3.349 QT 4002 | 4.578 -3.896 5.438 -3.896 QT 4003 | 6.375 -3.896 7.141 -3.513 QT 4004 | 7.906 -3.13 8.461 -2.458 QT 4005 | 9.016 -1.786 9.305 -0.927 QT 4006 | 9.594 -0.068 9.594 0.807 QT 4007 | 9.594 2.042 9.047 3.159 QT 4008 | 8.5 4.276 7.508 4.932 QT 4009 | 6.516 5.589 5.25 5.589 QT 4010 | cp 4011 | 5.25 4.917 M 4012 | 6.063 4.917 6.555 4.55 QT 4013 | 7.047 4.182 7.273 3.573 QT 4014 | 7.5 2.964 7.563 2.339 QT 4015 | 7.625 1.714 7.625 0.807 QT 4016 | 7.625 -0.38 7.508 -1.216 QT 4017 | 7.391 -2.052 6.891 -2.693 QT 4018 | 6.391 -3.333 5.359 -3.333 QT 4019 | 4.5 -3.333 3.953 -2.763 QT 4020 | 3.406 -2.193 3.156 -1.318 QT 4021 | 2.906 -0.443 2.906 0.37 QT 4022 | 2.906 0.651 2.922 0.792 QT 4023 | 2.922 0.823 2.914 0.846 QT 4024 | 2.906 0.87 2.906 0.901 QT 4025 | 2.906 1.792 3.086 2.714 QT 4026 | 3.266 3.636 3.789 4.276 QT 4027 | 4.313 4.917 5.25 4.917 QT 4028 | cp}def 4029 | f-275212310 4030 | f 4031 | GR 4032 | GS 4033 | [0.75 0 0 0.75 201.94357 299.45045] CT 4034 | N 4035 | /f-374746124{12.495 2.729 M 4036 | 12.714 3.339 13.159 3.846 QT 4037 | 13.604 4.354 14.214 4.636 QT 4038 | 14.823 4.917 15.479 4.917 QT 4039 | 16.995 4.917 17.565 3.737 QT 4040 | 18.135 2.557 18.135 0.87 QT 4041 | 18.135 0.151 18.112 -0.349 QT 4042 | 18.089 -0.849 17.979 -1.302 QT 4043 | 17.776 -2.052 17.292 -2.607 QT 4044 | 16.807 -3.161 16.104 -3.161 QT 4045 | 15.401 -3.161 14.893 -2.943 QT 4046 | 14.385 -2.724 14.065 -2.435 QT 4047 | 13.745 -2.146 13.495 -1.833 QT 4048 | 13.245 -1.521 13.182 -1.489 QT 4049 | 12.948 -1.489 L 4050 | 12.901 -1.489 12.823 -1.56 QT 4051 | 12.745 -1.63 12.745 -1.693 QT 4052 | 12.745 -8.708 L 4053 | 12.745 -8.755 12.815 -8.81 QT 4054 | 12.885 -8.864 12.948 -8.864 QT 4055 | 13.01 -8.864 L 4056 | 14.432 -8.193 16.026 -8.193 QT 4057 | 17.573 -8.193 19.026 -8.864 QT 4058 | 19.089 -8.864 L 4059 | 19.151 -8.864 19.214 -8.818 QT 4060 | 19.276 -8.771 19.276 -8.708 QT 4061 | 19.276 -8.505 L 4062 | 19.276 -8.411 19.245 -8.411 QT 4063 | 18.526 -7.458 17.44 -6.919 QT 4064 | 16.354 -6.38 15.198 -6.38 QT 4065 | 14.354 -6.38 13.479 -6.614 QT 4066 | 13.479 -2.646 L 4067 | 14.167 -3.224 14.721 -3.458 QT 4068 | 15.276 -3.693 16.12 -3.693 QT 4069 | 17.276 -3.693 18.198 -3.029 QT 4070 | 19.12 -2.364 19.612 -1.294 QT 4071 | 20.104 -0.224 20.104 0.901 QT 4072 | 20.104 2.151 19.479 3.229 QT 4073 | 18.854 4.307 17.792 4.948 QT 4074 | 16.729 5.589 15.479 5.589 QT 4075 | 14.448 5.589 13.581 5.05 QT 4076 | 12.714 4.511 12.214 3.612 QT 4077 | 11.714 2.714 11.714 1.698 QT 4078 | 11.714 1.229 12.018 0.932 QT 4079 | 12.323 0.636 12.792 0.636 QT 4080 | 13.245 0.636 13.557 0.932 QT 4081 | 13.87 1.229 13.87 1.698 QT 4082 | 13.87 2.151 13.557 2.464 QT 4083 | 13.245 2.776 12.792 2.776 QT 4084 | 12.714 2.776 12.62 2.761 QT 4085 | 12.526 2.745 12.495 2.729 QT 4086 | cp}def 4087 | f-374746124 4088 | f 4089 | GR 4090 | GS 4091 | [0.75 0 0 0.75 201.94357 299.45045] CT 4092 | N 4093 | f-163326416 4094 | f 4095 | GR 4096 | GS 4097 | [0.75 0 0 0.75 199.91782 73.18147] CT 4098 | N 4099 | f-275212310 4100 | f 4101 | GR 4102 | GS 4103 | [0.75 0 0 0.75 199.91782 73.18147] CT 4104 | N 4105 | /f1889942886{11.245 1.651 M 4106 | 11.245 0.917 L 4107 | 17.745 -8.771 L 4108 | 17.807 -8.864 17.964 -8.864 QT 4109 | 18.26 -8.864 L 4110 | 18.495 -8.864 18.495 -8.63 QT 4111 | 18.495 0.917 L 4112 | 20.557 0.917 L 4113 | 20.557 1.651 L 4114 | 18.495 1.651 L 4115 | 18.495 3.714 L 4116 | 18.495 4.151 19.112 4.268 QT 4117 | 19.729 4.386 20.542 4.386 QT 4118 | 20.542 5.12 L 4119 | 14.76 5.12 L 4120 | 14.76 4.386 L 4121 | 15.573 4.386 16.182 4.268 QT 4122 | 16.792 4.151 16.792 3.714 QT 4123 | 16.792 1.651 L 4124 | 11.245 1.651 L 4125 | cp 4126 | 11.948 0.917 M 4127 | 16.917 0.917 L 4128 | 16.917 -6.521 L 4129 | 11.948 0.917 L 4130 | cp}def 4131 | f1889942886 4132 | f 4133 | GR 4134 | GS 4135 | [0.75 0 0 0.75 199.91782 73.18147] CT 4136 | N 4137 | f-163326416 4138 | f 4139 | GR 4140 | GS 4141 | [0.75 0 0 0.75 116.18668 61.80764] CT 4142 | 1 0 0 RC 4143 | N 4144 | f-1601493123 4145 | f 4146 | GR 4147 | GS 4148 | [0.75 0 0 0.75 116.18668 61.80764] CT 4149 | 1 0 0 RC 4150 | N 4151 | f926402434 4152 | f 4153 | GR 4154 | GS 4155 | [0.75 0 0 0.75 278.32562 61.16246] CT 4156 | 1 0 0 RC 4157 | N 4158 | f-1601493123 4159 | f 4160 | GR 4161 | GS 4162 | [0.75 0 0 0.75 278.32562 61.16246] CT 4163 | 1 0 0 RC 4164 | N 4165 | f926402434 4166 | f 4167 | GR 4168 | GS 4169 | [0.75 0 0 0.75 189.59393 60.88705] CT 4170 | 1 0 0 RC 4171 | N 4172 | f-1601493123 4173 | f 4174 | GR 4175 | GS 4176 | [0.75 0 0 0.75 189.59393 60.88705] CT 4177 | 1 0 0 RC 4178 | N 4179 | f926402434 4180 | f 4181 | GR 4182 | GS 4183 | [0.75 0 0 0.75 191.61969 287.15602] CT 4184 | 1 0 0 RC 4185 | N 4186 | f-1601493123 4187 | f 4188 | GR 4189 | GS 4190 | [0.75 0 0 0.75 191.61969 287.15602] CT 4191 | 1 0 0 RC 4192 | N 4193 | f926402434 4194 | f 4195 | GR 4196 | GS 4197 | [0.75 0 0 0.75 103.12731 47.22013] CT 4198 | N 4199 | f-1588546591 4200 | f 4201 | GR 4202 | GS 4203 | [0.75 0 0 0.75 103.12731 47.22013] CT 4204 | N 4205 | f-1147961615 4206 | f 4207 | GR 4208 | GS 4209 | [0.75 0 0 0.75 103.12731 47.22013] CT 4210 | N 4211 | /f1294473846{28.134 1.932 M 4212 | 28.134 0.667 28.97 -0.302 QT 4213 | 29.806 -1.271 31.103 -1.911 QT 4214 | 30.322 -2.411 L 4215 | 29.603 -2.896 29.158 -3.677 QT 4216 | 28.712 -4.458 28.712 -5.318 QT 4217 | 28.712 -6.318 29.236 -7.13 QT 4218 | 29.759 -7.943 30.634 -8.404 QT 4219 | 31.509 -8.864 32.509 -8.864 QT 4220 | 33.447 -8.864 34.314 -8.489 QT 4221 | 35.181 -8.114 35.736 -7.404 QT 4222 | 36.291 -6.693 36.291 -5.724 QT 4223 | 36.291 -5.005 35.962 -4.404 QT 4224 | 35.634 -3.802 35.048 -3.318 QT 4225 | 34.462 -2.833 33.806 -2.505 QT 4226 | 35.009 -1.724 L 4227 | 35.837 -1.193 36.345 -0.31 QT 4228 | 36.853 0.573 36.853 1.557 QT 4229 | 36.853 2.682 36.244 3.62 QT 4230 | 35.634 4.557 34.634 5.073 QT 4231 | 33.634 5.589 32.509 5.589 QT 4232 | 31.416 5.589 30.408 5.143 QT 4233 | 29.4 4.698 28.767 3.862 QT 4234 | 28.134 3.026 28.134 1.932 QT 4235 | cp 4236 | 29.275 1.932 M 4237 | 29.275 2.761 29.736 3.448 QT 4238 | 30.197 4.136 30.947 4.526 QT 4239 | 31.697 4.917 32.509 4.917 QT 4240 | 33.728 4.917 34.72 4.206 QT 4241 | 35.712 3.495 35.712 2.307 QT 4242 | 35.712 1.917 35.556 1.518 QT 4243 | 35.4 1.12 35.119 0.8 QT 4244 | 34.837 0.479 34.494 0.276 QT 4245 | 31.666 -1.552 L 4246 | 31.009 -1.208 30.462 -0.677 QT 4247 | 29.916 -0.146 29.595 0.526 QT 4248 | 29.275 1.198 29.275 1.932 QT 4249 | cp 4250 | 30.728 -4.474 M 4251 | 33.275 -2.833 L 4252 | 34.15 -3.349 34.712 -4.075 QT 4253 | 35.275 -4.802 35.275 -5.724 QT 4254 | 35.275 -6.427 34.884 -7.013 QT 4255 | 34.494 -7.599 33.853 -7.927 QT 4256 | 33.212 -8.255 32.494 -8.255 QT 4257 | 31.853 -8.255 31.205 -8.013 QT 4258 | 30.556 -7.771 30.142 -7.286 QT 4259 | 29.728 -6.802 29.728 -6.146 QT 4260 | 29.728 -5.161 30.728 -4.474 QT 4261 | cp}def 4262 | f1294473846 4263 | f 4264 | GR 4265 | GS 4266 | [0.75 0 0 0.75 103.12731 47.22013] CT 4267 | N 4268 | f1194415555 4269 | f 4270 | GR 4271 | GS 4272 | [0.75 0 0 0.75 265.26624 46.57496] CT 4273 | N 4274 | f-484157813 4275 | f 4276 | GR 4277 | GS 4278 | [0.75 0 0 0.75 265.26624 46.57496] CT 4279 | N 4280 | /f-429230146{14.323 4.573 M 4281 | 14.323 3.401 14.526 2.284 QT 4282 | 14.729 1.167 15.12 0.081 QT 4283 | 15.51 -1.005 16.073 -2.06 QT 4284 | 16.635 -3.114 17.307 -4.036 QT 4285 | 19.214 -6.708 L 4286 | 16.823 -6.708 L 4287 | 13.089 -6.708 12.979 -6.599 QT 4288 | 12.698 -6.255 12.448 -4.661 QT 4289 | 11.839 -4.661 L 4290 | 12.526 -9.068 L 4291 | 13.151 -9.068 L 4292 | 13.151 -9.005 L 4293 | 13.151 -8.63 14.432 -8.521 QT 4294 | 15.714 -8.411 16.948 -8.411 QT 4295 | 20.854 -8.411 L 4296 | 20.854 -7.864 L 4297 | 20.854 -7.849 20.846 -7.833 QT 4298 | 20.839 -7.818 20.823 -7.802 QT 4299 | 17.932 -3.739 L 4300 | 16.87 -2.161 16.604 -0.232 QT 4301 | 16.339 1.698 16.339 4.573 QT 4302 | 16.339 4.979 16.042 5.284 QT 4303 | 15.745 5.589 15.339 5.589 QT 4304 | 14.917 5.589 14.62 5.284 QT 4305 | 14.323 4.979 14.323 4.573 QT 4306 | cp}def 4307 | f-429230146 4308 | f 4309 | GR 4310 | GS 4311 | [0.75 0 0 0.75 265.26624 46.57496] CT 4312 | N 4313 | f-163326416 4314 | f 4315 | GR 4316 | GS 4317 | [0.75 0 0 0.75 176.53455 46.29954] CT 4318 | N 4319 | f-1588546591 4320 | f 4321 | GR 4322 | GS 4323 | [0.75 0 0 0.75 176.53455 46.29954] CT 4324 | N 4325 | /f-1048384001{21.843 5.589 M 4326 | 20.546 5.589 19.671 4.893 QT 4327 | 18.796 4.198 18.319 3.096 QT 4328 | 17.843 1.995 17.655 0.784 QT 4329 | 17.468 -0.427 17.468 -1.661 QT 4330 | 17.468 -3.333 18.116 -5.005 QT 4331 | 18.765 -6.677 20.022 -7.771 QT 4332 | 21.28 -8.864 22.999 -8.864 QT 4333 | 23.718 -8.864 24.343 -8.591 QT 4334 | 24.968 -8.318 25.319 -7.794 QT 4335 | 25.671 -7.271 25.671 -6.521 QT 4336 | 25.671 -6.083 25.374 -5.794 QT 4337 | 25.077 -5.505 24.655 -5.505 QT 4338 | 24.249 -5.505 23.952 -5.802 QT 4339 | 23.655 -6.099 23.655 -6.521 QT 4340 | 23.655 -6.927 23.952 -7.224 QT 4341 | 24.249 -7.521 24.655 -7.521 QT 4342 | 24.765 -7.521 L 4343 | 24.499 -7.896 24.015 -8.075 QT 4344 | 23.53 -8.255 22.999 -8.255 QT 4345 | 22.358 -8.255 21.827 -7.982 QT 4346 | 21.296 -7.708 20.858 -7.239 QT 4347 | 20.421 -6.771 20.14 -6.2 QT 4348 | 19.858 -5.63 19.694 -4.904 QT 4349 | 19.53 -4.177 19.491 -3.536 QT 4350 | 19.452 -2.896 19.452 -1.943 QT 4351 | 19.827 -2.802 20.499 -3.349 QT 4352 | 21.171 -3.896 22.03 -3.896 QT 4353 | 22.968 -3.896 23.733 -3.513 QT 4354 | 24.499 -3.13 25.054 -2.458 QT 4355 | 25.608 -1.786 25.897 -0.927 QT 4356 | 26.186 -0.068 26.186 0.807 QT 4357 | 26.186 2.042 25.64 3.159 QT 4358 | 25.093 4.276 24.1 4.932 QT 4359 | 23.108 5.589 21.843 5.589 QT 4360 | cp 4361 | 21.843 4.917 M 4362 | 22.655 4.917 23.147 4.55 QT 4363 | 23.64 4.182 23.866 3.573 QT 4364 | 24.093 2.964 24.155 2.339 QT 4365 | 24.218 1.714 24.218 0.807 QT 4366 | 24.218 -0.38 24.1 -1.216 QT 4367 | 23.983 -2.052 23.483 -2.693 QT 4368 | 22.983 -3.333 21.952 -3.333 QT 4369 | 21.093 -3.333 20.546 -2.763 QT 4370 | 19.999 -2.193 19.749 -1.318 QT 4371 | 19.499 -0.443 19.499 0.37 QT 4372 | 19.499 0.651 19.515 0.792 QT 4373 | 19.515 0.823 19.507 0.846 QT 4374 | 19.499 0.87 19.499 0.901 QT 4375 | 19.499 1.792 19.679 2.714 QT 4376 | 19.858 3.636 20.382 4.276 QT 4377 | 20.905 4.917 21.843 4.917 QT 4378 | cp}def 4379 | f-1048384001 4380 | f 4381 | GR 4382 | GS 4383 | [0.75 0 0 0.75 176.53455 46.29954] CT 4384 | N 4385 | /f-1264102585{29.087 2.729 M 4386 | 29.306 3.339 29.752 3.846 QT 4387 | 30.197 4.354 30.806 4.636 QT 4388 | 31.416 4.917 32.072 4.917 QT 4389 | 33.587 4.917 34.158 3.737 QT 4390 | 34.728 2.557 34.728 0.87 QT 4391 | 34.728 0.151 34.705 -0.349 QT 4392 | 34.681 -0.849 34.572 -1.302 QT 4393 | 34.369 -2.052 33.884 -2.607 QT 4394 | 33.4 -3.161 32.697 -3.161 QT 4395 | 31.994 -3.161 31.486 -2.943 QT 4396 | 30.978 -2.724 30.658 -2.435 QT 4397 | 30.337 -2.146 30.087 -1.833 QT 4398 | 29.837 -1.521 29.775 -1.489 QT 4399 | 29.541 -1.489 L 4400 | 29.494 -1.489 29.416 -1.56 QT 4401 | 29.337 -1.63 29.337 -1.693 QT 4402 | 29.337 -8.708 L 4403 | 29.337 -8.755 29.408 -8.81 QT 4404 | 29.478 -8.864 29.541 -8.864 QT 4405 | 29.603 -8.864 L 4406 | 31.025 -8.193 32.619 -8.193 QT 4407 | 34.166 -8.193 35.619 -8.864 QT 4408 | 35.681 -8.864 L 4409 | 35.744 -8.864 35.806 -8.818 QT 4410 | 35.869 -8.771 35.869 -8.708 QT 4411 | 35.869 -8.505 L 4412 | 35.869 -8.411 35.837 -8.411 QT 4413 | 35.119 -7.458 34.033 -6.919 QT 4414 | 32.947 -6.38 31.791 -6.38 QT 4415 | 30.947 -6.38 30.072 -6.614 QT 4416 | 30.072 -2.646 L 4417 | 30.759 -3.224 31.314 -3.458 QT 4418 | 31.869 -3.693 32.712 -3.693 QT 4419 | 33.869 -3.693 34.791 -3.029 QT 4420 | 35.712 -2.364 36.205 -1.294 QT 4421 | 36.697 -0.224 36.697 0.901 QT 4422 | 36.697 2.151 36.072 3.229 QT 4423 | 35.447 4.307 34.384 4.948 QT 4424 | 33.322 5.589 32.072 5.589 QT 4425 | 31.041 5.589 30.173 5.05 QT 4426 | 29.306 4.511 28.806 3.612 QT 4427 | 28.306 2.714 28.306 1.698 QT 4428 | 28.306 1.229 28.611 0.932 QT 4429 | 28.916 0.636 29.384 0.636 QT 4430 | 29.837 0.636 30.15 0.932 QT 4431 | 30.462 1.229 30.462 1.698 QT 4432 | 30.462 2.151 30.15 2.464 QT 4433 | 29.837 2.776 29.384 2.776 QT 4434 | 29.306 2.776 29.212 2.761 QT 4435 | 29.119 2.745 29.087 2.729 QT 4436 | cp}def 4437 | f-1264102585 4438 | f 4439 | GR 4440 | GS 4441 | [0.75 0 0 0.75 176.53455 46.29954] CT 4442 | N 4443 | f1194415555 4444 | f 4445 | GR 4446 | GS 4447 | [0.75 0 0 0.75 178.56031 272.56853] CT 4448 | N 4449 | f-1588546591 4450 | f 4451 | GR 4452 | GS 4453 | [0.75 0 0 0.75 178.56031 272.56853] CT 4454 | N 4455 | f-1048384001 4456 | f 4457 | GR 4458 | GS 4459 | [0.75 0 0 0.75 178.56031 272.56853] CT 4460 | N 4461 | /f785591207{27.837 1.651 M 4462 | 27.837 0.917 L 4463 | 34.337 -8.771 L 4464 | 34.4 -8.864 34.556 -8.864 QT 4465 | 34.853 -8.864 L 4466 | 35.087 -8.864 35.087 -8.63 QT 4467 | 35.087 0.917 L 4468 | 37.15 0.917 L 4469 | 37.15 1.651 L 4470 | 35.087 1.651 L 4471 | 35.087 3.714 L 4472 | 35.087 4.151 35.705 4.268 QT 4473 | 36.322 4.386 37.134 4.386 QT 4474 | 37.134 5.12 L 4475 | 31.353 5.12 L 4476 | 31.353 4.386 L 4477 | 32.166 4.386 32.775 4.268 QT 4478 | 33.384 4.151 33.384 3.714 QT 4479 | 33.384 1.651 L 4480 | 27.837 1.651 L 4481 | cp 4482 | 28.541 0.917 M 4483 | 33.509 0.917 L 4484 | 33.509 -6.521 L 4485 | 28.541 0.917 L 4486 | cp}def 4487 | f785591207 4488 | f 4489 | GR 4490 | GS 4491 | [0.75 0 0 0.75 178.56031 272.56853] CT 4492 | N 4493 | f1194415555 4494 | f 4495 | GR 4496 | GS 4497 | [0.75 0 0 0.75 313.44106 240.53636] CT 4498 | 1 0 0 RC 4499 | N 4500 | f-1601493123 4501 | f 4502 | GR 4503 | GS 4504 | [0.75 0 0 0.75 313.44106 240.53636] CT 4505 | 1 0 0 RC 4506 | N 4507 | f926402434 4508 | f 4509 | GR 4510 | GS 4511 | [0.75 0 0 0.75 315.75318 111.23267] CT 4512 | 1 0 0 RC 4513 | N 4514 | f-1601493123 4515 | f 4516 | GR 4517 | GS 4518 | [0.75 0 0 0.75 315.75318 111.23267] CT 4519 | 1 0 0 RC 4520 | N 4521 | f926402434 4522 | f 4523 | GR 4524 | GS 4525 | [0.75 0 0 0.75 319.7842 244.18323] CT 4526 | N 4527 | /f930739321{1.047 5.12 M 4528 | 1.047 4.557 L 4529 | 1.047 4.511 1.094 4.448 QT 4530 | 4.344 0.839 L 4531 | 5.094 0.026 5.555 -0.513 QT 4532 | 6.016 -1.052 6.461 -1.763 QT 4533 | 6.906 -2.474 7.172 -3.2 QT 4534 | 7.438 -3.927 7.438 -4.755 QT 4535 | 7.438 -5.614 7.117 -6.404 QT 4536 | 6.797 -7.193 6.164 -7.661 QT 4537 | 5.531 -8.13 4.641 -8.13 QT 4538 | 3.734 -8.13 3.008 -7.583 QT 4539 | 2.281 -7.036 1.984 -6.161 QT 4540 | 2.063 -6.177 2.203 -6.177 QT 4541 | 2.672 -6.177 3.008 -5.864 QT 4542 | 3.344 -5.552 3.344 -5.036 QT 4543 | 3.344 -4.568 3.008 -4.232 QT 4544 | 2.672 -3.896 2.203 -3.896 QT 4545 | 1.719 -3.896 1.383 -4.239 QT 4546 | 1.047 -4.583 1.047 -5.036 QT 4547 | 1.047 -5.833 1.344 -6.521 QT 4548 | 1.641 -7.208 2.203 -7.747 QT 4549 | 2.766 -8.286 3.461 -8.575 QT 4550 | 4.156 -8.864 4.953 -8.864 QT 4551 | 6.156 -8.864 7.188 -8.357 QT 4552 | 8.219 -7.849 8.828 -6.919 QT 4553 | 9.438 -5.989 9.438 -4.755 QT 4554 | 9.438 -3.849 9.039 -3.029 QT 4555 | 8.641 -2.208 8.016 -1.536 QT 4556 | 7.391 -0.864 6.414 -0.013 QT 4557 | 5.438 0.839 5.125 1.136 QT 4558 | 2.75 3.417 L 4559 | 4.766 3.417 L 4560 | 6.25 3.417 7.25 3.393 QT 4561 | 8.25 3.37 8.313 3.307 QT 4562 | 8.563 3.042 8.813 1.37 QT 4563 | 9.438 1.37 L 4564 | 8.844 5.12 L 4565 | 1.047 5.12 L 4566 | cp}def 4567 | f930739321 4568 | f 4569 | GR 4570 | GS 4571 | [0.75 0 0 0.75 319.7842 244.18323] CT 4572 | N 4573 | f-374746124 4574 | f 4575 | GR 4576 | GS 4577 | [0.75 0 0 0.75 319.7842 244.18323] CT 4578 | N 4579 | f-163326416 4580 | f 4581 | GR 4582 | GS 4583 | [0.75 0 0 0.75 322.0963 114.87955] CT 4584 | N 4585 | f-1588546591 4586 | f 4587 | GR 4588 | GS 4589 | [0.75 0 0 0.75 322.0963 114.87955] CT 4590 | N 4591 | /f-296416057{17.64 5.12 M 4592 | 17.64 4.557 L 4593 | 17.64 4.511 17.686 4.448 QT 4594 | 20.936 0.839 L 4595 | 21.686 0.026 22.147 -0.513 QT 4596 | 22.608 -1.052 23.054 -1.763 QT 4597 | 23.499 -2.474 23.765 -3.2 QT 4598 | 24.03 -3.927 24.03 -4.755 QT 4599 | 24.03 -5.614 23.71 -6.404 QT 4600 | 23.39 -7.193 22.757 -7.661 QT 4601 | 22.124 -8.13 21.233 -8.13 QT 4602 | 20.327 -8.13 19.6 -7.583 QT 4603 | 18.874 -7.036 18.577 -6.161 QT 4604 | 18.655 -6.177 18.796 -6.177 QT 4605 | 19.265 -6.177 19.6 -5.864 QT 4606 | 19.936 -5.552 19.936 -5.036 QT 4607 | 19.936 -4.568 19.6 -4.232 QT 4608 | 19.265 -3.896 18.796 -3.896 QT 4609 | 18.311 -3.896 17.975 -4.239 QT 4610 | 17.64 -4.583 17.64 -5.036 QT 4611 | 17.64 -5.833 17.936 -6.521 QT 4612 | 18.233 -7.208 18.796 -7.747 QT 4613 | 19.358 -8.286 20.054 -8.575 QT 4614 | 20.749 -8.864 21.546 -8.864 QT 4615 | 22.749 -8.864 23.78 -8.357 QT 4616 | 24.811 -7.849 25.421 -6.919 QT 4617 | 26.03 -5.989 26.03 -4.755 QT 4618 | 26.03 -3.849 25.632 -3.029 QT 4619 | 25.233 -2.208 24.608 -1.536 QT 4620 | 23.983 -0.864 23.007 -0.013 QT 4621 | 22.03 0.839 21.718 1.136 QT 4622 | 19.343 3.417 L 4623 | 21.358 3.417 L 4624 | 22.843 3.417 23.843 3.393 QT 4625 | 24.843 3.37 24.905 3.307 QT 4626 | 25.155 3.042 25.405 1.37 QT 4627 | 26.03 1.37 L 4628 | 25.436 5.12 L 4629 | 17.64 5.12 L 4630 | cp}def 4631 | f-296416057 4632 | f 4633 | GR 4634 | GS 4635 | [0.75 0 0 0.75 322.0963 114.87955] CT 4636 | N 4637 | /f-557030626{32.509 5.589 M 4638 | 31.212 5.589 30.337 4.893 QT 4639 | 29.462 4.198 28.986 3.096 QT 4640 | 28.509 1.995 28.322 0.784 QT 4641 | 28.134 -0.427 28.134 -1.661 QT 4642 | 28.134 -3.333 28.783 -5.005 QT 4643 | 29.431 -6.677 30.689 -7.771 QT 4644 | 31.947 -8.864 33.666 -8.864 QT 4645 | 34.384 -8.864 35.009 -8.591 QT 4646 | 35.634 -8.318 35.986 -7.794 QT 4647 | 36.337 -7.271 36.337 -6.521 QT 4648 | 36.337 -6.083 36.041 -5.794 QT 4649 | 35.744 -5.505 35.322 -5.505 QT 4650 | 34.916 -5.505 34.619 -5.802 QT 4651 | 34.322 -6.099 34.322 -6.521 QT 4652 | 34.322 -6.927 34.619 -7.224 QT 4653 | 34.916 -7.521 35.322 -7.521 QT 4654 | 35.431 -7.521 L 4655 | 35.166 -7.896 34.681 -8.075 QT 4656 | 34.197 -8.255 33.666 -8.255 QT 4657 | 33.025 -8.255 32.494 -7.982 QT 4658 | 31.962 -7.708 31.525 -7.239 QT 4659 | 31.087 -6.771 30.806 -6.2 QT 4660 | 30.525 -5.63 30.361 -4.904 QT 4661 | 30.197 -4.177 30.158 -3.536 QT 4662 | 30.119 -2.896 30.119 -1.943 QT 4663 | 30.494 -2.802 31.166 -3.349 QT 4664 | 31.837 -3.896 32.697 -3.896 QT 4665 | 33.634 -3.896 34.4 -3.513 QT 4666 | 35.166 -3.13 35.72 -2.458 QT 4667 | 36.275 -1.786 36.564 -0.927 QT 4668 | 36.853 -0.068 36.853 0.807 QT 4669 | 36.853 2.042 36.306 3.159 QT 4670 | 35.759 4.276 34.767 4.932 QT 4671 | 33.775 5.589 32.509 5.589 QT 4672 | cp 4673 | 32.509 4.917 M 4674 | 33.322 4.917 33.814 4.55 QT 4675 | 34.306 4.182 34.533 3.573 QT 4676 | 34.759 2.964 34.822 2.339 QT 4677 | 34.884 1.714 34.884 0.807 QT 4678 | 34.884 -0.38 34.767 -1.216 QT 4679 | 34.65 -2.052 34.15 -2.693 QT 4680 | 33.65 -3.333 32.619 -3.333 QT 4681 | 31.759 -3.333 31.212 -2.763 QT 4682 | 30.666 -2.193 30.416 -1.318 QT 4683 | 30.166 -0.443 30.166 0.37 QT 4684 | 30.166 0.651 30.181 0.792 QT 4685 | 30.181 0.823 30.173 0.846 QT 4686 | 30.166 0.87 30.166 0.901 QT 4687 | 30.166 1.792 30.345 2.714 QT 4688 | 30.525 3.636 31.048 4.276 QT 4689 | 31.572 4.917 32.509 4.917 QT 4690 | cp}def 4691 | f-557030626 4692 | f 4693 | GR 4694 | GS 4695 | [0.75 0 0 0.75 322.0963 114.87955] CT 4696 | N 4697 | f1194415555 4698 | f 4699 | GR 4700 | GS 4701 | [0.75 0 0 0.75 85.55893 105.21364] CT 4702 | 1 0 0 RC 4703 | N 4704 | f-1601493123 4705 | f 4706 | GR 4707 | GS 4708 | [0.75 0 0 0.75 85.55893 105.21364] CT 4709 | 1 0 0 RC 4710 | N 4711 | f926402434 4712 | f 4713 | GR 4714 | GS 4715 | [0.75 0 0 0.75 83.24682 234.51732] CT 4716 | 1 0 0 RC 4717 | N 4718 | f-1601493123 4719 | f 4720 | GR 4721 | GS 4722 | [0.75 0 0 0.75 83.24682 234.51732] CT 4723 | 1 0 0 RC 4724 | N 4725 | f926402434 4726 | f 4727 | GR 4728 | GS 4729 | [0.75 0 0 0.75 54.96267 99.74333] CT 4730 | N 4731 | f-1588546591 4732 | f 4733 | GR 4734 | GS 4735 | [0.75 0 0 0.75 54.96267 99.74333] CT 4736 | N 4737 | f-296416057 4738 | f 4739 | GR 4740 | GS 4741 | [0.75 0 0 0.75 54.96267 99.74333] CT 4742 | N 4743 | f-1264102585 4744 | f 4745 | GR 4746 | GS 4747 | [0.75 0 0 0.75 54.96267 99.74333] CT 4748 | N 4749 | f1194415555 4750 | f 4751 | GR 4752 | GS 4753 | [0.75 0 0 0.75 52.65058 229.04702] CT 4754 | N 4755 | f930739321 4756 | f 4757 | GR 4758 | GS 4759 | [0.75 0 0 0.75 52.65058 229.04702] CT 4760 | N 4761 | /f205747115{15.917 5.589 M 4762 | 14.62 5.589 13.745 4.893 QT 4763 | 12.87 4.198 12.393 3.096 QT 4764 | 11.917 1.995 11.729 0.784 QT 4765 | 11.542 -0.427 11.542 -1.661 QT 4766 | 11.542 -3.333 12.19 -5.005 QT 4767 | 12.839 -6.677 14.096 -7.771 QT 4768 | 15.354 -8.864 17.073 -8.864 QT 4769 | 17.792 -8.864 18.417 -8.591 QT 4770 | 19.042 -8.318 19.393 -7.794 QT 4771 | 19.745 -7.271 19.745 -6.521 QT 4772 | 19.745 -6.083 19.448 -5.794 QT 4773 | 19.151 -5.505 18.729 -5.505 QT 4774 | 18.323 -5.505 18.026 -5.802 QT 4775 | 17.729 -6.099 17.729 -6.521 QT 4776 | 17.729 -6.927 18.026 -7.224 QT 4777 | 18.323 -7.521 18.729 -7.521 QT 4778 | 18.839 -7.521 L 4779 | 18.573 -7.896 18.089 -8.075 QT 4780 | 17.604 -8.255 17.073 -8.255 QT 4781 | 16.432 -8.255 15.901 -7.982 QT 4782 | 15.37 -7.708 14.932 -7.239 QT 4783 | 14.495 -6.771 14.214 -6.2 QT 4784 | 13.932 -5.63 13.768 -4.904 QT 4785 | 13.604 -4.177 13.565 -3.536 QT 4786 | 13.526 -2.896 13.526 -1.943 QT 4787 | 13.901 -2.802 14.573 -3.349 QT 4788 | 15.245 -3.896 16.104 -3.896 QT 4789 | 17.042 -3.896 17.807 -3.513 QT 4790 | 18.573 -3.13 19.128 -2.458 QT 4791 | 19.682 -1.786 19.971 -0.927 QT 4792 | 20.26 -0.068 20.26 0.807 QT 4793 | 20.26 2.042 19.714 3.159 QT 4794 | 19.167 4.276 18.175 4.932 QT 4795 | 17.182 5.589 15.917 5.589 QT 4796 | cp 4797 | 15.917 4.917 M 4798 | 16.729 4.917 17.221 4.55 QT 4799 | 17.714 4.182 17.94 3.573 QT 4800 | 18.167 2.964 18.229 2.339 QT 4801 | 18.292 1.714 18.292 0.807 QT 4802 | 18.292 -0.38 18.175 -1.216 QT 4803 | 18.057 -2.052 17.557 -2.693 QT 4804 | 17.057 -3.333 16.026 -3.333 QT 4805 | 15.167 -3.333 14.62 -2.763 QT 4806 | 14.073 -2.193 13.823 -1.318 QT 4807 | 13.573 -0.443 13.573 0.37 QT 4808 | 13.573 0.651 13.589 0.792 QT 4809 | 13.589 0.823 13.581 0.846 QT 4810 | 13.573 0.87 13.573 0.901 QT 4811 | 13.573 1.792 13.753 2.714 QT 4812 | 13.932 3.636 14.456 4.276 QT 4813 | 14.979 4.917 15.917 4.917 QT 4814 | cp}def 4815 | f205747115 4816 | f 4817 | GR 4818 | GS 4819 | [0.75 0 0 0.75 52.65058 229.04702] CT 4820 | N 4821 | f-163326416 4822 | f 4823 | GR 4824 | %%Trailer 4825 | %%Pages: 1 4826 | %%EOF 4827 | -------------------------------------------------------------------------------- /4 PDP for NULA/esprit_data_1_3.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/esprit_data_1_3.mat -------------------------------------------------------------------------------- /4 PDP for NULA/esprit_data_1_5.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/esprit_data_1_5.mat -------------------------------------------------------------------------------- /4 PDP for NULA/esprit_data_1_8.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/esprit_data_1_8.mat -------------------------------------------------------------------------------- /4 PDP for NULA/esprit_data_2_3.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/esprit_data_2_3.mat -------------------------------------------------------------------------------- /4 PDP for NULA/esprit_data_2_5.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/esprit_data_2_5.mat -------------------------------------------------------------------------------- /4 PDP for NULA/esprit_data_2_8.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/esprit_data_2_8.mat -------------------------------------------------------------------------------- /4 PDP for NULA/fig_8_3_data_3.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/fig_8_3_data_3.mat -------------------------------------------------------------------------------- /4 PDP for NULA/fig_8_3_data_5.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/fig_8_3_data_5.mat -------------------------------------------------------------------------------- /4 PDP for NULA/fig_8_3_data_8.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/fig_8_3_data_8.mat -------------------------------------------------------------------------------- /4 PDP for NULA/fig_8_4_data_3_res2.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/fig_8_4_data_3_res2.mat -------------------------------------------------------------------------------- /4 PDP for NULA/fig_8_4_data_5_res2.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/fig_8_4_data_5_res2.mat -------------------------------------------------------------------------------- /4 PDP for NULA/fig_8_4_data_8_res2.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/fig_8_4_data_8_res2.mat -------------------------------------------------------------------------------- /4 PDP for NULA/project_nd.m: -------------------------------------------------------------------------------- 1 | % Obtain the projected points with plane norm. 2 | % hui.chen@kaust.edu.sa 3 | function output = project_nd(plane_norm, point) 4 | f = plane_norm; 5 | p = point; 6 | t0 = -(p'*f)/(norm(f)^2); 7 | output = p + f*t0; 8 | end 9 | -------------------------------------------------------------------------------- /4 PDP for NULA/sim1-3sensors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/sim1-3sensors.png -------------------------------------------------------------------------------- /4 PDP for NULA/sim1-5sensors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/sim1-5sensors.png -------------------------------------------------------------------------------- /4 PDP for NULA/sim1-8sensors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/sim1-8sensors.png -------------------------------------------------------------------------------- /4 PDP for NULA/sim2-3sensors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/sim2-3sensors.png -------------------------------------------------------------------------------- /4 PDP for NULA/sim2-5sensors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/sim2-5sensors.png -------------------------------------------------------------------------------- /4 PDP for NULA/sim2-8sensors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenhui07c8/DOA-AOA-algorithms/19cc1a2aa9b37ffc7021a6e5860a610fbec54583/4 PDP for NULA/sim2-8sensors.png -------------------------------------------------------------------------------- /4 PDP for NULA/vectarrow.m: -------------------------------------------------------------------------------- 1 | function vectarrow(p0,p1) 2 | %Arrowline 3-D vector plot. 3 | % vectarrow(p0,p1) plots a line vector with arrow pointing from point p0 4 | % to point p1. The function can plot both 2D and 3D vector with arrow 5 | % depending on the dimension of the input 6 | % 7 | % Example: 8 | % 3D vector 9 | % p0 = [1 2 3]; % Coordinate of the first point p0 10 | % p1 = [4 5 6]; % Coordinate of the second point p1 11 | % vectarrow(p0,p1) 12 | % 13 | % 2D vector 14 | % p0 = [1 2]; % Coordinate of the first point p0 15 | % p1 = [4 5]; % Coordinate of the second point p1 16 | % vectarrow(p0,p1) 17 | % 18 | % See also Vectline 19 | % Rentian Xiong 4-18-05 20 | % $Revision: 1.0 21 | if max(size(p0))==3 22 | if max(size(p1))==3 23 | x0 = p0(1); 24 | y0 = p0(2); 25 | z0 = p0(3); 26 | x1 = p1(1); 27 | y1 = p1(2); 28 | z1 = p1(3); 29 | plot3([x0;x1],[y0;y1],[z0;z1],'-g','LineWidth',2); % Draw a line between p0 and p1 30 | 31 | p = p1-p0; 32 | alpha = 0.1; % Size of arrow head relative to the length of the vector 33 | beta = 0.1; % Width of the base of the arrow head relative to the length 34 | 35 | hu = [x1-alpha*(p(1)+beta*(p(2)+eps)); x1; x1-alpha*(p(1)-beta*(p(2)+eps))]; 36 | hv = [y1-alpha*(p(2)-beta*(p(1)+eps)); y1; y1-alpha*(p(2)+beta*(p(1)+eps))]; 37 | hw = [z1-alpha*p(3);z1;z1-alpha*p(3)]; 38 | 39 | hold on 40 | plot3(hu(:),hv(:),hw(:),'-g','LineWidth',2) % Plot arrow head 41 | grid on 42 | xlabel('x') 43 | ylabel('y') 44 | zlabel('z') 45 | hold off 46 | else 47 | error('p0 and p1 must have the same dimension') 48 | end 49 | elseif max(size(p0))==2 50 | if max(size(p1))==2 51 | x0 = p0(1); 52 | y0 = p0(2); 53 | x1 = p1(1); 54 | y1 = p1(2); 55 | plot([x0;x1],[y0;y1],'-g','LineWidth',2); % Draw a line between p0 and p1 56 | 57 | p = p1-p0; 58 | alpha = 0.2; % Size of arrow head relative to the length of the vector 59 | beta = 0.5; % Width of the base of the arrow head relative to the length 60 | 61 | hu = [x1-alpha*(p(1)+beta*(p(2)+eps)); x1; x1-alpha*(p(1)-beta*(p(2)+eps))]; 62 | hv = [y1-alpha*(p(2)-beta*(p(1)+eps)); y1; y1-alpha*(p(2)+beta*(p(1)+eps))]; 63 | 64 | hold on 65 | plot(hu(:),hv(:),'-g','LineWidth',2) % Plot arrow head 66 | grid on 67 | % xlabel('x') 68 | % ylabel('y') 69 | hold off 70 | else 71 | error('p0 and p1 must have the same dimension') 72 | end 73 | else 74 | error('this function only accepts 2D or 3D vector') 75 | end -------------------------------------------------------------------------------- /4 PDP for NULA/wrapping.m: -------------------------------------------------------------------------------- 1 | function output = wrapping(phase) 2 | output = mod(phase+pi,2*pi)-pi; 3 | end -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## DOA-AOA-algorithms 2 | Algorithms to estimate the Direction-of-Arrival of the target signal 3 | 4 | This repostory is focusing on sparse array (a small number of receivers) DOA estimation. Some of the algorithms are designed for one-dimension direction estimation. However, 1D search can be easily extended into 2D search by using another non parallel pair of sensor. Thus, the target 3D direction vector can be obtained because the third angle info is dependent on the first two. 5 | 6 | The algorithms will be introduced and explained with codes as following: 7 | 8 | 1 Search-Based AOA Estimation\ 9 |   “Angle-of-arrival-based gesture recognition using ultrasonic multi-frequency signals,” Eusipco, 2017. [[Paper]](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8081160) 10 | 11 | 2 Accelerated Algorithm using Random Ferns\ 12 |   “Fast Phase-difference-based DOA Estimation Using Ranfom Ferns,” GlobalSIP, 2018. [[Paper]](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8646676) 13 | 14 | 3 PDP algorithm (Phase-difference projection, multi-carrier)\ 15 |   "Realtime 2-D DOA Estimation using Phase-Difference Projection (PDP)," Eusipco 2019. [[Paper]](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8902804)\ 16 |   "Air writing via receiver array-based ultrasonic source localization," IEEE Trans. Trans. Instrum. Meas., 2020. [[Paper]](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9082625) 17 | 18 | 4 PDP for Non-Uniform Linear Arrays 19 |   "DOA Estimation with Non-Uniform Linear Arrays: A Phase-Difference Projection Approach," IEEE Wireless Commun. Lett., 2021. [[Paper]](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9506874) 20 | 21 | ## 5G/6G (mmWave/THz) Radio Localization (Matlab Code) 22 | The Repository contains the code for 5G/6G (mmWave/THz) radio localization, and sensing can be found in [Radio Localization Code](https://github.com/chenhui07c8/Radio_Localization). 23 | 24 | 25 | 26 | ********** 27 | -Please let me know if you have any questions or suggestions. Please consider citing our works if you find the code useful.\ 28 | -I am open to all types of discussions and collaborations on the topics related to **5G/6G Radio Localization**. :) 29 | \ 30 | -Email: hui.chen@chalmers.se; hui.chen@kaust.edu.sa. 31 | --------------------------------------------------------------------------------