function [dataOut, timeOut, mittenfrequenzen, frequenzen] = ntelOktave(ntel, filterord, fs, tdata, zeitk, overlap)
% 
%
% ntelOktave are free software
% you can redistribute it and/or modify it under the terms of the 
% GNU General Public License as published by the Free Software Foundation;
% either version 2, or (at your option) any later version.
%
% ntelOktave are distributed in the hope that it will be useful, 
% but without any warranty; without even the implied warranty of 
% merchantability or fitness for a particular purpose. See the GNU General
% Public License for more details.
%
%
%   Dipl.-Ing. Armin Rohnen LbA
%   Labor für Maschinendynamik
%   Hochschule für angewandte Wissenschaften München
%   University of applied sciences Munich
%
%   02. Januar 2016
%
%
%%
% 
% Parameter:
%   ntel                ntelOktave (1 für 1/1, 3 für 1/3, 6 für 1/6, 12 für
%                       1/12 und 24 für 1/24)
%   filterord           Steilheit der Filterflanken, hohe Ordnungen für hohe
%                       Flankensteilheit bedeuten jedoch auch hohe
%                       Rechenzeiten Empfehlung: 1000
%   fs                  Abtasrate des Signals
%   tdata               Zeitsignal für die Analyse
%   zeitk               Zeitkonstante für die Berechnung des RMS-Werte
%   overlap             Überlappung in % der Datenblöcke für die Berechnung
%                       der RMS-Werte
%
% Rückgabewerte:
%   dataOut             Matrix mit den RMS-Werte/Zeitvektor der ntelOktaven
%   timeOut             Vektor der Sützstellen der Zeitachse (Blockmitte)
%   mittenfrequenzen    Mittenfrequenzen der ntelOktaven
%   frequenzen          fu und fo der ntelOktavfilter
%
%%
% Mittenfrequenzen für die ntelOktav-Filter
% für 1/1Oktave und 1/3Oktave aus den Normen entnommen
% für 1/6, 1/12 und 1/24Oktave durch Halbierung berechnet

