fd viva q

Embed Size (px)

Citation preview

  • 8/3/2019 fd viva q

    1/12

    1.1 What are "FIR filters"?

    FIR filters are one of two primary types of digital filters used in Digital Signal Processing (DSP) applications, the

    other type being IIR.

    1.2 What does "FIR" mean?

    "FIR" means "Finite Impulse Response". If you put in an impulse, that is, a single "1" sample followed by many "0"

    samples, zeroes will come out after the "1" sample has made its way through the delay line of the filter.

    1.3 Why is the impulse response "finite"?

    In the common case, the impulse response is finite because there is no feedback in the FIR. A lack of feedback

    guarantees that the impulse response will be finite. Therefore, the term "finite impulse response" is nearly

    synonymous with "no feedback".

    However, if feedback is employed yet the impulse response is finite, the filter still is a FIR. An example is the

    moving average filter, in which the Nth prior sample is subtracted (fed back) each time a new sample comes

    in. This filter has a finite impulse response even though it uses feedback: after N samples of an impulse, the output

    will always be zero.

    1.4 How do I pronounce "FIR"?

    Some people say the letters F-I-R; other people pronounce as if it were a type of tree. We prefer the tree. (The

    difference is whether you talk about an F-I-R filter or a FIR filter.)

    1.5 What is the alternative to FIR filters?

    DSP filters can also be "Infinite Impulse Response" (IIR). (See dspGuru'sIIR FAQ.) IIR filters use feedback, so

    when you input an impulse the output theoretically rings indefinitely.

    1.6 How do FIR filters compare to IIR filters?

    Each has advantages and disadvantages. Overall, though, the advantages of FIR filters outweigh the disadvantages,

    so they are used much more than IIRs.

    1.6.1 What are theadvantages of FIR Filters (compared to IIR filters)?

    Compared to IIR filters, FIR filters offer the following advantages:

    They can easily be designed to be "linear phase" (and usually are). Put simply, linear-phase filtersdelay the input signal but dont distort its phase.

    They are simple to implement. On most DSP microprocessors, the FIR calculation can be done bylooping a single instruction.

    They are suited to multi-rate applications. By multi-rate, we mean either "decimation" (reducingthe sampling rate), "interpolation" (increasing the sampling rate), or both. Whether decimating or

    interpolating, the use of FIR filters allows some of the calculations to be omitted, thus providing

    an important computational efficiency. In contrast, if IIR filters are used, each output must be

    individually calculated, even if it that output will discarded (so the feedback will be incorporated

    into the filter).

    They have desireable numeric properties. In practice, all DSP filters must be implemented usingfinite-precision arithmetic, that is, a limited number of bits. The use of finite-precision arithmetic

    http://www.dspguru.com/dsp/faqs/iirhttp://www.dspguru.com/dsp/faqs/iirhttp://www.dspguru.com/dsp/faqs/iirhttp://www.dspguru.com/dsp/faqs/iir
  • 8/3/2019 fd viva q

    2/12

    in IIR filters can cause significant problems due to the use of feedback, but FIR filters without

    feedback can usually be implemented using fewer bits, and the designer has fewer practical

    problems to solve related to non-ideal arithmetic.

    They can be implemented using fractional arithmetic. Unlike IIR filters, it is always possible toimplement a FIR filter using coefficients with magnitude of less than 1.0. (The overall gain of the

    FIR filter can be adjusted at its output, if desired.) This is an important consideration when using

    fixed-point DSP's, because it makes the implementation much simpler.

    1.6.2 What are thedisadvantages of FIR Filters (compared to IIR filters)?

    Compared to IIR filters, FIR filters sometimes have the disadvantage that they require more memory and/or

    calculation to achieve a given filter response characteristic. Also, certain responses are not practical to implement

    with FIR filters.

    1.7 What terms are used in describing FIR filters?

    Impulse Response - The "impulse response" of a FIR filter is actually just the set of FIRcoefficients. (If you put an "impluse" into a FIR filter which consists of a "1" sample followed by

    many "0" samples, the output of the filter will be the set of coefficients, as the 1 sample moves

    past each coefficient in turn to form the output.) Tap - A FIR "tap" is simply a coefficient/delay pair. The number of FIR taps, (often designated as

    "N") is an indication of 1) the amount of memory required to implement the filter, 2) the number

    of calculations required, and 3) the amount of "filtering" the filter can do; in effect, more taps

    means more stopband attenuation, less ripple, narrower filters, etc.

    Multiply-Accumulate (MAC) - In a FIR context, a "MAC" is the operation of multiplying acoefficient by the corresponding delayed data sample and accumulating the result. FIRs usually

    require one MAC per tap. Most DSP microprocessors implement the MAC operation in a single

    instruction cycle.

    Transition Band- The band of frequencies between passband and stopband edges. The narrowerthe transition band, the more taps are required to implement the filter. (A "small" transition band

    results in a "sharp" filter.)

    Delay Line - The set of memory elements that implement the "Z^-1" delay elements of the FIRcalculation.

    Circular Buffer- A special buffer which is "circular" because incrementing at the end causes it towrap around to the beginning, or because decrementing from the beginning causes it to wraparound to the end. Circular buffers are often provided by DSP microprocessors to implement the

    "movement" of the samples through the FIR delay-line without having to literally move the data in

    memory. When a new sample is added to the buffer, it automatically replaces the oldest one.

    2.1 Linear Phase

    2.1.1 What is the association between FIR filters and "linear-phase"?

    Most FIRs are linear-phase filters; when a linear-phase filter is desired, a FIR is usually used.

    2.1.2 What is a linear phase filter?

  • 8/3/2019 fd viva q

    3/12

    "Linear Phase" refers to the condition where the phase response of the filter is a linear (straight-line) function of

    frequency (excluding phase wraps at +/- 180 degrees). This results in the delay through the filter being the same at

    all frequencies. Therefore, the filter does not cause "phase distortion" or "delay distortion". The lack of phase/delay

    distortion can be a critical advantage of FIR filters over IIR and analog filters in certain systems, for example, in

    digital data modems.

    2.1.3 What is the condition for linear phase?

    FIR filters are usually designed to be linear-phase (but they don't have to be.) A FIR filter is linear-phase if (and

    only if) its coefficients are symmetrical around the center coefficient, that is, the first coefficient is the same as the

    last; the second is the same as the next-to-last, etc. (A linear-phase FIR filter having an odd number of coefficients

    will have a single coefficient in the center which has no mate.)

    2.1.4 What is the delay of a linear-phase FIR?

    The formula is simple: given a FIR filter which has N taps, the delay is: (N - 1) / (2 * Fs), where Fs is the

    sampling frequency. So, for example, a 21 tap linear-phase FIR filter operating at a 1 kHz rate has delay: (21 - 1) /

    (2 * 1 kHz)=10 milliseconds.

    2.1.4 What is the alternative to linear phase?

    Non-linear phase, of course. ;-) Actually, the most popular alternative is "minimum phase". Minimum-phase

    filters (which might better be called "minimum delay" filters) have less delay than linear-phase filters with the same

    amplitude response, at the cost of a non-linear phase characteristic, a.k.a. "phase distortion".

    A lowpass FIR filter has its largest-magnitude coefficients in the center of the impulse response. In comparison,

    the largest-magnitude coefficients of a minimum-phase filter are nearer to the beginning . (See dspGuru's tutorial

    How To Design Minimum-Phase FIR Filters for more details.)

    2.2 Frequency Response

    2.2.1 What is the Z transform of a FIR filter?

    For an N-tap FIR filter with coefficients h(k), whose output is described by:

  • 8/3/2019 fd viva q

    4/12

    y(n)=h(0)x(n) + h(1)x(n-1) + h(2)x(n-2) + ... h(N-1)x(n-N-1),

    the filter's Z transform is:

    H(z)=h(0)z-0 + h(1)z-1 + h(2)z-2 + ... h(N-1)z-(N-1) , or

    FIR Z transform

    2.2.2 What is the frequency response formula for a FIR filter?

    The variable z in H(z) is a continuous complex variable, and we can describe it as: z=rejw, where r is a

    magnitude and w is the angle of z. If we let r=1, then H(z) around the unit circle becomes the filter's frequency

    response H(jw). This means that substituting ejw for z in H(z) gives us an expression for the filter's frequency

    response H(w), which is:

    H(jw)=h(0)e-j0w + h(1)e-j1w + h(2)e-j2w + ... h(N-1)e-j(N-1)w , or

    Using Euler's identity, e-ja=cos(a) - jsin(a), we can write H(w) in rectangular form as:

    H(jw)=h(0)[cos(0w) - jsin(0w)] + h(1)[cos(1w) - jsin(1w)] + ... h(N-1)[cos((N-1)w) - jsin((N-1)w)] , or

    FIR frequency response

    2.2.3 Can I calculate the frequency response of a FIR using the Discrete Fourier Transform (DFT)?

    Yes. For an N-tap FIR, you can get N evenly-spaced points of the frequency response by doing a DFT on the filter

    coefficients. However, to get the frequency response of the filter at any arbitrary frequency (that is, at frequencies

    between the DFT outputs), you will need to use the formula above.

    2.2.4 What is the DC gain of a FIR filter?

  • 8/3/2019 fd viva q

    5/12

    Consider a DC (zero Hz) input signal consisting of samples which each have value 1.0. After the FIR's delay line

    had filled with the 1.0 samples, the output would be the sum of the coefficients. Therefore, the gain of a FIR filter at

    DC is simply the sum of the coefficients.

    This intuitive result can be checked against the formula above. If we set w to zero, the cosine term is always 1,

    and the sine term is always zero, so the frequency response becomes:

    FIR DC response

    2.2.5 How do I scale the gain of a FIR filter?

    Simply multiply all coefficients by the scale factor.

    2.3 Numeric Properties

    2.3.1 Are FIR filters inherently stable?

    Yes. Since they have no feedback elements, any bounded input results in a bounded output.

    2.3.2 What makes the numerical properties of FIR filters "good"?

    Again, the key is the lack of feedback. The numeric errors that occur when implementing FIR filters in computer

    arithmetic occur separately with each calculation; the FIR doesn't "remember" its past numeric errors. In contrast,

    the feedback aspect of IIR filters can cause numeric errors to compound with each calculation, as numeric errors are

    fed back.

    The practical impact of this is that FIRs can generally be implemented using fewer bits of precision than IIRs. For

    example, FIRs can usually be implemented with 16 bits, but IIRs generally require 32 bits, or even more.

    2.4 Why are FIR filters generally preferred over IIR filters in multirate (decimating and interpolating) systems?

  • 8/3/2019 fd viva q

    6/12

    Because only a fraction of the calculations that would be required to implement a decimating or interpolating FIR

    in a literal way actually needs to be done.

    Since FIR filters do not use feedback, only those outputs which are actually going to be used have to be

    calculated. Therefore, in the case of decimating FIRs (in which only 1 of N outputs will be used), the other N-1outputs don't have to be calculated. Similarly, for interpolating filters (in which zeroes are inserted between the input

    samples to raise the sampling rate) you don't actually have to multiply the inserted zeroes with their corresponding

    FIR coefficients and sum the result; you just omit the multiplication-additions that are associated with the zeroes

    (because they don't change the result anyway.)

    In contrast, since IIR filters use feedback, every input must be used, and every input must be calculated because

    all inputs and outputs contribute to the feedback in the filter.

    2.5 What special types of FIR filters are there?

    Aside from "regular" and "extra crispy" there are:

    Boxcar - Boxcar FIR filters are simply filters in which each coefficient is 1.0. Therefore, for an N-tap boxcar,

    the output is just the sum of the past N samples. Because boxcar FIRs can be implemented using only adders, they

    are of interest primarily in hardware implementations, where multipliers are expensive to implement.

    Hilbert Transformer - Hilbert Transformers shift the phase of a signal by 90 degrees. They are used primarily

    for creating the imaginary part of a complex signal, given its real part.

    Differentiator - Differentiators have an amplitude response which is a linear function of frequency. They are

    not very popular nowadays, but are sometimes used for FM demodulators.

    Lth-Band - Also called "Nyq2.1 Linear Phase

    2.1.1 What is the association between FIR filters and "linear-phase"?

    Most FIRs are linear-phase filters; when a linear-phase filter is desired, a FIR is usually used.

    2.1.2 What is a linear phase filter?

    "Linear Phase" refers to the condition where the phase response of the filter is a linear (straight-line) function of

    frequency (excluding phase wraps at +/- 180 degrees). This results in the delay through the filter being the same atall frequencies. Therefore, the filter does not cause "phase distortion" or "delay distortion". The lack of phase/delay

    distortion can be a critical advantage of FIR filters over IIR and analog filters in certain systems, for example, in

    digital data modems.

    2.1.3 What is the condition for linear phase?

  • 8/3/2019 fd viva q

    7/12

    FIR filters are usually designed to be linear-phase (but they don't have to be.) A FIR filter is linear-phase if (and

    only if) its coefficients are symmetrical around the center coefficient, that is, the first coefficient is the same as the

    last; the second is the same as the next-to-last, etc. (A linear-phase FIR filter having an odd number of coefficients

    will have a single coefficient in the center which has no mate.)

    2.1.4 What is the delay of a linear-phase FIR?

    The formula is simple: given a FIR filter which has N taps, the delay is: (N - 1) / (2 * Fs), where Fs is the sampling

    frequency. So, for example, a 21 tap linear-phase FIR filter operating at a 1 kHz rate has delay: (21 - 1) / (2 * 1

    kHz)=10 milliseconds.

    2.1.4 What is the alternative to linear phase?

    Non-linear phase, of course. ;-) Actually, the most popular alternative is "minimum phase". Minimum-phase filters

    (which might better be called "minimum delay" filters) have less delay than linear-phase filters with the same

    amplitude response, at the cost of a non-linear phase characteristic, a.k.a. "phase distortion".

    A lowpass FIR filter has its largest-magnitude coefficients in the center of the impulse response. In comparison, the

    largest-magnitude coefficients of a minimum-phase filter are nearer to the beginning . (See dspGuru's tutorialHow

    To Design Minimum-Phase FIR Filtersfor more details.)

    2.2 Frequency Response

    2.2.1 What is the Z transform of a FIR filter?

    For an N-tap FIR filter with coefficients h(k), whose output is described by:

    y(n)=h(0)x(n) + h(1)x(n-1) + h(2)x(n-2) + ... h(N-1)x(n-N-1),

    the filter's Z transform is:

    H(z)=h(0)z-0 + h(1)z-1 + h(2)z-2 + ... h(N-1)z-(N-1) , or

    2.2.2 What is the frequency response formula for a FIR filter?

    The variable z in H(z) is a continuous complex variable, and we can describe it as: z=rejw

    , where r is a magnitude

    and w is the angle of z. If we let r=1, then H(z) around the unit circle becomes the filter's frequency response H(jw).

    This means that substituting ejw

    for z in H(z) gives us an expression for the filter's frequency response H(w), which

    is:

    H(jw)=h(0)e-j0w

    + h(1)e-j1w

    + h(2)e-j2w

    + ... h(N-1)e-j(N-1)w

    , or

    Using Euler's identity, e-ja

    =cos(a) - jsin(a), we can write H(w) in rectangular form as:

    H(jw)=h(0)[cos(0w) - jsin(0w)] + h(1)[cos(1w) - jsin(1w)] + ... h(N-1)[cos((N-1)w) - jsin((N-1)w)] , or

    http://www.dspguru.com/dsp/howtos/how-to-design-minimum-phase-fir-filtershttp://www.dspguru.com/dsp/howtos/how-to-design-minimum-phase-fir-filtershttp://www.dspguru.com/dsp/howtos/how-to-design-minimum-phase-fir-filtershttp://www.dspguru.com/dsp/howtos/how-to-design-minimum-phase-fir-filtershttp://www.dspguru.com/dsp/howtos/how-to-design-minimum-phase-fir-filtershttp://www.dspguru.com/dsp/howtos/how-to-design-minimum-phase-fir-filters
  • 8/3/2019 fd viva q

    8/12

    2.2.3 Can I calculate the frequency response of a FIR using the Discrete Fourier Transform (DFT)?

    Yes. For an N-tap FIR, you can get N evenly-spaced points of the frequency response by doing a DFT on the filter

    coefficients. However, to get the frequency response of the filter at any arbitrary frequency (that is, at frequenciesbetween the DFT outputs), you will need to use the formula above.

    2.2.4 What is the DC gain of a FIR filter?

    Consider a DC (zero Hz) input signal consisting of samples which each have value 1.0. After the FIR's delay line

    had filled with the 1.0 samples, the output would be the sum of the coefficients. Therefore, the gain of a FIR filter at

    DC is simply the sum of the coefficients.

    This intuitive result can be checked against the formula above. If we set w to zero, the cosine term is always 1, and

    the sine term is always zero, so the frequency response becomes:

    2.2.5 How do I scale the gain of a FIR filter?

    Simply multiply all coefficients by the scale factor.

    2.3 Numeric Properties

    2.3.1 Are FIR filters inherently stable?

    Yes. Since they have no feedback elements, any bounded input results in a bounded output.

    2.3.2 What makes the numerical properties of FIR filters "good"?

    Again, the key is the lack of feedback. The numeric errors that occur when implementing FIR filters in computer

    arithmetic occur separately with each calculation; the FIR doesn't "remember" its past numeric errors. In contrast,

    the feedback aspect of IIR filters can cause numeric errors to compound with each calculation, as numeric errors are

    fed back.

    The practical impact of this is that FIRs can generally be implemented using fewer bits of precision than IIRs. For

    example, FIRs can usually be implemented with 16 bits, but IIRs generally require 32 bits, or even more.

    2.4 Why are FIR filters generally preferred over IIR filters in multirate (decimating and interpolating)

    systems?

    Because only a fraction of the calculations that would be required to implement a decimating or interpolating FIR in

    a literal way actually needs to be done.

  • 8/3/2019 fd viva q

    9/12

    Since FIR filters do not use feedback, only those outputs which are actually going to be used have to be calculated.

    Therefore, in the case of decimating FIRs (in which only 1 of N outputs will be used), the other N-1 outputs don't

    have to be calculated. Similarly, for interpolating filters (in which zeroes are inserted between the input samples to

    raise the sampling rate) you don't actually have to multiply the inserted zeroes with their corresponding FIR

    coefficients and sum the result; you just omit the multiplication-additions that are associated with the zeroes

    (because they don't change the result anyway.)

    In contrast, since IIR filters use feedback, every input must be used, and every input must be calculated because all

    inputs and outputs contribute to the feedback in the filter.

    2.5 What special types of FIR filters are there?

    Aside from "regular" and "extra crispy" there are:

    Boxcar- Boxcar FIR filters are simply filters in which each coefficient is 1.0. Therefore, for an N-tap boxcar, the output is just the sum of the past N samples. Because boxcar FIRs can be

    implemented using only adders, they are of interest primarily in hardware implementations, where

    multipliers are expensive to implement.

    Hilbert Transformer- Hilbert Transformers shift the phase of a signal by 90 degrees. They areused primarily for creating the imaginary part of a complex signal, given its real part.

    Differentiator- Differentiators have an amplitude response which is a linear function of frequency.They are not very popular nowadays, but are sometimes used for FM demodulators.

    Lth-Band- Also called "Nyquist" filters, these filters are a special class of filters used primarily inmultirate applications. Their key selling point is that one of everyL coefficients is zero--a factwhich can be exploited to reduce the number of multiply-accumulate operations required to

    implement the filter. (The famous "half-band" filter is actually an Lth-band filter, with L=2.)

    Raised-Cosine - This is a special kind of filter that is sometimes used for digital data applications.(The frequency response in the passband is a cosine shape which has been "raised" by a constant.)

    See dspGuru'sRaised-Cosine FAQfor more information.

    Lots of others.uist" filters, these filters are a special class of filters used primarily in multirate applications. Their key selling point

    is that one of every L coefficients is zero--a fact which can be exploited to reduce the number of multiply-

    accumulate operations required to implement the filter. (The famous "half-band" filter is actually an Lth-band filter,

    with L=2.)

    Raised-Cosine - This is a special kind of filter that is sometimes used for digital data applications. (The

    frequency response in the passband is a cosine shape which has been "raised" by a constant.) See dspGuru's Raised-

    Cosine FAQ for more information.

    Lots of others.

    3.1 What are themethods of designing FIR filters?

    The three most popular design methods are (in order):

    Parks-McClellan: The Parks-McClellan method (inaccurately called "Remez" by Matlab) isprobably the most widely used FIR filter design method. It is an iteration algorithm that accepts

    filter specifications in terms of passband and stopband frequencies, passband ripple, and stopband

    attenuation. The fact that you can directly specify all the important filter parameters is what makes

    this method so popular. The PM method can design not only FIR "filters" but also FIR

    "differentiators" and FIR "Hilbert transformers".

    http://www.dspguru.com/dsp/faqs/raised-cosinehttp://www.dspguru.com/dsp/faqs/raised-cosinehttp://www.dspguru.com/dsp/faqs/raised-cosinehttp://www.dspguru.com/dsp/faqs/raised-cosine
  • 8/3/2019 fd viva q

    10/12

    Windowing:. In the windowing method, an initial impulse response is derived by taking theInverse Discrete Fourier Transform (IDFT) of the desired frequency response. Then, the impulse

    response is refined by applying a data window to it.

    Direct Calculation: The impulse responses of certain types of FIR filters (e.g. Raised Cosine andWindowed Sinc) can be calculated directly from formulas.

    3.2 How do I actuallydesign FIR filters?

    With a FIR filter design program, of course. ;-) Although it's possible to design FIR filters using manual methods, it

    is a whole lot easier just to use a FIR filter design program.

    3.3 What FIR filter design programs are available?

    FIR filter design programs come in three broad categories:

    Filter Design Applications: See dspGuru'sDigital Filter Design Softwarepage for a list of filterdesign programs.

    Near and dear to us here at dspGuru is Iowegian's ownScopeFIRproduct. We believe ScopeFIRoffers an excellent combination of professional features, smooth user interface, and affordableprice. We sell it for just $199, with a generous 60 day trial period. Even if you already use Matlab,ScopeFIR's "point and shoot" capabilities can improve your FIR filter design productivity.

    Math Programs: Matlab and itsFree Clonesoffer built-in FIR filter design functions. Source code: One of the best places on the net to find source code to design FIR filters is Charles

    Poynton'sFilter Design Softwarepage.

    4.1 What is the basic algorithm for implementing FIR filters?

    Structurally, FIR filters consist of just two things: a sample delay line and a set of coefficients. To implement the

    filter:

    1. Put the input sample into the delay line.2. Multiply each sample in the delay line by the corresponding coefficient and accumulate the result.3. Shift the delay line by one sample to make room for the next input sample.

    4.2 How do I implement FIR filters in C?

    There are lots of possibilities, including a few tricks. To illustrate, we have provided a set of FIR filter algorithms

    implemented in C called "FirAlgs.c" inScopeFIR's distribution file. FirAlgs.c includes the following functions:

    1. fir_basic: Illustrates the basic FIR calculation described above by implementing it very literally.2. fir_circular: Illustrates how circular buffers are used to implement FIRs.3. fir_shuffle: Illustrates the "shuffle down" technique used by some of Texas Instruments'

    processors.

    4. fir_split: Splits the FIR calculation into two flat (non-circular) pieces to avoid the use circularbuffer logic and shuffling.

    5. fir_double_z: Uses a double-sized delay line so that the FIR calculation can be done using a flatbuffer.

    6. fir_double_h: Similar to fir_double_z, this uses a double-sized coefficient so that the FIRcalculation can be done using a flat buffer.

    4.3 How do I implement FIR filters in assembly?

    http://dspguru.com/sw/tools/filtdsn.htmhttp://dspguru.com/sw/tools/filtdsn.htmhttp://dspguru.com/sw/tools/filtdsn.htmhttp://www.iowegian.com/scopefir.htmhttp://www.iowegian.com/scopefir.htmhttp://www.iowegian.com/scopefir.htmhttp://dspguru.com/sw/opendsp/mathclo.htmhttp://dspguru.com/sw/opendsp/mathclo.htmhttp://dspguru.com/sw/opendsp/mathclo.htmhttp://www.inforamp.net/~poynton/Poynton-dsp.htmlhttp://www.inforamp.net/~poynton/Poynton-dsp.htmlhttp://www.inforamp.net/~poynton/Poynton-dsp.htmlhttp://iowegian.com/downloadhttp://iowegian.com/downloadhttp://iowegian.com/downloadhttp://iowegian.com/downloadhttp://www.inforamp.net/~poynton/Poynton-dsp.htmlhttp://dspguru.com/sw/opendsp/mathclo.htmhttp://www.iowegian.com/scopefir.htmhttp://dspguru.com/sw/tools/filtdsn.htm
  • 8/3/2019 fd viva q

    11/12

    FIR assembly algorithms are quite processor-specific, but the most common system uses a circular buffer

    mechanism provided by the DSP processor. The basic steps are:

    1. Configure the circular buffer; load the coefficient and delay-line pointers. Then, for each inputsample:

    2. Store the incoming data in the delay line; increment the delay-line pointer.3.

    Clear the multiplier-accumulator.4. Loop over all coefficients/delays; accumulate the values obtained by multiplying the coefficientsby the delayed samples.

    5. Round or truncate the result as the FIR output.Alternatively, a "shuffle down" method is used in Texas Instruments' older fixed-point processors to implement

    circular buffers. The processor literally moves each sample delay values by one slot during each multiply-

    accumulate (via the "MACD" instruction).

    Each DSP microprocessor manufacturer provides example FIR assembly code in its data books or its application

    handbooks, so be sure to look at those before you "reinvent the circular buffer".

    4.4 How do I test my FIR implementation?

    Here are a few methods:

    Impulse Test: A very simple and effective test is to put an impulse into it (which is just a "1"sample followed by at lest N - 1 zeroes.) You can also put in an "impulse train", with the "1"

    samples spaced at least N samples apart. If all the coefficients of the filter come out in the proper

    order, there is a good chance your filter is working correctly. (You might want to test with non-

    linear phase coefficients so you can see the order they come out.) We recommend you do this test

    whenever you write a new FIR filter routine.

    Step Test: Input N or more "1" samples. The output after N samples, should be the sum (DC gain)of the FIR filter.

    Sine Test: Input a sine wave at one or more frequencies and see if the output sine has the expectedamplitude.

    Swept FM Test:From Eric Jacobsen: "My favorite test after an impulse train is to take twoidentical instances of the filter under test, use them as I and Q filters and put a complex FM linear

    sweep through them from DC to Fs/2. You can do an FFT on the result and see the complete

    frequency response of the filter, make sure the phase is nice and continuous everywhere, and

    match the response to what you'd expect from the coefficient set, the precision, etc."

    4.5 What tricks are useful in implementing FIR filters?

    FIR tricks center on two things 1) not calculating things that don't need to be calculated, and 2) "faking" circular

    buffers in software.

    4.5.1 How do I skip needless calculations?

    First, if your filter has zero-valued coefficients, you don't actually have to calculate those taps; you can leave them

    out. A common case of this is "half-band" filter, which have the property that every-other coefficient is zero.

    Second, if your filter is "symmetric" (linear phase), you can "pre-add" the samples which will be multiplied by the

    same coefficient value, prior to doing the multiply. Since this technique essentially trades an add for a multiply, it

    isn't really useful in DSP microprocessors which can do a multiply in a single instruction cycle. However, it is useful

    in ASIC implementations (in which addition is usually much less expensive than multiplication); also, some newer

    DSP processors now offer special hardware and instructions to make use of this trick.

  • 8/3/2019 fd viva q

    12/12

    4.5.2 How do I fake circular buffers in software?

    When hardware support for circular buffers isn't available, you have to "fake" them. Also, since ANSI C has no

    construct to describe circular buffers, most C compilers can't generate code to use them, even if the target processor

    has them.

    You can always implement a circular buffer by duplicating the logic of a circular buffer in software (and manyhave), but the overhead can be prohibitive; the circular-fake might take several instructions to implement, compared

    to just a single instruction to do the multiply-accumulate operation. Therefore you need to fake it.

    Here are several basic techniques to fake circular buffers:

    1. Split the calculation: You can split any FIR calculation into its "pre-wrap" and "post-wrap" parts.By splitting the calculation into these two parts, you essentially can do the circular logic only

    once, rather than once per tap. (See fir_double_z in FirAlgs.c above.)

    2. Duplicate the delay line: For a FIR with N taps, use a delay line of size 2N. Copy each sample toits proper location, as well as at location-plus-N. Therefore, the FIR calculation's MAC loop can

    be done on a flat buffer of N points, starting anywhere within the first set of N points. The second

    set of N delayed samples provides the "wrap around" comparable to a true circular buffer. (See

    fir_double_z in FirAlgs.c above.)3. Duplicate the coefficients: This is similar to the above, except that the duplication occurs in

    terms of the coefficients, not the delay line. Compared to the previous method, this has a

    calculation advantage of not having to store each incoming sample twice, and it also has a memory

    advantage when the same coefficient set will be used on multiple delay lines. (See fir_double_h in

    FirAlgs.c above.)

    4. Use block processing: In block processing, you use a delay line which is a multiple of the numberof taps. You therefore only have to move the data once per block to implement the delay-linemechanism. When the block size becomes "large", the overhead of a moving the delay line once

    per block becomes negligible.