I'm relatively new to the topic but I'm intending to transmit some data from a measurement system in a cave to a receiver on the surface. I understand that I can use a SDR (software defined radio) to receive radio signals on the surface but from all of the tutorials and material I've come across online I can't seem to find a way to to transmit data at frequencies around 80 kHz to the surface. I've chosen 80 kHz because frequencies such as 88 - 108 MHz would encounter far too much attenuation whilst attempting to penetrate the ground and frequencies around 80 kHz are used by commercial cave radios that utilise voice links. However, I'm not interested in transmitting voice links but rather simple files. I've been told that using VCO circuits to simply generate a low frequency signal and modulate it with an input signal would be unstable and unreliable so my understanding of FM radio has proved useless at this point.

I suppose my question is what is the best method for transmitting signals at these low frequencies to the surface? How do I even begin to consider the design of a system that does this? I'm still a beginner with RF engineering so any help would be valuable.

Edit: I'd like to make it clear that I'm not aiming for "line of sight" transmission through air but instead "through the earth" (TTE) transmission through a conductive ground medium. Limestone, to be exact.

  • 6
    \$\begingroup\$ I hope you realize that at 80 kHz the available bandwidth is very low so your file transfer speed will be limited. Expect speeds like we had in the very early days of dialup modem connections. Anyway, in my humble opinion, this project is WAAAAAY too complex for a beginner. \$\endgroup\$ Commented Feb 1, 2021 at 13:21
  • 3
    \$\begingroup\$ I've been told that using VCO circuits... would be unstable and unreliable The easy way to make an FM signal is using a VCO so you're not wrong. Next time, ask WHY this would be unstable and unreliable! Because it can be done, it just depends on what you need in terms of stability. So people telling you "it cannot be done" tells you more about their skills than anything else. Indeed there are more stable ways to make an FM modulated signal, these are also more complex. What you do not need as a beginner is complexity. \$\endgroup\$ Commented Feb 1, 2021 at 13:21
  • \$\begingroup\$ Show the specs of a commercial example that works \$\endgroup\$ Commented Feb 1, 2021 at 13:33
  • 10
    \$\begingroup\$ Keep in mind that, in the USA at least, the 80 kHz frequency band is regulated and you MUST understand and adhere to relevant regulations before you transmit anything. Fines can be quite substantial and if you interfere with licensed traffic you may be liable for damages as well. \$\endgroup\$
    – jwh20
    Commented Feb 1, 2021 at 13:36
  • 10
    \$\begingroup\$ First take a look here to see which frequency ranges you can potentially legally use in the first place: en.wikipedia.org/wiki/Low_frequency#Experimental_and_amateur Just as an example, if you were in Europe, just blasting away around 80 kHz would most likely interfere with the DCF77 time synchronization broadcast. That's guaranteed to make people unhappy, including the relevant regulatory agency. \$\endgroup\$
    – TooTea
    Commented Feb 1, 2021 at 13:52

3 Answers 3


I've been told that using VCO circuits to simply generate a low frequency signal and modulate it with an input signal would be unstable and unreliable

There's no evidence to suggest that what you say is true.

I'd consider this as a good basis for a decent VCO at 80 kHz: -

enter image description here

Picture from this site. Or consider the LM567 from the same site: -

enter image description here

Then you'll need a tuned coil driver to implement magnetic field comms as you imply.

I'm still a beginner with RF engineering so any help would be valuable

It's a magnetic field transmitter so, make your coil as big as you can and use decent capacitors to parallel tune it. The Q of your tuned circuit can be higher if your data rate is lower but, if I were designing it, I would not hesitate to model it all in a simulator tool.

I'm not interested in transmitting voice links but rather simple files.

Rather than call it FM, call it FSK - it stands for frequency shift keying and can use exactly the same circuits shown above.

You also have to bear in mind that this type of transmission and reception uses the magnetic part of an electromagnetic wave. This is because the electric field part will not penetrate very far through the strata due to mineralized water for one thing. Additionally, because the frequency is low, the "antenna" is very short for the wavelength used and, it would be useless at transmitting any serious E-field any way.

