[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Discuss-gnuradio] Halfband filter,etc.
From: |
Brian Padalino |
Subject: |
Re: [Discuss-gnuradio] Halfband filter,etc. |
Date: |
Wed, 29 Oct 2008 16:20:17 -0400 |
On Wed, Oct 29, 2008 at 4:14 PM, Sebastiaan Heunis <address@hidden> wrote:
> Hi people
>
> Can I please ask a question or two about the HBF? So I know that it
> is has 31 taps and what the coefficients look like from reading a bit.
> Is it just a lowpass decimation filter from Goodman and Carey's list?
> How does it work? Is it just like a standard FIR filter where the
> input gets convolved with the filter taps? Is the decimation achieved
> because every second tap is 0? I know that we receive an input value
> every 64e6/(decimation/2) from the CIC filter. I know for a
> decimation of 16 the hb_strobe is supposed to be 4MHz. I just don't
> know where the last clocking down by 2 is done. I've seen this bit of
> Verilog:
>
> always @(posedge clock)
> begin
> start_d1 <= #1 start;
> start_d2 <= #1 start_d1;
> start_d3 <= #1 start_d2;
> start_d4 <= #1 start_d3;
> start_d5 <= #1 start_d4;
> start_d6 <= #1 start_d5;
> start_d7 <= #1 start_d6;
> start_d8 <= #1 start_d7;
> start_d9 <= #1 start_d8;
> start_dA <= #1 start_d9;
> start_dB <= #1 start_dA;
> start_dC <= #1 start_dB;
> start_dD <= #1 start_dC;
> end // always @ (posedge clock)
>
> reg mult_en, mult_en_pre;
> always @(posedge clock)
> begin
> mult_en_pre <= #1 phase!=8;
> mult_en <= #1 mult_en_pre;
> end
>
> assign clear = start_d4; // was dC
> wire latch_result = start_d4; // was dC
> assign strobe_out = start_d5; // was dD
>
> Can anyone please help?
Taken from here:
http://www.dspguru.com/info/terms/filtterm/index2.htm
The excerpt:
"Half-band filter - a type of FIR filter where the transition region
is centered at one quarter of the sampling rate, or fs/4.
Specifically, the end of the passband and the beginning of the
stopband are equally spaced on either side of fs/4. Half-band filters
are often used in decimation filtering because (almost) half their
time domain coefficients are zero. This means, for example, you can
achieve the performance of an M-tap FIR filter while only paying the
computational price of (M+1)/2 + 1 multiplications per filter output
sample."
The decimation can occur at either the input or the output. It's
basically taking 1 out of every 2 output samples. Since you throw
away one entire output, you don't have to perform that convolution.
This in conjunction with every other tap being 0, allows for a very
efficient filter + decimation scheme.
Hope this helps.
Brian