// z ladunek
// wyrzucone odniesienia do napięcia
// dif/dt jak dir/dt (wokół 50% Irrm) --> powrót do starego
function [qrr,dirdt,difdt,tf,ts,irrm,ifwd]=analiza_wylaczanie(dane,przesun_zero,filtruj_oscylacje)
  mnoznik_i=1;
  wykres=1;
  numer_przebiegu_i=1;
  
  kol_t=(numer_przebiegu_i-1)*2+1
  kol_i=(numer_przebiegu_i-1)*2+2

  if (filtruj_oscylacje) then
    dane=filtruj_osc(dane,1,1/2e-8);
  end
  
  t=dane(:,kol_t);
  t=t-t(1);
  inf=dane(:,kol_i)*mnoznik_i;
  nmax=size(dane,"r")
  
  i=filtruj(inf,5,1);
  //i=inf;
  
  // przesunięcie zera prądu
  i_end=i(nmax)
  i_span=max(i)-min(i)
  i_zero=i_end
  n=nmax
  while abs(i(n)-i_end)<=abs(i_span*0.1) do
    if abs(i(n)-i_end)<=abs(i_span*0.01) then
      i_zero(length(i_zero)+1)=i(n);
    end
    n=n-1
  end
  izero=mean(i_zero)
  if (przesun_zero) then
      i=i-izero;
  end
    
  // prądy  
  ipk=max(i)
  ival=min(i)
  irrm=ival
  i_fwd=ipk
  // przewodzenia i przejście przez zero
  n=1
  while i(n)>0 do
  //if i(n)>=0.975*ipk then
  if i(n)>=0.95*ipk then
      i_fwd(length(i_fwd)+1)=i(n)
    end
    n=n+1
  end
  ifwd=mean(i_fwd)
  n_0=n
  t_0=t(n)
  // szczytowy wsteczny
  while i(n)>ival do
    n=n+1
  end
  n_val=n
  ts=t(n)-t_0
  // 0.25 szczytu
  while i(n)<ival*0.25 do
  //while i(n)<ival*0.1 do
    n=n+1
  end
  n_rr025=n
  
  // czas wyłączania  
  di=i(n_rr025)-i(n_val)
  dt=t(n_rr025)-t(n_val)
  dirrdt=di/dt
  tsup=t(n_val)+(-i(n_val))/dirrdt
  trr=tsup-t_0
  tf=trr-ts
  
  // ładunek
  qrr=0
  n_inf=n_0
  n=n_inf
  while t(n)<tsup do
    n=n+1
  end
  n_sup=n
  for n=n_inf:n_sup
    i_av=(i(n)+i(n+1))/2 //-poziom_zera
    dt=t(n+1)-t(n)
    qrr=qrr+i_av*dt
  end
  
  ti_calka=[t(n_inf:n_sup),i(n_inf:n_sup)]
  ti_last=size(ti_calka,'r')
  ti_calka(ti_last+1,:)=[tsup,0]
  ti_calka(ti_last+2,:)=[ti_calka(1,1),0]
  ti_calka(ti_last+3,:)=ti_calka(1,:)
  
  // stromość opadania prądu przewodzenia
  ipp=min(ipk,abs(ival))*2
  //ipp=abs(ival)
  di=ipp/8
  //di=min(ipk/2, abs(ival)/2)
  n=1
  while i(n)>di do
  //while i(n)>0.5*ival+di do
    n=n+1
  end
  n_dif1=n
  while i(n)>-di do
  //while i(n)>0.5*ival-di do
    n=n+1
  end
  n_dif2=n
  dt=t(n_dif2)-t(n_dif1)
  difdt=-2*di/dt
  
  // stromość zaniku prądu wstecznego
  ipp=abs(ival)
  di=ipp/8
  n=n_val
  while i(n)<0.5*ival-di do
    n=n+1
  end
  n_dir1=n
  while i(n)<0.5*ival+di do
    n=n+1
  end
  n_dir2=n
  dt=t(n_dir2)-t(n_dir1)
  dirdt=2*di/dt
  
  if wykres==1 then
    
    clf()
    
    // pole całki
    xfpoly(ti_calka(:,1)/1e-6,ti_calka(:,2))
    pole=gce()
    pole.line_mode="off"
    pole.background=12
    
    // przebieg prądu
    plot(t/1e-6,i)
    przebieg=gce()
    przebieg.children(1).foreground=5
    
    // linia dif/dt
    plot([t(n_dif1),t(n_dif2)]/1e-6,[i(n_dif1),i(n_dif2)])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=2
    
    // linia dir/dt
    plot([t(n_dir1),t(n_dir2)]/1e-6,[i(n_dir1),i(n_dir2)])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=2
    
    // linia trr
    plot([t(n_val),t(n_rr025),t(n_sup)]/1e-6,[i(n_val),i(n_rr025),0])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=2
    
    // linia ifwd
    plot([t(1),t(nmax)]/1e-6,[ifwd,ifwd])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=3
    
    // linia irrm
    plot([t(1),t(n_val)]/1e-6,[irrm,irrm])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=3
    
    // linia tstf
    plot([t(n_val),t(n_val)]/1e-6,[0,irrm])
    linia=gce()
    linia.children(1).foreground=2
    linia.children(1).thickness=1
    linia.children(1).line_style=3
    
    xtitle('','t/us','i/A')
    wykr=gca()
    wykr.box="on"
    wykr.grid=[0,0,-1]
    
  end
    
endfunction


// z uep_b6
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

function yf=filtruj(y,di,np)
  N=length(y)
  yf=zeros(N)
  for p=1:np do
    for i=1:N do
      im=i-di
      ip=i+di
      if im<1 then
        im=1
      end
      if ip>N then
        ip=N
      end
      yf(i)=mean(y(im:ip))
    end
    y=yf
  end
endfunction
