I have external device streaming data at fixed sample rate and my GNU Radio
source block for this device, which feeds flow graph containing some
hardware sink operating at same sample rate (e.g. audio sink). My
source-device and that sink-device (e.g. soundcard on PC) aren't
synchronized, i.e. they clocked from different sources. So I need to do some
kind of auto-resampling to eliminate buffer over/under-runs. (Please correct
me, if I use wrong terminology. I'm novice and just trying to specify common
DSP task, which I'm sure exists.)
The first trouble is that I don't know how to make my block adopt to
existing sample rate in graph. GNU Radio scheduler asks my block to produce
too large chunks of samples which leads to quick underrun of my block's
internal buffer (even 500ms pre-buffering is not enough!). Actually there
are no failure, taken data just being moved to somewhere between my block
and sink (and everything works well when source and sink are synchronous, I
checked). But(!) my block loses prebuffered level which deviations I
expected to use as reference for corrections. Hungry scheduler eats all data
in buffer. Moreover, his extra attempts leads to extra CPU usage - this is
the second trouble. I experimented with inserting thread 'sleep's in work()
function and it solves issue but breaks data flow (audio device reports
underruns, more or less frequent depending on sleep interval).
Please, advice on solution. I would appreciate for just pointing me to right
direction.



--
View this message in context: 
http://gnuradio.4.n7.nabble.com/how-to-implement-auto-correction-of-sample-rate-in-flow-graph-tp45268.html
Sent from the GnuRadio mailing list archive at Nabble.com.

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

Reply via email to