Sunday, March 17, 2019

Re: [Discuss-gnuradio] Capturing maximum complex value

On 3/17/19 3:01 PM, Kevin Reid wrote:

> One of the AGC blocks that has separate attack and decay rates (agc2_cc
> or agc3_cc) could be used to do this: set attack to 1, decay to 0,
> ignore the output, and read (1.0 / agc.gain()) to find the peak-hold
> magnitude.
>
> In my own application, I am using this chain for peak detection
> /without/ hold:
>     blocks.complex_to_mag_squared(),
>     blocks.stream_to_vector(itemsize=gr.sizeof_float,
> nitems_per_block=window),
>     blocks.max_ff(window),
> blocks.probe_signal_f()
> but you would need to separately poll (at the sample rate divided by the
> window length) and max-hold this to catch long-term peaks. On the
> upside, as I just found out, it uses less CPU time than running the AGC
> (on my processor).

This is where I get myself confused -- to get a magnitude do I need to
do an FFT, or can I just look at the raw complex stream, or the output
of complex_to_mag_squared without an FFT? I've used something like the
blocks you describe to capture the max within each FFT frame, but what
I'm looking for now is any instant where I get clipping, no matter how
brief.

> If the only thing that affects the peak/gain is the recording, perhaps
> you could measure the peak in the file offline (that is, separately from
> running your real-time flowgraph) and use that to set the gain, instead
> of having to interactively monitor anything.

That's an idea. Thanks!

_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

No comments:

Post a Comment