Skip to main content
clarified data modulation scheme
Source Link

What's a non-FFT way How to find the strongest frequency in a signal using a microcontroller/circuit?

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.

What's a non-FFT way to find the strongest frequency in a signal using a microcontroller?

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.

How to find the strongest frequency in a signal using a microcontroller/circuit?

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.

deleted 25 characters in body
Source Link
toolic
  • 9.8k
  • 9
  • 27
  • 35

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.

Thanks for your help!

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.

Thanks for your help!

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.

Source Link

What's a non-FFT way to find the strongest frequency in a signal using a microcontroller?

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.

Thanks for your help!