[Top][All Lists]

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

Re: [Discuss-gnuradio] Correlate and sync matched filter: pitfall and an

From: Tom Rondeau
Subject: Re: [Discuss-gnuradio] Correlate and sync matched filter: pitfall and another bug (Re: Question on threshold mathematics in correlate_and_sync block)
Date: Mon, 5 Jan 2015 09:32:24 -0500

On Mon, Jan 5, 2015 at 8:00 AM, Andy Walls <address@hidden> wrote:
On Fri, 2015-01-02 at 09:56 -0800, Nick Foster wrote:

> I'm in the middle of generalizing correlate_and_sync_cc to allow use
> with any candidate vector you want (although I hadn't considered the
> real-only case).

> --n

Hi Nick,

Since you're reworking the correlate and sync block, I thought you might
want to address some additional things I've found regarding the matched
filter generation. I've noticed 1 end-user pitfall that you may want to
document and 1 bug in how the matched filter is generated.

1. Pitfall: The pulse filter tap specification requirments are not
obvious.  In my experimentation over the weekend, the pulse filter taps
have to be generated assuming a rate of:

        nfilts samples/symbol, or equivalently
        (nfilts * symbol_rate) samples/second


        nfilts is the number of filters in the polyphase resampler
        symbol_rate is the symbol rate in symbols/second

regardless of the user's "sps" (samples/symbol) value.

This is certainly the case for the real rectangular pulse with no ISI
and real half-sinusoid pulse with no ISI, with which I was playing.

So, if nfilts = 32, these are my proper pulse filter taps specifications
in python:

        rectangular:   [1.0]*nfilts
        half-sinusoid: [math.sin(math.pi*float(i)/float(nfilts)) for i in range(nfilts)]

even though my sps = 13.3333.

This was very non-intuitive and should be documented for the end-user.

2. Bug:  The generated matched filter appears to be short a symbol.
Using my real variant of correlate_and_sync, I specified the following:

        symbols:           [1,0]*10 + [1,0,1,1,1,1]   (block converts these to NRZ)
        pulse filter taps: [math.sin(math.pi*float(i)/float(32)) for i in range(32)]
        samples/symbol:    13.3333333333
        nfilts:            32

and the block generates the matched filter in the attached PNG.  The
missing final symbol from the start of the filter is obvious.  Since my
block is a very closely cut-and-paste clone of
correlate_and_sync_impl.cc and msk_correlate_impl.cc, the bug probably
exists in them as well.



You're finding some stuff out here and pointing out bugs and documentation issues. I really appreciate the bug reports on our Issues page, but this would be a lot easier if you would also provide patches, since I'm assuming you're doing this for yourself, anyways. Since you're actively working on it and learning, I think you're more qualified to provide the added documentation and these bug fixes right now. When you're done going through this, please put together a pull request for us that addresses these issues.


reply via email to

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