So, it uses a magnetic field and, as you move away from the "antenna" (basically a large diameter coil of wire), the magnetic field falls with distance cubed. Compare this with a regular RF system that can utilize both E and H-fields; those fields fall linearly with distance. This is the magical thing about proper radio - in open fields (for example), for the same power to the "antenna", proper RF goes waaaaaaaaaay further than E or H-fields on their own. Bear this in mind.

  • \$\begingroup\$ Nice answer! I'm pretty fascinated by K. Miller's project (even if I think they might have misunderstood my comment to his previous question): Doing communications through conductive soil is most definitely interesting! I said there that an analog VCO has worse frequency accuracy (than an oscillation generated by the raspberry pi / MCU they have anyways) and they'd get higher error rates – I was assuming we'd be at the sub-0dB SNR range, and detecting tones whose frequency you don't exactly know takes longer the less accurate knowledge you have, or vice versa, at the same symbol rate, your \$\endgroup\$ Commented Feb 1, 2021 at 14:12
  • \$\begingroup\$ error rate increases. \$\endgroup\$ Commented Feb 1, 2021 at 14:12
  • 1
    \$\begingroup\$ @MarcusMüller I was making my answer as simple as possible. If I weren't using an MCU I'd use a PLL like the CD4046 to generate the FSK. However, it's radio in all but the fine detail and it's what the receiver specification is that dictates what is transmitted so, in the end it would almost certainly need an MCU to generate a lock-in preamble for the receiver and some hefty checksum appended to each data packet. Plus, more than likely, you'd need the device to be a transceiver so that packets can be acknowledged etc.. \$\endgroup\$
    – Andy aka
    Commented Feb 1, 2021 at 15:12
  • 1
    \$\begingroup\$ @K. Millar Note: Using the magnetic filed requires an antenna that is designed to transmit/receive in the magnetic field plane. You can't just use a simple straight wire antenna. Look up slot antennas and B field antennas. \$\endgroup\$
    – Aaron
    Commented Feb 3, 2021 at 21:29

but from all of the tutorials and material I've come across online I can't seem to find a way to to transmit data at frequencies around 80 kHz to the surface.

As said, you'd modulate your current or your voltage, from a controller.

I've been told that using VCO circuits to simply generate a low frequency signal

Well, a VCO is a voltage-controlled oscillator. It generates an oscillation, and you can control it with a voltage. That's what it does :)

and modulate it with an input signal would be unstable and unreliable so my understanding of FM radio has proved useless at this point.

Since your input signal would be discrete, we call that Frequency-shift keying, i.e. your data is put into discrete frequencies that you generate.

I did not say it would be unstable or unreliable. I said it would be less accurate than if you generated the oscillation digitally, which I stand by: all the VCO circuits you'll find are far less accurate in frequency than a quartz-derived numerically generated (that means calculated with a computer, e.g. a raspberry pi) oscillation. Less accuracy means "harder to detect" at the receiver, and that means more bit errors happen.

In the comment that you seem to be referring to, I said that your VCO doesn't solve your problem of transmitting data (you're far, far far away from transmitting "files").

A VCO is a method to generate a voltage-controlled oscillation. That's it.

You can modulate the oscillation frequency by changing the input voltage to the VCO; that's the purpose of a VCO.

With that, you can directly build a frequency-shift keying (FSK) transmitter that you feed with voltages generated by a microcontroller / your raspberry pi. I specifically confirmed you can do that with a VCO.

You can't generate any other modulation than FSK / FM with a VCO alone. There's many other modulations.

BUT: You have already have a raspberry pi in your system. Which can directly be used to generate a 80 kHz carrier. Your VCO is simply something you don't need to generate that carrier. It's really not a component that advances your system – you need your raspberry pi to emit a time-varying voltage to control the VCO. If you make your raspberry pi emit a time-varying voltage, that voltage might as well directly vary at 80 kHz, making your VCO redundant.

That's what I meant when I wrote:

Practically speaking, you don't need the VCO, it's just an unnecessary piece of analog hardware if you ask me: it restricts yourself to using frequency shift keying with pretty inaccurate frequencies and hence high error rates, and you still need something like a microcontroller to modulate the voltage for your VCO. That microcontroller can, however, pretty trivially also do the job of your VCO, just better. So, drop the VCO.

