ITAThirdOctaveFilterbank.h 3.38 KB
Newer Older
1
2
3
4
5
/*
 * ----------------------------------------------------------------
 *
 *		ITA core libs
 *		(c) Copyright Institute of Technical Acoustics (ITA)
6
 *		RWTH Aachen University, Germany, 2015-2018
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 *
 * ----------------------------------------------------------------
 *				    ____  __________  _______
 *				   //  / //__   ___/ //  _   |
 *				  //  /    //  /    //  /_|  |
 *				 //  /    //  /    //  ___   |
 *				//__/    //__/    //__/   |__|
 *
 * ----------------------------------------------------------------
 *
 */

#ifndef IW_ITA_THIRD_OCTAVE_FILTERBANK
#define IW_ITA_THIRD_OCTAVE_FILTERBANK

Dipl.-Ing. Jonas Stienen's avatar
Dipl.-Ing. Jonas Stienen committed
22
#include <ITADSPDefinitions.h>
23
24
25
26
27
28
29
30
31
32
#include <ITAThirdOctaveMagnitudeSpectrum.h>

//! Terzbandspektrum-Filterbank zur digitalen Filterung
/**
  * Diese Oberklasse für Filterbänke, die zur Realisierung der Filterung von Terzbandspektren dient,
  * definiert die Schnittstellen zur Nutzung einer solchen Filterbank.
  *
  * Sie wird durch die Realisierungsmethoden (#FilterbankRealisationMethods) mittels Factory Method
  * erstellt und kann dann Eingabesamples im Process()-Schritt filtern.
  *
33
  * Die Datensätze der Terzbandspektren werden durch die Klasse \CITAThirdOctaveMagnitudeSpectrum verwaltet.
34
35
  *
  */
Dipl.-Ing. Jonas Stienen's avatar
Dipl.-Ing. Jonas Stienen committed
36
class ITA_DSP_API CITAThirdOctaveFilterbank
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
{
public:
	//! Realisierungsmethoden
	enum
	{
		FIR_SPLINE_LINEAR_PHASE = 0, //!< Linearphasiges FIR Filter mit Spline-Interpolation
		IIR_BIQUADS_ORDER10			 //!< Rekursives IIR Filter umgesetzt durch kaskadierte Biquads
	} FilterbankRealisationMethods;

	//! Factory method zum erzeugen einer Filterbank
	/**
	  * \param dSamplerate Samplingrate
	  * \param iBlocklength Blockgröße
	  * \param iMethod Realisierungsmethode, eines von #FilterbankRealisationMethods (default: linearphasiges FIR Filter)
	  *
	  * \return Zeiger auf die erzeugte Terzfilterbank
	  */
	static CITAThirdOctaveFilterbank* Create( const double dSampleRate, const int iBlockLength, const int iMethod = FIR_SPLINE_LINEAR_PHASE );

	//! Destruktor
	virtual inline ~CITAThirdOctaveFilterbank() {};

	//! Idealer Übertrager setzen
	/**
	  * \param bSmoothChangeover Überbenden (default, true) oder direktes Umschalten (false)
	  */
	virtual inline void SetIdentity( const bool bSmoothChangeover = true )
	{
65
		CITAThirdOctaveGainMagnitudeSpectrum oIdentity;
66
67
		oIdentity.SetIdentity();
		SetMagnitudes( oIdentity, bSmoothChangeover );
68
69
70
71
72
73
74
	};

	//! Verstärkungsfaktoren setzen
	/**
	  * \param oGains Neue Verstärkungsfaktoren
	  * \param bSmoothChangeover Überbenden (default, true) oder direktes Umschalten (false)
	  */
75
	virtual void SetMagnitudes( const CITAThirdOctaveGainMagnitudeSpectrum& oGains, const bool bSmoothChangeover = true ) = 0;
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100

	//! Latenz (Verzögerung) der Filterbank zurückgeben
	/**
	  * \return Latenz (Verzögerung) in ganzzahligen Sample
	  */
	int GetLatency() const;

	//! Löscht alle internen Puffer
	virtual void Clear() = 0;

	//! Filtert einen Block Samples (muss die angegebene Blocklänge haben, s.o.)
	/**
	  * \pfInputSamples Eingabesamples (Anzahl = Blocklänge)
	  * \pfOutputSamples Ausgabesamples (Anzahl = Blocklänge)
	  *
	  * @todo jst: check if this couln't be decoupled from block-bound processing (like ITABiquad)
	  */
	virtual void Process( const float* pfInputSamples, float* pfOutputSamples ) = 0;

protected:
	//! Standardkonstruktor (Deaktiviert, FactoryMethod Create() benutzen)
	inline CITAThirdOctaveFilterbank() {};
};

#endif // IW_ITA_THIRD_OCTAVE_FILTERBANK