Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

FIR filters

Collaboration diagram for FIR filters:


Classes

class  SPUC::rfir< Numeric >
 template class rfir FIR filter implementation with complex input and real coefficients More...
class  SPUC::cic
 class for CIC digital filter More...
class  SPUC::farrow< Numeric >
 Template Class for Farrow implementation of a ploynomial interpolation using a FIR filter. More...
class  SPUC::fir< Numeric >
 Template Class for Modeling a Finite Impulse Response filter. More...
class  SPUC::fir_adapt< Numeric >
 template class fir_adapt Based on FIR class, created to support LMS adaptive filtering More...
class  SPUC::fir_decim< Numeric >
 template class fir_decim based on FIR class, created to support polyphase FIR decimation More...
class  SPUC::fir_interp< Numeric >
 template class fir_decim based on FIR class, created to support polyphase FIR interpolation More...
class  SPUC::fir_multi_interp< Numeric >
 template class fir_decim based on FIR class, created to support polyphase FIR interpolation More...
class  SPUC::fir_sparse_coef< Numeric >
 template class fir_decim based on FIR class, created to support spare coefficients (zero padded) More...
class  SPUC::lagrange< Numeric >
 Template Class for Lagrange interpolation using a FIR filter. More...
class  SPUC::remez_fir
 template remez FIR class More...
class  SPUC::running_average< Numeric >
 template class running average filter consisting of a delay line, adder and subtractor More...
class  SPUC::running_sum< Numeric >
 template class running average filter consisting of a delay line, adder and subtractor More...
class  SPUC::sum_and_dump
 sum and dump filter More...
class  SPUC::scic
 Registers are signed long and default number of stages is 2. More...

Functions

void SPUC::root_raised_cosine (fir< long > &rcfir, double alpha, int rate)
void SPUC::root_raised_cosine (fir< complex< long > > &rcfir, double alpha, int rate, int bits=10)
void SPUC::root_raised_cosine (fir< complex< long > > &rcfir, double alpha, int rate, int bits=10, double scale=1.0)
void SPUC::root_raised_cosine (fir< complex< double > > &rcfir, double alpha, int rate)
void SPUC::root_raised_cosine (fir_interp< complex< double > > &rcfir, double alpha, int rate)
void SPUC::root_raised_cosine (fir< double > &rcfir, double alpha, int rate)
void SPUC::raised_cosine (fir< long > &rcfir, double alpha, int rate)
void SPUC::raised_cosine (fir< double > &rcfir, double alpha, int rate)
double SPUC::io (double x)
 bessel function for kaiser window
void SPUC::hamming (double *w, long nf, double alpha, double beta)
 hamming window $ w(n) = alpha + beta*cos( 2*\pi*(n-1)/(nf-1) )$
void SPUC::hanning (double *w, long nf)
 hanning window $ w(n) = 0.5( 1 - cos( 2*\pi*n/(nf-1) )$
void SPUC::blackman (double *w, long nf)
 Blackman Window $ w[x] = 0.42 - 0.5*cos(2*\pi*x/nf) + 0.08*cos(2*\pi*x/nf)$.
void SPUC::kaiser (double *w, long nf, double beta)
 kaiser window
void SPUC::chebc (double nf, double dp, double df, double n, double x0)
 chebyshev window subroutine to generate chebyshev window parameters when one of the three parameters nf,dp and df is unspecified
void SPUC::cheby (double *w, long nf, long n, long ieo, double dp, double df, double x0)
 dolph chebyshev window design
void SPUC::butterworth_fir (fir< double > &butfir, double spb)
 calculates the sampled butterworth (max flat) filter impulse response
void SPUC::create_remez_lpfir (fir< double > &remezfir, double *edge, double *fx, double *wtx)
 calculates the coefficients for lowpass FIR based on Remez constraints
void SPUC::gaussian_fir (fir< double > &gaussf, double bt, double spb)
 calculates the sampled Gaussian filter impulse response
void SPUC::ls_fir (fir< double > fil, double fc, double spb)
 calculates the least square filter impulse response

Function Documentation

void SPUC::blackman double *  w,
long  nf
 

Blackman Window $ w[x] = 0.42 - 0.5*cos(2*\pi*x/nf) + 0.08*cos(2*\pi*x/nf)$.

void SPUC::butterworth_fir fir< double > &  butfir,
double  spb
 

calculates the sampled butterworth (max flat) filter impulse response

With B(p) the butterworth response we have:

$ B(p) = \displaystyle\sum_{k=1}^{N/2} \frac{\lambda(k)*(1+\alpha(k)*p/wc)}{1+2*cos(\beta(k))*p/wc + (p/wc)^2)}.$

