function [T,f]=czest_oc(dane, nr_przebiegu)
  y=dane(:,(nr_przebiegu-1)*2+2);
  t=dane(:,(nr_przebiegu-1)*2+1);
  //y=dane(:,1+nr_przebiegu);
  //t=dane(:,1);
  z=wykryj_zbocza(y);
  //z=wykryj_zera(y);
  if length(z)<3 then
    error("Brak pełnego okresu.")
  end
  for i=1:length(z)-2 do
    Ti(i)=t(z(i+2))-t(z(i))
  end
  T=mean(Ti)
  f=1/T
endfunction

function yav=srednia_okres_oc(dane, nr_przebiegu, f)
  t=dane(:,(nr_przebiegu-1)*2+1)-dane(1,(nr_przebiegu-1)*2+1)
  //t=dane(:,1)
  N=length(t)
  lb_okresow=floor((t(N)-t(1))*f)
  TT=lb_okresow/f
  for i=1:N do
    if t(i)>=TT then
      break
    end
  end
  if t(i)<TT then
    error("Nieprawidłowa częstotliwość.")
  end
  NT=i
  y=dane(1:NT,(nr_przebiegu-1)*2+2)
  //y=dane(1:NT,1+nr_przebiegu)
  yav=calka(y,t,1,NT)/(t(NT)-t(1))
endfunction

function s=calka_takt_oc(dane, nr_przebiegu, nr_taktu)
  y=dane(:,(nr_przebiegu-1)*2+2)
  t=dane(:,(nr_przebiegu-1)*2+1)
  //y=dane(:,1+nr_przebiegu);
  //t=dane(:,1);
  //z=wykryj_zera(y);
  z=wykryj_zbocza(y);
  if length(z)<nr_taktu+1 then
    error("Brak tylu półokresów przebiegu.")
  end
  iinf=z(nr_taktu)
  isup=z(nr_taktu+1)
  s=calka(y,t,iinf,isup)
  
  dane_calka=[t(iinf:isup),y(iinf:isup)]
  owc=size(dane_calka,"r")
  dane_calka(owc+1,:)=[dane_calka(owc,1),0]
  dane_calka(owc+2,:)=[dane_calka(1,1),0]
  dane_calka(owc+3,:)=dane_calka(1,:)
  clf()

  xfpoly(dane_calka(:,1)/1e-6,dane_calka(:,2))
  pole=gce()
  pole.line_mode="off"
  pole.background=12

  plot(t/1e-6,y)
  przebieg=gce()
  przebieg.children(1).foreground=0
  xtitle('','t [us]','')

  wykr=gca()
  wykr.box="on"
  wykr.grid=[0,0,-1]
endfunction

function dane2=filtruj_uc(dane,nr_przebiegu,wspolczynnik_odciecia)
  y=dane(:,(nr_przebiegu-1)*2+2);
  y=filtruj(y,2,10);
  dane2=dane;
  dane2(:,(nr_przebiegu-1)*2+2)=y;
  if nr_przebiegu==1 then
    nr_przebiegu_i=2;
  else
    nr_przebiegu_i=1;
  end
  yi=dane(:,(nr_przebiegu_i-1)*2+2);
  yi=filtruj(yi,10,5);
  dane(:,(nr_przebiegu_i-1)*2+2)=yi;
  [T,f]=czest_oc(dane,nr_przebiegu_i)
  fosc=f*17.19*wspolczynnik_odciecia;
  dane2=filtruj_osc(dane2,nr_przebiegu,fosc);
endfunction

function dane2=filtruj_osc(dane,nr_przebiegu,fosc)
  Tosc=1/fosc
  y=dane(:,(nr_przebiegu-1)*2+2)
  t=dane(:,(nr_przebiegu-1)*2+1)
  N=length(y)
  NTosc=N*Tosc/(t(N)-t(1))
  di=floor(1.0*NTosc/2)
  yf=filtruj(y,di,1)
  dane2=dane
  dane2(:,(nr_przebiegu-1)*2+2)=yf
endfunction
