function [sointi,F] =kielisoitin(P,N,K)
%Tekee pistejoukosta murtoviivafunktion z(t) ja etsii tälle Fourier-kertoimet ja
%Fourier-sarjan f(x), sekä Fourier-sarjan osasummat s
%
%Kutsu funktiota vaikkapa komennolla
%
%[sointi,F] =kielisoitin(5,100,3);
%
%Videon suppenemisesta (katso 5 kertaa, 1 kuva sekunnissa) voit katsoa vaikkapa komennolla
%
%figure('units','normalized','outerposition',[0 0 1 1])
%movie(F,5,1)
%
%Videon tallennus:
%
%Tallentaa videon muodossa 'kitaravideo2014.11.13.12:26:38.mpg'
%aikanyt=now;
%jd=juliandate(aikanyt);
%[a,b,c,d,e,f,g,h] = julian2greg(jd);
%paiva=eval(['''' num2str(a) '.' num2str(b) '.' num2str(c) '.' num2str(d)
%'.' num2str(e) '.' num2str(f) '''']);
%nimi=['kitaravideo' paiva];
%writerObj = VideoWriter(nimi,'MPEG-4');
%open(writerObj)
%writeVideo(writerObj,F)
%clear writerObj

figure, hold on
axis([0,pi,-1,1])
eval(['title(''Ammu ' num2str(P) ' pistettä, saat kielen alkutilan'')']);
for k=1:P
g(k,:)=ginput(1);
plot(g(k,1),g(k,2),'k*')
end

x=g(:,1);y=g(:,2);
[x,j]=sort(x);y=y(j);
[x,j,~] = unique(x);y=y(j);
x=[0,x',pi]'; ka=(y(1)+y(end))/2; ka=0*ka; y=[ka,y',ka]';
t=linspace(0,pi,1000);
z=interp1(x,y,t);

plot(t,z)

eval(['title(''Ammu ' num2str(P) ' pistettä, saat kielen alkunopeuden'')']);
for k=1:P
g2(k,:)=ginput(1);
plot(g2(k,1),g2(k,2),'k*')
end

x2=g2(:,1);y2=g2(:,2);
[x2,j2]=sort(x2);y2=y2(j);
[x2,j2,~] = unique(x2);y2=y2(j);
x2=[0,x2',pi]';ka2=(y2(1)+y2(end))/2; ka2=0*ka2; y2=[ka2,y2',ka2]';
t=linspace(0,pi,1000);
z2=interp1(x2,y2,t);

plot(t,z2,'r')

for k=1:N
A(k)=2*mean(z.*sin(k*t));
end

for k=1:N
B(k)=2*mean(z2.*sin(k*t))/k;
end

figure, hold on
plot(1:N,A)
plot(1:N,B,'r')
title('Fourier-kertoimet')
legend('A(k)','B(k)')
xlabel('k')

TT=1000;
T=linspace(1,K,TT);

[xx,tt]=meshgrid(t,T);

sointi=0*xx;

for k=1:N
sointi=sointi+sin(k*xx).*(A(k)*cos(k*tt)+B(k)*sin(k*tt));
end

figure('units','normalized','outerposition',[0 0 1 1])
kork=max(max(abs(sointi)));
axis([0,pi,-kork,kork])

for k=1:TT
z=sointi(k,:);
kieli=plot(t,z,'k');
axis([0,pi,-kork,kork])
F(k)=getframe;
delete(kieli)
axis([0,pi,-kork,kork])
end
close

aikanyt=now;
jd=juliandate(aikanyt);
[a,b,c,d,e,f,g,h] = julian2greg(jd);
paiva=eval(['''' num2str(a) '.' num2str(b) '.' num2str(c) '.' num2str(d) '.' num2str(e) '.' num2str(f) '''']);
nimi=['kitaravideo' paiva];
writerObj = VideoWriter(nimi,'MPEG-4');
%FR=round(TT/K)
%writerObj.FrameRate = FR;
open(writerObj)
writeVideo(writerObj,F)
clear writerObj

end

