% Finding optimized demodulation phase and Gouy phase to maximize a signal % (Change to Common and Differential DOFs) % 2011/2/18 Kazuhiro Agatsuma addpath(genpath('C:\Users\Agatsuma\Documents\MATLAB\Pickle_June2010\Pickle_Last\DATA')) load('tickle01_Ilcgt_G90d0') %load('tickle01_LASTnewConfig') % get the serial numbers of probes nPD = [getProbeNum(opt, 'REFL_A I1') getProbeNum(opt, 'REFL_A Q1') getProbeNum(opt, 'REFL_B I1') getProbeNum(opt, 'REFL_B Q1') getProbeNum(opt, 'REFL_A I2') getProbeNum(opt, 'REFL_A Q2') getProbeNum(opt, 'REFL_B I2') getProbeNum(opt, 'REFL_B Q2') getProbeNum(opt, 'AS_A I1') getProbeNum(opt, 'AS_A Q1') getProbeNum(opt, 'AS_B I1') getProbeNum(opt, 'AS_B Q1') getProbeNum(opt, 'POX_A I1') getProbeNum(opt, 'POX_A Q1') getProbeNum(opt, 'POX_B I1') getProbeNum(opt, 'POX_B Q1') getProbeNum(opt, 'POX_A I2') getProbeNum(opt, 'POX_A Q2') getProbeNum(opt, 'POX_B I2') getProbeNum(opt, 'POX_B Q2') getProbeNum(opt, 'POY_A I1') getProbeNum(opt, 'POY_A Q1') getProbeNum(opt, 'POY_B I1') getProbeNum(opt, 'POY_B Q1') getProbeNum(opt, 'POY_A I2') getProbeNum(opt, 'POY_A Q2') getProbeNum(opt, 'POY_B I2') getProbeNum(opt, 'POY_B Q2') getProbeNum(opt, 'POP_A I1') getProbeNum(opt, 'POP_A Q1') getProbeNum(opt, 'POP_B I1') getProbeNum(opt, 'POP_B Q1') getProbeNum(opt, 'POP_A I2') getProbeNum(opt, 'POP_A Q2') getProbeNum(opt, 'POP_B I2') getProbeNum(opt, 'POP_B Q2')]; % get the serial numbers of optics nDR = [getDriveIndex(opt, 'EX') getDriveIndex(opt, 'EY') getDriveIndex(opt, 'IX') getDriveIndex(opt, 'IY') getDriveIndex(opt, 'PR2') getDriveIndex(opt, 'PR3') getDriveIndex(opt, 'SR2') getDriveIndex(opt, 'SR3') getDriveIndex(opt, 'BS')]; % Drive matrix r = 0.808; %(in case LCGT) CTRLOUTMTRX = [1 r 1 r 1 r -1 -r r -1 r -1 r -1 -r 1]; %XYtoDOF = inv(CTRLOUTMTRX); %too slow %% Changing coordinates - Best demodulation phase and Gouy phase %%% REFL(1--12), AS(13--16), POX(17--24), POP(25--32) / EX; nDR(1), EY; nDR(2), IX; nDR(3), IY; nDR(4), %%% C_pd = zeros(4, 4); sC_pd = zeros(4, 4); for m = 1:length(nPD)/4 % number of PD ports (one port includes four PDs) for n = 4*m-3:4*m % number of PD C_pd = [sigAC(nPD(n), nDR(1), 572) sigAC(nPD(n), nDR(2), 572) sigAC(nPD(n), nDR(3), 572) sigAC(nPD(n), nDR(4), 572)]; %(s1 x d4) mC_pd = CTRLOUTMTRX \ C_pd'; % = inv(CTRLOUTMTRX) * sC_pd' sC_pd(n-4*(m-1), :) = sign(real(mC_pd))' .* abs(mC_pd)'; % n-4*(m-1) = 1--4 end % Changing coordinates (row: the same DOF, column: the same PD = d4 x s4) %TO BE TUNED if m == 1 DOFtoPD_r1 = sC_pd'; elseif m == 2 DOFtoPD_r2 = sC_pd'; elseif m == 3 DOFtoPD_as = sC_pd'; elseif m == 4 DOFtoPD_pox1 = sC_pd'; elseif m == 5 DOFtoPD_pox2 = sC_pd'; elseif m == 6 DOFtoPD_poy1 = sC_pd'; elseif m == 7 DOFtoPD_poy2 = sC_pd'; elseif m == 8 DOFtoPD_pop1 = sC_pd'; elseif m == 9 DOFtoPD_pop2 = sC_pd'; end end % DOFtoPD = [DOFtoPD_r; DOFtoPD_as; DOFtoPD_pox]; % PRM, PR2, PR3, SRM, SR2, SR3 and BS for k = 5:length(nDR) %(number of drives) for m = 1:length(nPD)/4 %(number of ports) C_pd = [sigAC(nPD(4*m-3), nDR(k), 572) sigAC(nPD(4*m-2), nDR(k), 572) sigAC(nPD(4*m-1), nDR(k), 572) sigAC(nPD(4*m), nDR(k), 572)]; %(d1 x s4) sC_pd = sign(real(C_pd)) .* abs(C_pd); %line %TO BE TUNED if k == 5 if m == 1 PR2toPD_r1 = sC_pd; elseif m == 2 PR2toPD_r2 = sC_pd; elseif m == 3 PR2toPD_as = sC_pd; elseif m == 4 PR2toPD_pox1 = sC_pd; elseif m == 5 PR2toPD_pox2 = sC_pd; elseif m == 6 PR2toPD_poy1 = sC_pd; elseif m == 7 PR2toPD_poy2 = sC_pd; elseif m == 8 PR2toPD_pop1 = sC_pd; elseif m == 9 PR2toPD_pop2 = sC_pd; end elseif k == 6 if m == 1 PR3toPD_r1 = sC_pd; elseif m == 2 PR3toPD_r2 = sC_pd; elseif m == 3 PR3toPD_as = sC_pd; elseif m == 4 PR3toPD_pox1 = sC_pd; elseif m == 5 PR3toPD_pox2 = sC_pd; elseif m == 6 PR3toPD_poy1 = sC_pd; elseif m == 7 PR3toPD_poy2 = sC_pd; elseif m == 8 PR3toPD_pop1 = sC_pd; elseif m == 9 PR3toPD_pop2 = sC_pd; end elseif k == 7 if m == 1 SR2toPD_r1 = sC_pd; elseif m == 2 SR2toPD_r2 = sC_pd; elseif m == 3 SR2toPD_as = sC_pd; elseif m == 4 SR2toPD_pox1 = sC_pd; elseif m == 5 SR2toPD_pox2 = sC_pd; elseif m == 6 SR2toPD_poy1 = sC_pd; elseif m == 7 SR2toPD_poy2 = sC_pd; elseif m == 8 SR2toPD_pop1 = sC_pd; elseif m == 9 SR2toPD_pop2 = sC_pd; end elseif k == 8 if m == 1 SR3toPD_r1 = sC_pd; elseif m == 2 SR3toPD_r2 = sC_pd; elseif m == 3 SR3toPD_as = sC_pd; elseif m == 4 SR3toPD_pox1 = sC_pd; elseif m == 5 SR3toPD_pox2 = sC_pd; elseif m == 6 SR3toPD_poy1 = sC_pd; elseif m == 7 SR3toPD_poy2 = sC_pd; elseif m == 8 SR3toPD_pop1 = sC_pd; elseif m == 9 SR3toPD_pop2 = sC_pd; end elseif k == 9 if m == 1 BStoPD_r1 = sC_pd; elseif m == 2 BStoPD_r2 = sC_pd; elseif m == 3 BStoPD_as = sC_pd; elseif m == 4 BStoPD_pox1 = sC_pd; elseif m == 5 BStoPD_pox2 = sC_pd; elseif m == 6 BStoPD_poy1 = sC_pd; elseif m == 7 BStoPD_poy2 = sC_pd; elseif m == 8 BStoPD_pop1 = sC_pd; elseif m == 9 BStoPD_pop2 = sC_pd; end end end end %TO BE TUNED %DRtoPD = [PRtoPD_r; PRtoPD_as; PRtoPD_pox; BStoPD_r; BStoPD_as; BStoPD_pox] %DOFtoPD = [DOFtoPD_r; PRtoPD_r; BStoPD_r; DOFtoPD_as; PRtoPD_as; BStoPD_as; DOFtoPD_pox; PRtoPD_pox; BStoPD_pox]; DOFtoPD = [DOFtoPD_r1; PR2toPD_r1; PR3toPD_r1; SR2toPD_r1; SR3toPD_r1; BStoPD_r1; DOFtoPD_r2; PR2toPD_r2; PR3toPD_r2; SR2toPD_r2; SR3toPD_r2; BStoPD_r2; DOFtoPD_as; PR2toPD_as; PR3toPD_as; SR2toPD_as; SR3toPD_as; BStoPD_as; DOFtoPD_pox1; PR2toPD_pox1; PR3toPD_pox1; SR2toPD_pox1; SR3toPD_pox1; BStoPD_pox1; DOFtoPD_pox2; PR2toPD_pox2; PR3toPD_pox2; SR2toPD_pox2; SR3toPD_pox2; BStoPD_pox2; DOFtoPD_poy1; PR2toPD_poy1; PR3toPD_poy1; SR2toPD_poy1; SR3toPD_poy1; BStoPD_poy1; DOFtoPD_poy2; PR2toPD_poy2; PR3toPD_poy2; SR2toPD_poy2; SR3toPD_poy2; BStoPD_poy2; DOFtoPD_pop1; PR2toPD_pop1; PR3toPD_pop1; SR2toPD_pop1; SR3toPD_pop1; BStoPD_pop1; DOFtoPD_pop2; PR2toPD_pop2; PR3toPD_pop2; SR2toPD_pop2; SR3toPD_pop2; BStoPD_pop2; ]; %%% Signal by shaking DOFs (Common Soft; Common Hard; Differential Soft; Differential Hard) %%% sIN = zeros(1, 4); dp_r1 = zeros(length(nDR), 1); %(CS, CH, DS, DH, PRM, PR2, PR3, SRM, SR2, SR3, BS) gp_r1 = zeros(length(nDR), 1); sOUT_r1 = zeros(length(nDR), 4); dp_r2 = zeros(length(nDR), 1); gp_r2 = zeros(length(nDR), 1); sOUT_r2 = zeros(length(nDR), 4); dp_as = zeros(length(nDR), 1); gp_as = zeros(length(nDR), 1); sOUT_as = zeros(length(nDR), 4); dp_pox1 = zeros(length(nDR), 1); gp_pox1 = zeros(length(nDR), 1); sOUT_pox1 = zeros(length(nDR), 4); dp_pox2 = zeros(length(nDR), 1); gp_pox2 = zeros(length(nDR), 1); sOUT_pox2 = zeros(length(nDR), 4); dp_poy1 = zeros(length(nDR), 1); gp_poy1 = zeros(length(nDR), 1); sOUT_poy1 = zeros(length(nDR), 4); dp_poy2 = zeros(length(nDR), 1); gp_poy2 = zeros(length(nDR), 1); sOUT_poy2 = zeros(length(nDR), 4); dp_pop1 = zeros(length(nDR), 1); gp_pop1 = zeros(length(nDR), 1); sOUT_pop1 = zeros(length(nDR), 4); dp_pop2 = zeros(length(nDR), 1); gp_pop2 = zeros(length(nDR), 1); sOUT_pop2 = zeros(length(nDR), 4); for m = 1:length(nPD)/4 for d = length(nDR)*m-(length(nDR)-1):length(nDR)*m % dofs(CS, CH, DS, DH, PRM, PR2, PR3, SRM, SR2, SR3, BS) are devided for results sIN = [DOFtoPD(d, 1) DOFtoPD(d, 2) DOFtoPD(d, 3) DOFtoPD(d, 4)]; alpha = DOFtoPD(d, 1)^2 - DOFtoPD(d, 2)^2 + DOFtoPD(d, 3)^2 - DOFtoPD(d, 4)^2; beta = DOFtoPD(d, 1)^2 + DOFtoPD(d, 2)^2 - DOFtoPD(d, 3)^2 - DOFtoPD(d, 4)^2; gamma = 4 * ( DOFtoPD(d, 1) * DOFtoPD(d, 2) + DOFtoPD(d, 3) * DOFtoPD(d, 4) )^2 + alpha^2; delta = 2 * ( DOFtoPD(d, 1) * DOFtoPD(d, 2) + DOFtoPD(d, 3) * DOFtoPD(d, 4) ); ita = 2 * ( DOFtoPD(d, 1) * DOFtoPD(d, 3) + DOFtoPD(d, 2) * DOFtoPD(d, 4) ); m_d = atan( (-alpha + sqrt(gamma))/delta ); %rad m_g = atan( (-beta + sqrt(gamma))/ita ); %rad m_d90 = atan( -(alpha + sqrt(gamma))/delta ); %rad m_g90 = atan( -(beta + sqrt(gamma))/ita ); %rad Rd = [cos(m_d) sin(m_d) 0 0 -sin(m_d) cos(m_d) 0 0 0 0 cos(m_d) sin(m_d) 0 0 -sin(m_d) cos(m_d)]; Rg = [ cos(m_g) 0 sin(m_g) 0 0 cos(m_g) 0 sin(m_g) -sin(m_g) 0 cos(m_g) 0 0 -sin(m_g) 0 cos(m_g)]; % Results % REFL % if m == 1 dp_r1(d-length(nDR)*(m-1)) = m_d * 180/pi; gp_r1(d-length(nDR)*(m-1)) = m_g * 180/pi; sOUT_r1(d-length(nDR)*(m-1), :) = Rd * Rg * sIN'; elseif m == 2 dp_r2(d-length(nDR)*(m-1)) = m_d * 180/pi; gp_r2(d-length(nDR)*(m-1)) = m_g * 180/pi; sOUT_r2(d-length(nDR)*(m-1), :) = Rd * Rg * sIN'; % AS % elseif m == 3 dp_as(d-length(nDR)*(m-1)) = m_d * 180/pi; gp_as(d-length(nDR)*(m-1)) = m_g * 180/pi; sOUT_as(d-length(nDR)*(m-1), :) = Rd * Rg * sIN'; % POX % elseif m == 4 dp_pox1(d-length(nDR)*(m-1)) = m_d * 180/pi; gp_pox1(d-length(nDR)*(m-1)) = m_g * 180/pi; sOUT_pox1(d-length(nDR)*(m-1), :) = Rd * Rg * sIN'; elseif m == 5 dp_pox2(d-length(nDR)*(m-1)) = m_d * 180/pi; gp_pox2(d-length(nDR)*(m-1)) = m_g * 180/pi; sOUT_pox2(d-length(nDR)*(m-1), :) = Rd * Rg * sIN'; % POY % elseif m == 6 dp_poy1(d-length(nDR)*(m-1)) = m_d * 180/pi; gp_poy1(d-length(nDR)*(m-1)) = m_g * 180/pi; sOUT_poy1(d-length(nDR)*(m-1), :) = Rd * Rg * sIN'; elseif m == 7 dp_poy2(d-length(nDR)*(m-1)) = m_d * 180/pi; gp_poy2(d-length(nDR)*(m-1)) = m_g * 180/pi; sOUT_poy2(d-length(nDR)*(m-1), :) = Rd * Rg * sIN'; % POP % elseif m == 8 dp_pop1(d-length(nDR)*(m-1)) = m_d * 180/pi; gp_pop1(d-length(nDR)*(m-1)) = m_g * 180/pi; sOUT_pop1(d-length(nDR)*(m-1), :) = Rd * Rg * sIN'; elseif m == 9 dp_pop2(d-length(nDR)*(m-1)) = m_d * 180/pi; gp_pop2(d-length(nDR)*(m-1)) = m_g * 180/pi; sOUT_pop2(d-length(nDR)*(m-1), :) = Rd * Rg * sIN'; end end end %% Output r1 = [sOUT_r1(:,1), dp_r1, gp_r1]; r2 = [sOUT_r2(:,1), dp_r2, gp_r2]; as = [sOUT_as(:,1), dp_as, gp_as]; pox1 = [sOUT_pox1(:,1), dp_pox1, gp_pox1]; pox2 = [sOUT_pox2(:,1), dp_pox2, gp_pox2]; poy1 = [sOUT_poy1(:,1), dp_poy1, gp_poy1]; poy2 = [sOUT_poy2(:,1), dp_poy2, gp_poy2]; pop1 = [sOUT_pop1(:,1), dp_pop1, gp_pop1]; pop2 = [sOUT_pop2(:,1), dp_pop2, gp_pop2]; port = {r1, r2, as, pox1, pox2, poy1, poy2, pop1, pop2}; portName = {'REFL f1','REFL f2','AS f1','POX f1','POX f2','POY f1','POY f2','POP f1','POP f2'}; %% Find largest signal cmPrbNames = {'Amp.','d.ph','g.ph'}; Nprb = length(cmPrbNames); cmDrvNames = {'CS', 'CH', 'DS', 'DH', 'PR2', 'PR3', 'SR2', 'SR3', 'BS'}; Ndrv = length(cmDrvNames); for q=1:length(port) mLrgst=zeros(Nprb,Ndrv); for ii=1:Nprb [t,maxjj]=max(abs(port{q}(:,ii))); mLrgst(ii,maxjj)=1; end mScnd=zeros(Nprb,Ndrv); for ii=1:Nprb [t,secondjj]=max(abs(port{q}(:,ii))'.*(1-mLrgst(ii,:))); mScnd(ii, secondjj)=1; end %% Plot figure(q) ax=axes(); %Make grid for ii=0:Nprb line([0,Ndrv],[ii,ii],'Color','k'); end for ii=0:Ndrv line([ii,ii],[0,Nprb],'Color','k'); end set(ax, 'XLim',[0,Ndrv],'YLim',[0,Nprb]); set(ax,'XTick',[0.5:Ndrv-0.5], 'YTick', [0.5:Nprb-0.5]); set(ax,'XTickLabel',cmDrvNames,'YTickLabel',cmPrbNames); for ii=1:Nprb for jj=1:Ndrv if ii==1 text(jj-0.5,ii-0.5,num2str(port{q}(jj,ii), 3), 'HorizontalAlignment','center','color',[mLrgst(ii,jj)+0.7*mScnd(ii,jj),0,0],'FontSize',12); elseif ~(ii==1) text(jj-0.5,ii-0.5,num2str(port{q}(jj,ii), 3), 'HorizontalAlignment','center','FontSize',12); end end end title([num2str(portName{q}), 'Angle Sensing Maximum [W/rad]'],'FontSize',16); end %Checking %sOUT_r1 %sOUT_r2 %sOUT_as %sOUT_pox1 %sOUT_pox2 %sOUT_poy1 %sOUT_poy2 %sOUT_pop1 %sOUT_pop2