数字滤波器原理及设计 第2页
#include "stdafx.h"
#include "DigitalFilter.h"
//////////////////////////////////////////////////////////////////////////
// Cfloat_seq
//////////////////////////////////////////////////////////////////////////
Cfloat_seq::Cfloat_seq()
{
m_fValues = NULL;
m_nValueNum = 0;
}
Cfloat_seq::~Cfloat_seq()
{
ClearValues();
}
void Cfloat_seq::ClearValues( bool bFreeMem )
{
if( bFreeMem )
{
m_nValueNum = 0;
if( m_fValues )
delete[] m_fValues;
m_fValues = NULL;
}
else if( ( m_fValues ) && ( m_nValueNum > 0 ) )
memset( m_fValues, 0, sizeof( float ) * m_nValueNum );
}
bool Cfloat_seq::SetValue( int idx, float Value, bool bErrMsg )
{
if( ( !m_fValues ) || ( m_nValueNum < 1 ) || ( idx < 0 ) || ( idx >= m_nValueNum ) )
{
if( bErrMsg )
MessageBox( NULL, "InValid Data", "SetValue", MB_OK | MB_ICONEXCLAMATION );
return false;
}
m_fValues[ idx ] = Value;
return true;
}
bool Cfloat_seq::GetValue( int idx, float &Value, bool bErrMsg )
{
Value = 0;
if( ( !m_fValues ) || ( m_nValueNum < 1 ) || ( idx < 0 ) || ( idx >= m_nValueNum ) )
{
if( bErrMsg )
MessageBox( NULL, "InValid Data", "GetValue", MB_OK | MB_ICONEXCLAMATION );
return false;
}
Value = m_fValues[ idx ];
return true;
}
void Cfloat_seq::AddValue( const float *ValueArray, int Num )
{
if( ( !ValueArray ) || ( Num < 1 ) )
return;
int newNum = Num;
if( ( m_fValues ) && ( m_nValueNum > 0 ) )
newNum += m_nValueNum;
if( newNum < 1 )
ClearValues( true );
else
{
float *newBuff = new float[ newNum ];
int idx = 0;
if( ( m_fValues ) && ( m_nValueNum > 0 ) )
{
memcpy( newBuff, m_fValues, sizeof( float ) * m_nValueNum );
idx += m_nValueNum;
}
memcpy( &newBuff[ idx ], ValueArray, sizeof( float ) * Num );
m_nValueNum = newNum;
}
}
const float* Cfloat_seq::GetValueArray()
{
return m_fValues;
}
int Cfloat_seq::GetValueNum()
{
return m_nValueNum;
}
Cfloat_seq Cfloat_seq::operator+( Cfloat_seq &Value )
{
Cfloat_seq Result;
Result.ClearValues( true );
Result.AddValue( this->GetValueArray(), this->GetValueNum() );
Result.AddValue( Value.GetValueArray(), Value.GetValueNum() );
return Result;
}
//////////////////////////////////////////////////////////////////////////
// CFIR
//////////////////////////////////////////////////////////////////////////
CFIR::CFIR()
{
Cfloat_seq::Cfloat_seq();
}
CFIR::~CFIR()
{
Cfloat_seq::~Cfloat_seq();
}