function [erg , sigist]= fitsinus2(sigsoll)

%ff= 941/8000;
%ff= 20.8/512
%ff1= 1336/8000;
%sigsoll=5000*cos(n*ff*2*pi*(0:n-1)/n)+ ...
%        5000*cos(n*ff1*2*pi*(0:n-1)/n);
%sigsoll=5000*cos(n*ff*2*pi*(0:n-1)/n);

n=length(sigsoll);
plot(abs(fft(sigsoll)),'.-')
spsoll=fft(sigsoll);
%plot(sigsoll,'b.-');

nn=512; % mit zwei 512er FFTs
d=2;
wind=kaiser(nn,16).'; % 3e-7

sp1=fft(sigsoll(1   : nn).*wind);
sp3=fft(sigsoll(1 : nn));
sp2=fft(sigsoll(1+d:nn+d).*wind);

%plot(20*log10(abs(sp1)),'.-')
[m,ind] = max(abs(sp1(1:length(sp1)/2)));

%angle(sp1(ind))
dw=angle(sp2(ind)/sp1(ind));

%wb=ff/2*2*pi/512
fg=(dw/d/(2*pi))
%ff-fg
sp=fft(cos(2*nn*fg*pi*(0:nn-1)/nn).*wind);

% Amplitude considerations
% Das Ganze gilt fuer das 512/16 Kaiser Fenster
% Unterschied zum brickfilter
% Das ist der theoretische Faktor, macht 80dB
c1=nn/sum(wind);
%das ist der wirkliche Faktor
c1=(512+1.0555426456e-005)/sum(wind);

%sprintf('%.10e',(abs(c1*sp1(ind))*2/nn-5000)/5000)

% zero padding, 
sp4=abs(fft([wind zeros(1,255*length(wind))]));
sp4=sp4/max(sp4);
sp4=1./sp4(1:129);
sp4=sp4(:);

%in die ersten 129 (129!) Werte 3. Ordnung einfitten
% logarithmus fitten geht besser, eine Zehnerpotenz
% Fehler maximal ~2e-6 über den Bereich
sp5=log(sp4);
M=[(0:128).'.^3 (0:128).'.^2 (0:128).' ones(129,1)];
coff=inv(M'*M)*M'*sp5;
%plot(exp(M*coff)-sp4,'.-');

indc= (256*abs(round(fg*nn)-fg*nn))

c2=exp([indc^3 indc^2 indc 1]*coff);
Ap=abs(c1*c2*sp1(ind))*2/nn;
%sprintf('%.10e',1-sp4(indc+1))
%sprintf('%.10e',(abs(c1*sp4(round(indc)+1)*sp1(ind))*2/nn-5000))
sprintf('%.10e',Ap-5000)
%sprintf('%.10e ',[sp4(round(indc)+1)-c2])

ph=angle(sp1(ind)/sp(ind));

n=length(sigsoll);

%Ap=5000;
%fg=21.3;
%ph=0;

sigist=Ap*cos((n*fg)*2*pi*(0:n-1)/n+ph);

Esoll  = sum(sigsoll.^2);
Eist   = sum(sigist .^2);
Enoise = sum((sigsoll-sigist).^2);

%plot(sigsoll-sigist,'.-')

sup=-10*log10(Esoll/Enoise);

erg=[Ap fg ph sup]

%Ap
%fg*8000/length(sigsoll)
%ph

%plot(20*log10(abs(fft(sigsoll-sigist))),'.-')

return