You can tell your raspberry pi to instruct a Digital-to-Analog-Converter (DAC) to generate your 80 kHz carrier with the modulation you want. That is pretty much SDR for your use case.

Think of your VCO as a string of a violin: You can control the frequency of the sound emitted by said string by pinching the string in the right position. You can control the frequency emitted by a VCO by setting a voltage.

Now, you can use different tones to communicate data. Say, frequency 79 kHz for the 0 bit, frequency 81 kHz for the 1 bit. Makes sense, right.

Now, your Raspberry pi has plenty of CPU power to synthesize the tones: Just like a digital music synthesizer has no problems generating different tones digitally without ever actually containing a VCO (or a violin), your Pi can just calculate the waveform you want, and give it to the DAC, which converts it to an analog voltage that follows the calculated waveform.

But if it can calculate the waveform you want, you're suddenly no longer constrained to abrupt transitions between tones; you could just as well use much nicer "alphabets" to communicate. In your earth scenario, that might realistically mean you want to send multiple tones at once (for example, 77, 79, 81 and 83 kHz at once for the 0 bit, and 78, 80, 82, and 84 kHz at once for the 1 bit). Your receiver listens for these multiple tones, and even if a single tone is well-absorbed by the electrical properties of your soil, the others might make it through.

You'll find that other subterranean communication systems might not use tones as signalling, but modulate other properties (amplitude, phase) of the carrier. Can't do that with a VCO at all, but trivially with your Pi without a VCO!

  • \$\begingroup\$ Thank you so much for the clarification and extra detail, really. I understand why a VCO isn't necessary in my case now. Just to clarify, and ignoring the specifics of the antenna I intend to use: I can synthesize an 80 kHz carrier and modulate it using the Pi? Also, would a checksum be an alternative to the multiple tone technique you've suggested? \$\endgroup\$
    – K. Millar
    Commented Feb 1, 2021 at 14:25
  • \$\begingroup\$ can you do carrier + modulation at once with the pi: yes, you can! Is a checksum an alternative to a sensible physical layer: No, a checksum would not be an alternative to some physical aspect to your modulation, it would be a necessity further "up" the protocol stack: without one, it's hard to know whether the data you've received is correct, no matter how you transmitted it. \$\endgroup\$ Commented Feb 1, 2021 at 15:16
  • \$\begingroup\$ @K.Millar When I was first getting started many years ago, I wouldn't have understood what the "stack" meant as Marcus used it. "Things just talk, right?" A little bit later, I understood the need for 3 layers - physical (gets a fundamental physical quantity like voltage or magnetism from one place to another), signalling (translate that physical quantity or a sequence of them to a fundamental computing concept like a byte), and logical (actual meaning from a sequence of bytes) - but nothing beyond that. Those 3 layers were all I ever needed for my projects at the time. \$\endgroup\$
    – AaronD
    Commented Feb 1, 2021 at 22:11
  • 1
    \$\begingroup\$ For example, DMX512 (logical, as a direct replacement for 0-10VDC on a dedicated wire per channel of theater lights) uses RS485 (signalling, based on UART, differing from RS232 (PC serial port) only in the voltages used), which can be on Cat-5 (physical). I was convinced then that the people that designed the more complicated stuff like TCP/IP and WiFi were just looking for an excuse to justify themselves. They're not. All the parts really do need to be there for specific reasons, and each layer has its own error-checking so that the parts that depend on them don't go nuts. \$\endgroup\$
    – AaronD
    Commented Feb 1, 2021 at 22:11

The best is one that you know works.

87kHz SSB AM with a 50m loop antenna, 1200m range

enter image description here enter image description here REF https://en.wikipedia.org/wiki/Project_Sanguine

  • \$\begingroup\$ wow, nice, but pretty complex! I'll be honest, I'm a computer-y person, I'd do the sampling directly on the passband signal (since that is very low in frequency, anyway), and then do the filtering, digital downconversion to IQ and what I presume amounts to QPSK demod in software :) \$\endgroup\$ Commented Feb 1, 2021 at 14:06
  • \$\begingroup\$ Even an Übersetzungen would have difficulty without Radio design expertise. \$\endgroup\$ Commented Feb 1, 2021 at 14:34

Your Answer

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

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