This is a very general question, hopefully with the amount of information I provide you will be able to steer me in the right direction.

I am trying to build a very versatile GPS receiver, with variable degrees of accuracy and receiving frequency. So far I’ve only planned out what I need it to do, and have done some search of 50Hz GPS chips, there are two chips I have in mind so far, one is Venus838FLPx and another S1216F8 but this one is absolutely impossible to find and they never emailed back to me. (This is not the end of my search because I would ideally like to find 50Hz which also capable of L2C and L5C)

Worst case scenario: I’ve calculated (roughly) that at 50Hz, logging for 24 hours would create a log file ~200MB, which could become a challenge for the CPU if I am using the board to log the data independently of a cellphone app.

My goal is to transmit the high rate data over a WiFi hotspot, and if it’s only up to 10Hz — use the low power Bluetooth protocol which Apple for some reason enforces.

That said, I want to be able to control the output data on the DYI GPS I make, and I basically want it to have a very variable setting, and insanely simple interface (maybe with small OLED display to show basic info like old style GPS devices)

I need the board to be able to:

  1. Provide higher accuracy high power demand mode down-converting 50Hz to 1Hz, 2Hz, 5Hz, 10Hz, 20Hz, 25Hz by taking averages of the incoming data.

  2. High accuracy medium power - setting the chip to collect at 10/25Hz, and down-converting that down to 1/5Hz by doing the same averaging.

  3. Normal accuracy high frequency 50Hz mode with no averaging

  4. Super low power and normal accuracy 1Hz mode.

  5. All those modes should be internally loggable and transmittable, maybe even at the same time if allowed by the CPU.

  6. (There may be a barometric sensor but I have not thought about it yet)

My question is, which style of SBC board would be able to handle these calculations and transmissions. Would Arduino handle it or would Raspberry be better? Should I look at more powerful SBC’s? I plan on using full size boards for prototyping, then probably moving to the tint versions if they are powerful enough to make as small of a device as possible, pocket size would be ideal. It would be used for various logging including light racing.

Update: I will work on narrowing down my question and will resubmit a new one in the future.

  • 1
    \$\begingroup\$ You should probably first write the software to run on a PC and figure out what you want it to do. But neither an Arduino nor a pi is an expensive platform to experiment with. It may take more care to have the Arduino "keep up" and you may be limited in buffering memory, however a pi has long term stability concerns and clean shutdown requirements from the dependence on an SD card. You might look at an ESP32 or larger flash-based ARM, or a tiny embedded Linux system that uncompresses its root filesystem from SPI flash to a ramdisk and is thus safer from unexpected shutdown. \$\endgroup\$ – Chris Stratton Aug 26 '18 at 15:42
  • \$\begingroup\$ Ultimately if you pick a small system you spend time trying to fit within the constraints and get all the functionality you need, while if you pick a large system you spend time stripping down Linux to do only what you want, and operating on batteries requires a lot of engineering. Without a more precise requirement this isn't really an answerable question - rather it falls into the "primarily opinion based" and "shopping question" traps. \$\endgroup\$ – Chris Stratton Aug 26 '18 at 15:46
  • 2
    \$\begingroup\$ ... not to mention "too broad" and "unclear what you're asking". You really need to narrow the focus of the question. \$\endgroup\$ – Dave Tweed Aug 26 '18 at 15:53
  • 1
    \$\begingroup\$ Don't chose Linux for speed. Choose it if you need the protocols and software libraries it offers, or the megabytes of buffer memory on typical platforms that run it and you are willing to pay the price of spending a lot of time stripping down and configuring large code bases, robustifying delicate state of filesystems (etc), and dealing with power consumption issues. Otherwise there are lots of fast microcontrollers out there, with ARM cores, the ESP32, etc with which it will be easier to get low power consumption and have a sense of your software footprint overall. \$\endgroup\$ – Chris Stratton Aug 26 '18 at 15:55
  • 3
    \$\begingroup\$ Taking averages of reading does not increase accuracy. You need to rethink what you are trying to do. It would be trivial to set up a test on PC, R'PI and even Arduino to do your averaging and logging task and provide a reasonable idea of the time taken. Since the GPS is producing serial plus timing you know exactly what the outputs are. \$\endgroup\$ – Jack Creasey Aug 26 '18 at 16:10

Any single board computer will be able to run an averaging decimating filter at 50 samples per second, even if using a high level interpreted scripting language. Even the apollo guidance computer would have been able to do that 50 years ago. But ... averaging NMEA-coordinates will not enhance accuracy.

First a little bit of hair splitting: Accuracy is the absence of a systematic error or bias, averaging will not help with this. Precision, the absence of random errors, is what you are after.

Second: You are doing signal processing. Understanding filter-theory will help with this issue. Really. Stephen W. Smith's book on DSP is a good introduction.

Third: 40 NMEA-coordinates per second are the output of some (interpolating) filter. In the design of this filter, there is a tradeoff between maximum trackable dynamics (in \$m/s^2\$) and precision. The tradeoff may be affected by the selected update rate. When you set the chip to 1 update per second, it may apply far better filtering than you may be able to do (altering integration period, carrier/code-tracking loop filters etc.)

| improve this answer | |
  • \$\begingroup\$ I’ve read about the noise and saw some examples in some scientific paper, it said that with high speed noise decreases, it would make sense to use heavy averaging at low speeds to reduce the noise. I’ll look into that book for sure because my understanding is pretty bad I see. \$\endgroup\$ – Jack Shephard Aug 28 '18 at 10:37

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