0001 function [a,A,B,fknee] = fit1overf(V,fs,popt)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 [f,Y] = ffto(V,fs);
0021 Y = Y(f>0)/sqrt(length(f));
0022 f = f(f>0);
0023 c = {f abs(Y)};
0024
0025
0026 x0 = [1;0.05;std(V-mean(V))/2];
0027
0028 options = optimset('MaxFunEvals',1000,'MaxIter',1000);
0029 [x,fval] = fminsearch(@(x) ssqErr(x,c),x0,options);
0030
0031 a = x(1);
0032 A = x(2);
0033 B = x(3);
0034 fknee = exp(1/a*log(A/((sqrt(2)-1)*B)));
0035
0036 if popt == 1
0037
0038
0039 loglog(f,abs(Y),'k-',f,A*f.^(-a)+B,'r-',...
0040 [fknee fknee],[min(abs(Y)) max(abs(Y))],'g-.',...
0041 [min(f) max(f)],[sqrt(2)*B sqrt(2)*B],'g-.')
0042 ylim([min(abs(Y)) max(abs(Y))])
0043 xlim([min(f) max(f)])
0044 xlabel('Frequency [Hz]')
0045 ylabel(sprintf('Power spectrum: f_{knee} = %4.3f Hz',fknee))
0046 legend('Data','Fit')
0047
0048 end
0049
0050 end
0051
0052 function err = ssqErr(x,c)
0053
0054 Y = c{2};
0055 f = c{1};
0056
0057 Yfit = spec(f,x);
0058 err = sum((Yfit-Y).^2);
0059
0060
0061 end
0062
0063 function Ys = spec(f,x)
0064
0065 a = x(1);
0066 A = x(2);
0067 B = x(3);
0068 Ys = A.*f.^(-a)+B;
0069 end