===== Background ===== I found that my LPC810 nodes seemed to have poor receive performance and in fact they would fail to receive any packets for significant periods of time. The issue seemed to be cleared for a while after the node had transmitted. I also found the same problem with an AVR breadboard implementation. I was a little surprised that others didn't seem to suffer from the same issue. I then made a gateway using a Paspberry Pi and daveake's code. This does not transmit and I found that it would only receive occasional packets from my nodes. ===== Investigation ===== Since the problem seemed to be common to all implementations I decided to investigate by using the Pi as an easy development platform. By displaying the interrupt register values in the polling loop I noticed that the RxReady flag was being set even when none of my nodes was transmitting. This meant that the receiver had set its AGC and AFC and this appeared to often prevent subsequent reception of real packets. The trigger for this is RSSI > RssiThreshold and I noticed that the existing implementations made no attempt to set this value. It seemed reasonable to me that it should be a few dB above noise floor to give maximum sensitivity without false triggers. Therefore I implemented a dynamic adjustment of the threshold value. This did not completely cure the problem and on further investigation I realised that some local interference was triggering the start of reception about every 4 seconds. Similar interference was subsequently observed at Elsworth and is shown in James' report of the [[balloon_nodes:ah3|AH3]] launch. Note that at this time my home nodes already incorporated some of the improvements described below. More recently I've used an RTL-SDR to look at the spectrum. The image shows what it can hear on the provided short mag-mount whip. The interference appears to be from a number of synchronised transmitters at different frequencies. A couple of my UKHASnet node transmissions are also visible. {{ :radio:interferer.png?direct&200 |}} Consequently I decided to restart the receive process a short time after the RxReady flag was set. This seemed to give a noticeable improvement but there was still a short period where the receiver was effectively disabled. I noticed that the radio module itself could generate an interrupt if RxReady was not followed by PayloadReady within a programmable time so implemented a receive restart using this. There is still a risk that the receiver might be reset during a real packet and I have observed this occasionally but overall performance is much improved. I eventually got around to sorting out my git repository and commiting a set of changes, albeit not exactly in the order I originally implemented them, and these are on a github branch (along with some other improvements) at [[https://github.com/dbrooke/UKHASNetPiGateway]] Similar changes to the LPC810 code are at [[https://github.com/dbrooke/LPC810/tree/rssi_test]] It would be interesting to know if these changes improve things for others, particularly those who aren't suffering from the periodic interference.