0
\$\begingroup\$

I am trying to implement a low-power backscatter transmitter+receiver and ran into some trouble on the transmission side.

Setup: My transmitter circuit sends a 50MHz wave, which the receiver circuit uses to toggle itself on and off at ~19-21kHz. When the transmitter samples its transmission signal, it sees a long time series of 50MHz (5Vpp) with a very weak 20kHz (~2mVpp) modulation riding on top of it. The rate of the modulation is the "data" that the receiver is sending back to the transmitter.

Now, when I look at the transmitter signal in the frequency domain with Python, the 20kHz modulation is clear as day, and the peak finding is easy. Y-axis is unscaled, please ignore.

enter image description here

But I don't want to use Python. I would like to find the strongest frequency peak near 20kHz with only a microcontroller.

  • Currently I'm not using the microcontroller because I think it would take too much memory and processing power to do the FFT continuously.
  • And I'm not using a frequency/voltage converter because I think the modulated signal (few mVpp) is too weak for those circuits to detect.
  • A few op amps with tight filters could boost the modulated signal to a detectable level, but I'm worried it would still be too noisy for F/V.
  • I considered a single frequency FFT, but I need to be able to detect when the peak frequency changes, and what it changes to.

I am hoping there is a better way to find the peak frequency, perhaps using supporting circuitry?

I'm also open to alternative methods for the receiver to modulate its data onto the carrier wave. Currently, the receiver reads a sensor's voltage to set the modulation frequency, so the frequency always shifts. I'd like to do FSK (static frequency turned on and off as bits) but don't know of a simple way to generate FSK on the receive side.

EDIT: The receiver's modulation outputs a continuous frequency, so imagine the low and high end of an analog sensor outputting 19kHz and 21kHz respectively, with all the intermediate values mapping in between. At least under the current scheme, it's important for me to find the precise modulation frequency from the transmitter.

\$\endgroup\$
15
  • \$\begingroup\$ It's fairly straightforward to measure frequency if the signal to noise ratio is adequate, do you have a guarranteed SNR? \$\endgroup\$
    – Neil_UK
    Commented Jan 2 at 8:16
  • \$\begingroup\$ This all depends on what kind of hardware you got and how it might translate the radio signal before handing it to the microcontroller. The problem isn't finding the peak when you got everything translated to digital data, the problem is getting it translated in the first place. \$\endgroup\$
    – Lundin
    Commented Jan 2 at 9:47
  • \$\begingroup\$ Exactly how did you get the data for this Python analysis? \$\endgroup\$ Commented Jan 2 at 9:47
  • 1
    \$\begingroup\$ It's possible to detect a single frequency (or two in your case) by multiplying the signal with sin() and cos() of the frequency and average that, but the local "oscillator" that makes the sin and cos has to be synchronized with the transmitter. \$\endgroup\$
    – bobflux
    Commented Jan 2 at 11:07
  • 2
    \$\begingroup\$ Lock in detection seems like a good choice here. \$\endgroup\$ Commented Jan 2 at 13:26

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.