discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] How history() works in GR


From: Martin Braun
Subject: Re: [Discuss-gnuradio] How history() works in GR
Date: Mon, 28 Feb 2011 19:52:35 +0100
User-agent: Mutt/1.5.20 (2009-06-14)

On Mon, Feb 28, 2011 at 02:24:29PM +0100, Alberto Trentadue wrote:
> Hello
> 
> I am trying to define a customised block and I would like to understand 
> better how the history works.
> 
> I have opened the source of gr_moving_average_XX and I saw the following 
> statement in the constructor:
> 
> @NAME@::@NAME@ (int length, @O_TYPE@ scale, int max_iter)
>   : gr_sync_block ("@BASE_NAME@",
>    gr_make_io_signature (1, 1, sizeof (@I_TYPE@)),
>    gr_make_io_signature (1, 1, sizeof (@O_TYPE@))),
>   d_length(length),
>   d_scale(scale),
>   d_max_iter(max_iter),
>   d_new_length(length),
>   d_new_scale(scale),
>   d_updated(false)
> {
>   set_history(length);
> }
> 
> So it seems to me that GR allocates a history buffer with "length" size.
> But, later in the gr_moving_average_XX code I see the following cycle:
> 
>   for (int i = 0; i < num_iter; i++) {
>     sum += in[i+d_length-1];
>     out[i] = sum * d_scale;
>     sum -= in[i];
>   }
>   
> ...which seems to show that there is at least a buffering of "length + 
> num_iter" input items somewhere, and num_iter 
> is >0 for sure.
> This has confused me a bit on how history is implemented.

Hi Alberto,

ignore the max_iter variable--it is for numerical stability and has
nothing to do with the history. Perhaps you should check other blocks
for examples.

If you set the history to 'N', this means you always have the last (N-1)
input values kept in your buffer. Take an FIR filter as example: Say it
has order N. Then you need the current sample plus the previous (N-1)
samples to calculate your output sample. So, you set history to N.

Some more notes on history():
- The first N-1 input values are set to zero
- The buffer input_items points to the oldest sample. Thus, if you have
  M input_items, the total buffer length (i.e. the max index) is N+M-1.

Hope this helps...
Cheers
MB


> 
> Thanks for any explanation.
> 
> Alberto
> 
> 
> Supera i limiti: raddoppia la velocità da 10 a 20 Mega! Risparmia con Tutto 
> Incluso: telefono + adsl 20 mega a soli 29,95 € al mese per due anni!SCONTO 
> DI 240 
> EURO!http://abbonati.tiscali.it/telefono-adsl/prodotti/tc/tuttoincluso/?WT.mc_id=01fw
> 
> _______________________________________________
> Discuss-gnuradio mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/discuss-gnuradio

-- 
Karlsruhe Institute of Technology (KIT)
Communications Engineering Lab (CEL)

Dipl.-Ing. Martin Braun
Research Associate

Kaiserstraße 12
Building 05.01
76131 Karlsruhe

Phone: +49 721 608-43790
Fax: +49 721 608-46071
www.cel.kit.edu

KIT -- University of the State of Baden-Württemberg and
National Laboratory of the Helmholtz Association

Attachment: pgpHOZZqE5jOs.pgp
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]