Skip to content
Snippets Groups Projects
Commit 38fe2ca7 authored by Dipl.-Ing. Jonas Stienen's avatar Dipl.-Ing. Jonas Stienen
Browse files

Progress, now Butterworth

parent 25a645ae
No related branches found
No related tags found
No related merge requests found
......@@ -5,7 +5,9 @@
#include <DspFilters/Dsp.h>
const int iOrder = 16;
const int iOrder = 4;
typedef Dsp::Filter ITAIIRFilter;
class CITAFilterbankIIRImpl : public CITAFilterbankIIR
{
......@@ -14,7 +16,7 @@ public:
~CITAFilterbankIIRImpl();
void Process( const float* pfInputData, float* pfOutputData );
private:
Dsp::Butterworth::BandShelf< iOrder > m_oFilterInstance;
ITAIIRFilter* m_pFilterInstance;
float* m_vpfIn[ 1 ];
int m_iBlockLength;
};
......@@ -25,22 +27,41 @@ CITAFilterbankIIR* CITAFilterbankIIR::Create( const int iBlockLength, const doub
}
CITAFilterbankIIRImpl::CITAFilterbankIIRImpl( const int iBlockLength, const double dSampleRate )
: m_pFilterInstance( NULL )
{
float fCenterFrequency = 500.0f;
float fFrequencyWidth = 20.0f;
m_oFilterInstance.setup( iOrder, dSampleRate, fCenterFrequency, fFrequencyWidth, 3.0f );
//m_pFilterInstance = new Dsp::SmoothedFilterDesign< Dsp::RBJ::Design::BandPass1, 1 >( 1024 );
//m_pFilterInstance = new Dsp::SmoothedFilterDesign< Dsp::Butterworth::BandPass< iOrder >, 1, Dsp::DirectFormII >( 1024 );
float fCenterFrequency = 4000.0f;
float fFrequencyWidth = 800.0f;
//m_oFilterInstance.setup( iOrder, dSampleRate, fCenterFrequency, fFrequencyWidth, 3.0f );
/*
Dsp::Params params;
params[ 0 ] = dSampleRate; // sample rate
params[ 1 ] = iOrder;
params[ 2 ] = 1000.0;
params[ 3 ] = 120.0f;
//m_pFilterInstance->setParams( params );
*/
m_pFilterInstance = new Dsp::SmoothedFilterDesign< Dsp::Butterworth::Design::BandPass< iOrder >, 1, Dsp::DirectFormII >( 1024 );
Dsp::Params params;
params[ 0 ] = 44100; // sample rate
params[ 1 ] = iOrder; // order
params[ 2 ] = fCenterFrequency; // center frequency
params[ 3 ] = fFrequencyWidth; // band width
m_pFilterInstance->setParams( params );
m_iBlockLength = iBlockLength;
}
CITAFilterbankIIRImpl::~CITAFilterbankIIRImpl()
{
delete m_pFilterInstance;
}
void CITAFilterbankIIRImpl::Process( const float* pfInputData, float* pfOutputData )
{
fm_copy( pfOutputData, pfInputData, m_iBlockLength );
m_vpfIn[ 0 ] = pfOutputData;
Dsp::Butterworth::BandShelf::StateType oState;
m_oFilterInstance.process( m_iBlockLength, m_vpfIn, oState );
m_pFilterInstance->process( m_iBlockLength, m_vpfIn );
}
......@@ -3,8 +3,8 @@ iir_io = ita_merge( ita_read( 'IIR_in.wav' ), ita_read( 'IIR_out.wav' ) );
%% prepare
iir_io_io_snipped = ita_time_crop( iir_io, [ 1 512 ], 'samples' );
iir_io_io_snipped.comment = 'IIR Bessel bandpass 8th order';
iir_io_io_snipped.comment = 'IIR filterbank test';
iir_io_io_snipped.channelNames = { 'Dirac signal in', 'System response signal after IIR filtering' };
%% plot
iir_io_io_snipped.pf
\ No newline at end of file
iir_io_io_snipped.pfp
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment