Forum: GNU Radio Halfband filter,etc.

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Sebastiaan H. (Guest)
on 2008-10-29 22:15
(Received via mailing list)
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?

Thank you in advance.

Sebastiaan

--
Sebastiaan H.
Radar and Remote Sensing Group, University of Cape Town
Tel:  +27 83 305 5667
Brian P. (Guest)
on 2008-10-29 22:21
(Received via mailing list)
On Wed, Oct 29, 2008 at 4:14 PM, Sebastiaan H. 
<removed_email_address@domain.invalid>
wrote:
> know where the last clocking down by 2 is done.  I've seen this bit of
>        start_d7 <= #1 start_d6;
>     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
This topic is locked and can not be replied to.