0001 function [r,A] = rFactorCorrection(d,method)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 r = zeros(4,1);
0022 A = zeros(4,1);
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036 d1L = d.antenna0.receiver.switchData(:,1);
0037 d1S = d.antenna0.receiver.switchData(:,2);
0038 d2S = d.antenna0.receiver.switchData(:,3);
0039 d2L = d.antenna0.receiver.switchData(:,4);
0040 d11L = d.antenna0.receiver.switchData(:,21);
0041 d11S = d.antenna0.receiver.switchData(:,22);
0042 d12S = d.antenna0.receiver.switchData(:,23);
0043 d12L = d.antenna0.receiver.switchData(:,24);
0044
0045 switch method
0046 case 1
0047
0048 r(1) = mean(d1S)/mean(d1L);
0049 r(2) = mean(d2S)/mean(d2L);
0050 r(3) = mean(d11S)/mean(d11L);
0051 r(4) = mean(d12S)/mean(d12L);
0052
0053 case 2
0054
0055 r(1) = std(d1S-mean(d1S))/std(d1L-mean(d1L));
0056 r(2) = std(d2S-mean(d2S))/std(d2L-mean(d2L));
0057 r(3) = std(d11S-mean(d11S))/std(d11L-mean(d11L));
0058 r(4) = std(d12S-mean(d12S))/std(d12L-mean(d12L));
0059
0060 case 3
0061
0062
0063 fk = zeros(4,1);
0064 disp('r => fknee:')
0065 [a,b] = findr(d1L,d1S);
0066 r(1) = a; fk(1) = b;
0067 fprintf('%3.2f => %4.3f\n',r(1),fk(1))
0068 [a,b] = findr(d2L,d2S);
0069 r(2) = a; fk(2) = b;
0070 fprintf('%3.2f => %4.3f\n',r(2),fk(2))
0071 [a,b] = findr(d11L,d11S);
0072 r(3) = a; fk(3) = b;
0073 fprintf('%3.2f => %4.3f\n',r(3),fk(3))
0074 [a,b] = findr(d12L,d12S);
0075 r(4) = a; fk(4) = b;
0076 fprintf('%3.2f => %4.3f\n',r(4),fk(4))
0077 case 4
0078
0079
0080 fk = zeros(4,1);
0081 disp('r => fknee:')
0082 [a,b] = findRAndA(d1L,d1S);
0083 r(1) = a(1); fk(1) = b; A(1) = a(2);
0084 fprintf('%3.2f => %4.3f\n',r(1),fk(1))
0085 [a,b] = findRAndA(d2L,d2S);
0086 r(2) = a(1); fk(2) = b; A(2) = a(2);
0087 fprintf('%3.2f => %4.3f\n',r(2),fk(2))
0088 [a,b] = findRAndA(d11L,d11S);
0089 r(3) = a(1); fk(3) = b; A(3) = a(2);
0090 fprintf('%3.2f => %4.3f\n',r(3),fk(3))
0091 [a,b] = findRAndA(d12L,d12S);
0092 r(4) = a(1); fk(4) = b; A(4) = a(2);
0093 fprintf('%3.2f => %4.3f\n',r(4),fk(4))
0094 end
0095
0096 end
0097
0098 function [r,fknee] = findr(L,S)
0099
0100
0101 c = {S L 100};
0102 options = optimset('MaxFunEvals',100000,'MaxIter',100000,'Algorithm','active-set');
0103
0104
0105 [r,fknee] = fmincon(@(r) errFunc(r,c),1,[],[],[],[],0.5,2,[],options);
0106 end
0107
0108 function [x,fknee] = findRAndA(L,S)
0109
0110
0111 c = {S L 100};
0112 options = optimset('MaxFunEvals',100000,'MaxIter',100000,'Algorithm','active-set',...
0113 'PlotFcns',{@optimplotx,@optimplotfval});
0114
0115 [x,fknee] = fmincon(@(x) errFuncRAndA(x,c),[1;10],[],[],[],[],[0.1;-10000],...
0116 [2; 10000],[],options);
0117 end
0118
0119 function fknee = errFunc(r,c)
0120
0121 S = c{1};
0122 L = c{2};
0123 V = S-r*L;
0124 fs = c{3};
0125 [a,A,B,fknee] = fit1overf(V,fs,0);
0126 end
0127
0128 function fknee = errFuncRAndA(x,c)
0129
0130 S = c{1};
0131 L = c{2};
0132 V = (S+x(2))-x(1)*(L+x(2));
0133 fs = c{3};
0134 [a,A,B,fknee] = fit1overf(V,fs,0);
0135 end