with

N = Order of Butterworth filter (always even)

$ \beta(k) = (2 * k - 1) / (2 * N) k = 1, 2, .. N/2 $

$ \alpha(k) = sin((N/2 - 1) * \beta(k)) / sin(N * \beta(k) / 2) $

$ \lambda(p) = \frac{\sin(N*\beta(k)/2)}{sin(\beta(k))}. \displaystyle\prod_{m=1,m!=k}^{N/2} 2*cos(\beta(k) - cos(\beta(m))) $

The impulse response of B(p) can be found by realizing that:

$ \frac{p+a}{(p+a)^2 + w^2} <-> e^{-at} * cos(w*t) $

$ \frac{w}{(p+a)^2 + w^2} <-> e^{-at} * sin(w*t) $

and that B(p) can be written as a linear combination of the these two expressions:

$ \frac{x*(p+a)+y*w}{(p+a)^2 + w^2} <-> e^{-at}*x*cos(w*t) + y* sin(w*t) $

We find after some algebra:

$ x(k) = \alpha(k) $

$ w(k) = \sqrt{1 - cos(\beta(k)) * cos((\beta(k)))} $

$ a(k) = cos(\beta(k)) $

$ y(k) = (1 - \alpha(k) * cos(\beta(k)) / w(k) $

Also used is the time scaling rule for Fourier transforms: |a| * y(at) <--> Y(f/a)

void SPUC::chebc double  nf,
double  dp,
double  df,
double  n,
double  x0
 

chebyshev window subroutine to generate chebyshev window parameters when one of the three parameters nf,dp and df is unspecified

void SPUC::cheby double *  w,
long  nf,
long  n,
long  ieo,
double  dp,
double  df,
double  x0
 

dolph chebyshev window design

parameters

  • nf = filter length in samples
  • w = window array of size n
  • n = half length of filter = (nf+1)/2
  • ieo = even-odd indicator--ieo=0 for nf even
  • dp = window ripple on an absolute scale
  • df = normalized transition width of window
  • x0 = window parameter related to transition width
  • xn = nf-1

void SPUC::create_remez_lpfir fir< double > &  remezfir,
double *  edge,
double *  fx,
double *  wtx
 

calculates the coefficients for lowpass FIR based on Remez constraints

void SPUC::gaussian_fir fir< double > &  gaussf,
double  bt,
double  spb
 

calculates the sampled Gaussian filter impulse response

void SPUC::hamming double *  w,
long  nf,
double  alpha,
double  beta
 

hamming window $ w(n) = alpha + beta*cos( 2*\pi*(n-1)/(nf-1) )$

void SPUC::hanning double *  w,
long  nf
 

hanning window $ w(n) = 0.5( 1 - cos( 2*\pi*n/(nf-1) )$

double SPUC::io double  x  ) 
 

bessel function for kaiser window

:

function: io

void SPUC::kaiser double *  w,
long  nf,
double  beta
 

kaiser window

void SPUC::ls_fir fir< double >  fil,
double  fc,
double  spb
 

calculates the least square filter impulse response

void SPUC::raised_cosine fir< double > &  rcfir,
double  alpha,
int  rate
 

void SPUC::raised_cosine fir< long > &  rcfir,
double  alpha,
int  rate
 

void SPUC::root_raised_cosine fir< double > &  rcfir,
double  alpha,
int  rate
 

void SPUC::root_raised_cosine fir_interp< complex< double > > &  rcfir,
double  alpha,
int  rate
 

void SPUC::root_raised_cosine fir< complex< double > > &  rcfir,
double  alpha,
int  rate
 

void SPUC::root_raised_cosine fir< complex< long > > &  rcfir,
double  alpha,
int  rate,
int  bits = 10,
double  scale = 1.0
 

void SPUC::root_raised_cosine fir< complex< long > > &  rcfir,
double  alpha,
int  rate,
int  bits = 10
 

void SPUC::root_raised_cosine fir< long > &  rcfir,
double  alpha,
int  rate
 


Generated on Fri Sep 16 11:06:54 2005 for spuc by  doxygen 1.4.4