switch ntel
	case 1
		mittenfrequenzen = [8, 16, 31.5, 63, 125, 250, 500, 1000, 2000, 4000, 8000, 16000];
        
	case 3
		mittenfrequenzen = [10, 12.5, 16, 20, 25, 31.5, 40, 50, 63, 80, 100, 125, 160, 200, ...
         250, 315, 400, 500, 630, 800, 1000, 1250, 1600, 2000, 2500, 3150, 4000, 5000, ...
         6300, 8000, 10000, 12500, 16000, 20000];
        
    case 6
		mittenfrequenzen = [10, 11.25, 12.5, 14.25, 16, 18, 20, 22.5, 25, 28.25, 31.5, 34.75, 40, 45, 50, 56.5, 63, 71.5, 80, 90, ...
         100, 112.5, 125, 142.5, 160, 180, 200, 225, 250, 282.5, 315, 347.5, 400, 450, 500, 565, 630, 715, 800, 900, ...
         1000, 1125, 1250, 1425, 1600, 1800, 2000, 2250, 2500, 2825, 3150, 3475, 4000, 4500, 5000, 5650, 6300, 7150, 8000, 9000, ...
         10000, 11250, 12500, 14250, 16000, 18000, 20000 ];
     
    case 12
		mittenfrequenzen = [10, 10.6, 11.25, 11.9, 12.5, 13.375, 14.25, 15.125, 16, 17, 18, 19, 20, 21.25, 22.5, 23.75, 25, 26.75, ...
         28.25, 29.875, 31.5, 33.125, 34.75, 37.375, 40, 42.5, 45, 47.5, 50, 53.25, 56.5, 59.75, 63, 67.25, 71.5, 75.75, 80, ...
         85, 90, 95, 100, 106, 112.5, 119, 125, 133.75, 142.5, 151.25, 160, 170, 180, 190, 200, 212.5, 225, 237.5, 250, 267.5, ...
         282.5, 298.75, 315, 331.25, 347.5, 373.75, 400, 425, 450, 475, 500, 532.5, 565, 597.5, 630, 672.5, 715, 757.5, 800, ...
         850, 900, 950, 1000, 1060, 1125, 1190, 1250, 1337.5, 1425, 1512.5, 1600, 1700, 1800, 1900, 2000, 2125, 2250, 2375, ...
         2500, 2675, 2825, 2987.5, 3150, 3312.5, 3475, 3737.5, 4000, 4250, 4500, 4750, 5000, 5325, 5650, 5975, 6300, 6725, ...
         7150, 7575, 8000, 8500, 9000, 9500, 10000, 10600, 11250, 11900, 12500, 13375, 14250, 15125, 16000, 17000, 18000, ...
         19000, 20000 ];
        
    case 24
		mittenfrequenzen = [10, 10.3, 10.6, 10.925, 11.25, 11.575, 11.9, 12.2, 12.5, 12.95, 13.375, 13.815, 14.25, 14.7, 15.125, 15.5, ...
         16, 16.5, 17, 17.5, 18, 18.5, 19, 19.5, 20, 20.625, 21.25, 21.875, 22.5, 23.125, 23.75, 24.375, 25, 28.875, 26.75, ...
         27.5, 28.25, 29, 29.875, 30.735, 31.5, 32.315, 33.125, 33.95, 34.75, 36.05, 37.375, 38.7, 40, 41.25, 42.5, 43.75, 45, ...
         46.25, 47.5, 48.75, 50, 51.625, 53.25, 54.875, 56.5, 58.125, 59.75, 61.375, 63, 65.125, 67.25, 69.375, 71.5, 73.625, ...
         75.75, 77.875, 80, 82.5, 85, 87.5, 90, 92.5, 95, 97.5, 100, 103, 106, 109.25, 112.5, 115.75, 119, 122, 125, 129.5, ...
         133.75, 138.15, 142.5, 147, 151.25, 155, 160, 165, 170, 175, 180, 185, 190, 195, 200, 206.25, 212.5, 218.75, 225, ...
         231.25, 237.5, 243.75, 250, 288.75, 267.5, 275, 282.5, 290, 298.75, 307.35, 315, 323.15, 331.25, 339.5, 347.5, 360.5, ...
         373.75, 387, 400, 412.5, 425, 437.5, 450, 462.5, 475, 487.5, 500, 516.25, 532.5, 548.75, 565, 581.25, 597.5, 613.75, ...
         630, 651.25, 672.5, 693.75, 715, 736.25, 757.5, 778.75, 800, 825, 850, 875, 900, 925, 950, 975, 1000, 1030, 1060, ...
         1092.5, 1125, 1157.5, 1190, 1220, 1250, 1295, 1337.5, 1381.5, 1425, 1470, 1512.5, 1550, 1600, 1650, 1700, 1750, ...
         1800, 1850, 1900, 1950, 2000, 2062.5, 2125, 2187.5, 2250, 2312.5, 2375, 2437.5, 2500, 2887.5, 2675, 2750, 2825, ...
         2900, 2987.5, 3073.5, 3150, 3231.5, 3312.5, 3395, 3475, 3605, 3737.5, 3870, 4000, 4125, 4250, 4375, 4500, 4625, ...
         4750, 4875, 5000, 5162.5, 5325, 5487.5, 5650, 5812.5, 5975, 6137.5, 6300, 6512.5, 6725, 6937.5, 7150, 7362.5, ...
         7575, 7787.5, 8000, 8250, 8500, 8750, 9000, 9250, 9500, 9750, 10000, 10300, 10600, 10925, 11250, 11575, 11900, ...
         12200, 12500, 12950, 13375, 13815, 14250, 14700, 15125, 15500, 16000, 16500, 17000, 17500, 18000, 18500, 19000, ...
         19500, 20000];
        
    otherwise
		mittenfrequenzen = [8, 16, 31.5, 63, 125, 250, 500, 1000, 2000, 4000, 8000, 16000];
end;
   

%%
%
%   Berechnung der erforderlichen Filter
%
%

anz_f = length(mittenfrequenzen);                                           % Anzahl der Mittenfrequenzen = Anzahl der erforderlichen Filter
nrms = zeitk/1000 * fs;                                                     % Länge des Datenblocks für die RMS-Pegelberechnung
if overlap > 0
    noverlap = round(nrms*overlap/100);                                     % Länge der Überlappung
else
    noverlap = 0;
end;

steps = nrms-noverlap;                                                      % Sprungweite für die RMS-Pegelberechnung

for k=1:anz_f
    f2 = round(sqrt(mittenfrequenzen(1,k)^2 * 2^(1/ntel)),2);                           % obere Grenzfrequenz
    f1 = round(mittenfrequenzen(1,k)^2/sqrt(mittenfrequenzen(1,k)^2 * 2^(1/ntel)),2);   % untere Grenzfrequenz
   
    frequenzen(k,1) = f1;                                                    % fu und fo der Filterbandbreite für die "Treppenstufendarstellung"
    frequenzen(k,2) = f2;                                            
    
    bpFilt = designfilt('bandpassfir','FilterOrder',filterord, 'CutoffFrequency1',f1,'CutoffFrequency2',f2, 'SampleRate',fs);
    dataFilt = filter(bpFilt,tdata);
    
    points = 0;                                                              % Positionszähler für die Datenablage der RMS-Werte
    for n=1:steps:length(dataFilt)-steps
        points = points+1;                                                    
        dataOut(points,k) = rms(dataFilt(n:n+steps,1));                          % RMS-Pegel berechnen
        timeOut(points,1) = (n+steps/2)/fs;                                      % Zeitvektor berechnen
    end;
end;
