So I have a 315Mhz receiver hooked up to an Arduino, and constantly printing the value of the A0 Analog in pin over to the Serial Plotter that is built in to the Arduino software.

Arduino Graph This is the graph. You can see at the end there is some data from another 315mhz transmitter.

My question is, why is there so much noise when something is happening? Is this normal? Maybe a bad receiver chip?

  • \$\begingroup\$ Which pin are you reading? \$\endgroup\$ – Dejvid_no1 Dec 8 '15 at 8:42
  • \$\begingroup\$ @Dejvid_no1 I'm currently reading from A0 \$\endgroup\$ – geekman Dec 8 '15 at 8:43
  • 1
    \$\begingroup\$ And which baud rate are you using? \$\endgroup\$ – Dejvid_no1 Dec 8 '15 at 8:45
  • 1
    \$\begingroup\$ @Dejvid_no1 9600 I believe \$\endgroup\$ – geekman Dec 8 '15 at 8:46
  • 1
    \$\begingroup\$ @Dejvid_no1 no. It only has four pins and is about half as small. \$\endgroup\$ – geekman Dec 8 '15 at 8:46

Cheap RF receivers don't understand whether data is present or not. They cannot distinguish between noise or data. They don't use a protocol, they don't recognize data frames, payloads or baud rate.

So, when there is no data (aka no strong desired signal) present, the AGC circuit (Automatic gain control) in the receiver keeps raising the gain until something is found and, in the your case it is noise.

When "strong" real data does come along, the AGC rapidly backs-off to avoid saturation of the RF circuits and you get a data output.

Here's an idea of what happens in an FM receiver after the demodulator: -

enter image description here

This uses the terminology of an FM system (data slicer) but applies equally well to an AGC circuit that is constantly trying to find the correct level and only being able to do so after a few bytes of preamble have been received.

For an AM receiver I'd expect a picture like this: -

enter image description here

The left edge of the picture is when the receiver is switched on and the AGC rapidly boosts gain to try and get a decent signal. Noise is dominant here because there is no RF transmission. Along comes a transmission and it takes a little while for the AGC to settle down. Towards the right hand side of the picture, the AGC has stabilized to suit the amplitude of the data carrier and, as you can hopefully see, the noise superimposed on the data has been significantly attenuated due to the AGC.

There are 2 faint dotted lines across the middle of the picture - these are idealized threshold points for reconstructing the data with a comparator using hysteresis.

  • \$\begingroup\$ So is there a fix, or is it more of a "buy a better receiver" kind of thing? \$\endgroup\$ – geekman Dec 8 '15 at 9:04
  • \$\begingroup\$ The fix is to interrogate what is coming from the receiver at regular intervals (say every 25 ms) and try and make sense of what the output is. This relies on a transmission containing a data preamble that is fundamentally recognizable by the receiver as special characters. The preamble precedes the data so, if the receiver detects preamble, it hangs in because data will be forthcoming after a few bytes of preamble. I have a picture I'll try and post. \$\endgroup\$ – Andy aka Dec 8 '15 at 9:10
  • \$\begingroup\$ @geekman you should provide a data sheet / link to the radio device you are using or this question will get closed on the basis that my answer will appear speculative to those who are not familiar with how receivers work. \$\endgroup\$ – Andy aka Dec 8 '15 at 10:22
  • \$\begingroup\$ This is a nice answer explaining the theory of AGC, but in practice whether it will let that noise go on the output depends on the board/IC: electronics.stackexchange.com/questions/198682/… \$\endgroup\$ – Fizz Dec 8 '15 at 19:44
  • 1
    \$\begingroup\$ +1. Very nice looking pictures; where are they from? \$\endgroup\$ – m.Alin Feb 10 '17 at 11:33

My guess based on your comments is that the sampling rate of the Arduino ADC is too low to correctly show the output of the receiver. The sampling rate is about 9.6kHz which with Nyquist theorem gives a maximum signal bandwidth of 4.8kHz.

Either use an oscilloscope to measure the signal or hook it up to the serial input of the Arduino.

  • \$\begingroup\$ What do you mean by hook it up the serial input? Like the RX pin? Sorry, I'm sorta new. \$\endgroup\$ – geekman Dec 8 '15 at 9:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.