[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How ensure consistency with timing signals
From: |
Lukas Haase |
Subject: |
Re: How ensure consistency with timing signals |
Date: |
Wed, 26 Feb 2020 22:11:50 +0100 |
Hi Marcus,
Good point; but this is just for demonstration purposes here. I can tie it to
USRP Source/Sink.
The delta (measured in samples) should still be consistent, no matter what.
Best, Lukas
> Gesendet: Mittwoch, 26. Februar 2020 um 15:25 Uhr
> Von: "Marcus D Leech" <address@hidden>
> An: "Lukas Haase" <address@hidden>
> Cc: "address@hidden" <address@hidden>
> Betreff: Re: How ensure consistency with timing signals
>
> Something to understand about the throttle block is that it doesn’t guarantee
> a precise sample rate. Just that the long term average rate is what you
> expect.
>
> Sent from my iPhone
>
> > On Feb 26, 2020, at 12:09 PM, Lukas Haase <address@hidden> wrote:
> >
> > Hello,
> >
> > I use a square wave to generate control/clocking signal for some control
> > logic:
> >
> > https://snipboard.io/WQ8p6d.jpg
> >
> > The work function of the "Controller" block looks like:
> >
> > def work(self, input_items, output_items):
> > d = np.diff(input_items[0])
> > inds = np.where(d == 1)
> > for ind in inds[0]:
> > nedge = self.nitems_read(0) + ind
> > delta = nedge - self.nedge_prev
> > print("EDGE @ " + str(nedge) + ", Delta=" + str(delta))
> > self.nedge_prev = nedge
> > return len(output_items[0])
> >
> > I.e., it detects the rising edge. The code above stores the previous edge
> > and shows the delta between them.
> > If the frequency of the square wave exactly divides the sampling rate, I
> > would expect that this delta is always constant/consistent (and I need this
> > for my application).
> >
> > However, with samp_rate=5M and freq=10:
> >
> > EDGE @ 10751169, Delta=500054
> > EDGE @ 11251224, Delta=500055
> > EDGE @ 11751278, Delta=500054
> > EDGE @ 12251332, Delta=500054
> > EDGE @ 12751387, Delta=500055
> > EDGE @ 13251441, Delta=500054
> > EDGE @ 13751496, Delta=500055
> > EDGE @ 14251550, Delta=500054
> >
> > One interval is not only not always constant but is 54/55 samples larger
> > than the expected 500000.
> > When making the interval small (e.g., samp_rate=5M, freq=1k, it works:
> >
> > EDGE @ 65072534, Delta=5000
> > EDGE @ 65077534, Delta=5000
> > EDGE @ 65082534, Delta=5000
> > EDGE @ 65087534, Delta=5000
> > EDGE @ 65092534, Delta=5000
> > EDGE @ 65097534, Delta=5000
> > EDGE @ 65102534, Delta=5000
> >
> > I tried tried offsetting the frequency by a slight but but no change. E.g.,
> > freq = 1.0 / (1.0/10 - 1.0/samp_rate)
> >
> > I know I could implement a logic that adds a constant directly in the work
> > function but to keep things manageable I would really prefer to use clock
> > signals (there will be a bunch of them floating around in the end).
> >
> >
> > Thanks,
> > Lukas
> >
> >
> >
> >
>