Monday, July 28, 2025

Im I making a fundamental mistake?

Dear GNURADIO friends,
I'm wondering if I am making a fundamental mistake or an implementation mistake.
You don't have to debug; thanks for sharing your thoughts! 
Summarized: The RTL-SDR has an 28.8MHz oscillator and I'm feeding this clock-signal into a fractional divider which brings it to a 500Hz audio tone. Please notice this process is carried out with hardware components and is not affected by computer interrupts etc.
The 500Hz audio signal is fed into a regular HAM FM 145MHz transmitter.
The signal is received by an RTL-SDR USB and goes in a SOAPY GNURADIO source block and is decimated to 256000 sampless and demodulated resulting into 500Hz audio tone.
I assume(!) that the IQ sample rate is defined by the SDR receiver and deducted from its 28.8Mhz clock.  
I calculated that with an sample rate of 256K it takes 512 samples =(1500)(1256000)  to cover the cycle time of a 500Hz sine wave.
In a GNURADIO C++ OOT block (based on the very useful GR OOT Cpp tutorial) I re-create (based on the incoming a IQ-stream) with a  sample counter in combination with a look-up table a synthetic sine wave of 500Hz.
I expect that the demodulated 500Hz FM signal  and created synthetic 500Hz signal have exactly the same frequency but I am facing a phase drift between them…
Both 500Hz signals though origin from the same source (the 28.8MHz) SDR clock which defines the audio tone and the sample rate.
I'm wondering if I (still a beginner) am making a fundamental digital signal processing mistake or simply making an implementation mistake which I have to deep dive further into.
After several months I am still learning but got stuck and highly appreciate if you share your thoughts.
My question: Is this approach theoretically possilbe?
Thanks,
Robert PA0BRT

files fyi: Recorded IQ, 2Ch_audio, GRC, Video, OOT_Cpp, lookup_table_synthetic_sine
https://tinyurl.com/3pryf9kb

No comments:

Post a Comment