function [dataFilt, dataOut, timeOut, frequenzen] = DSPntelOktave(ntel, filterord, fs, tdata, zeitk, overlap)

% 
% DSPntelOktave
%
% DSPntelOktave 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.
%
% DSPntelOktave 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
%
%   20. Januar 2016
%%
% Parameter:
%   ntel                ntelOktave (1 für 1/1, 3 für 1/3, 6 für 1/6, ... )
%   filterord           Steilheit der Filterflanken, hohe Ordnungen für hohe
%                       Flankensteilheit bedeuten jedoch auch hohe
%                       Rechenzeiten Empfehlung: 8
%   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:
%   dataFilt            Matrix mit den gefilterten Zeitsignalen der ntelOktaven
%   dataOut             Matrix mit den RMS-Werte/Zeitvektor der ntelOktaven
%   timeOut             Vektor der Sützstellen der Zeitachse (Blockmitte)
%   frequenzen    Mittenfrequenzen der ntelOktaven
%   
%%

fm = 1000;                                                                  % Oktavreihe mit fm = 1000 Hz!
filterdefs = fdesign.octave(ntel,'Class 1','N,F0',filterord,fm,fs);
frequenzen = validfrequencies(filterdefs);
Nfc = length(frequenzen);

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;

for inc=1:Nfc,
    filterdefs.F0 = frequenzen(inc);
    Hd = design(filterdefs,'butter');
    dataFilt(:,inc) = filter(Hd,tdata);
    
    points = 0;                                                              % Positionszähler für die Datenablage der RMS-Werte
    for n=1:steps:length(dataFilt)-steps
        points = points+1;                                                    
        dataOut(points,inc) = rms(dataFilt(n:n+steps,inc));                  % RMS-Pegel berechnen
        timeOut(points,1) = (n+steps/2)/fs;                                  % Zeitvektor berechnen
    end;
end