Ultrasound data transmission via a laptop

We present a simple example of data transmission using ultrasound, using a standard laptop using gnuradio. We simply make use of the laptops
own in-built speaker, along with a cheap microphone.

Gnuradio is an excellent suite of programs, which allows the creation of Software Defined Radios.

The following is the flow diagram we designed using the gnuradio-companion program, which generates the necessary python
code for us. We make use of a carrier frequency of 23KHz, which is above the range of human hearing and a sample rate of 48KHz, which
allows us to produce this frequency. We tried PSK and FSK, but found FSK worked most reliably for this, however further research into the best
modulation technique is necessary.

We make use of the packet encoder/decoder modules, in order to handle all good stuff like correctly aligning bits to the byte boundary etc.
One very important setting you must do is to make sure the gain of the final output, is around 0.5, as if not set to around this, you will get audible output.

Flow diagram

Further research:

I’m looking to modify the generated python code, to automatically iterate through a wide range of different potential baud rates and different modulators, in order to find the most effective configuration to use.


Download the gnuradio-companion file.

With thanks to the folks on #gnuradio for their help

  • JLOT
    December 10, 2013 Reply

    BadBIOS tecnology is true.

  • labbeth
    December 10, 2013 Reply

    Nice. It would be interresting to know how 23kHz is efficient under water.
    Thinking about RC submarines…

  • rajumoh
    December 18, 2013 Reply

    Hi, what version of gnuradio did u use ?

    • admin
      December 18, 2013 Reply

      Hi, I used the latest version 3.7.x. cheers

  • su
    January 7, 2014 Reply

    Hi, which daughterboard did you use in this project?

    • admin
      January 9, 2014 Reply

      I’m just using the computers soundcard.

  • me
    January 22, 2014 Reply

    Hi, what is the maximum distance between the laptop?

    • admin
      January 26, 2014 Reply

      I’ve only tested to around 3m so far.

  • hendri
    February 2, 2014 Reply

    hi, i’ve tried gnuradio-companion file, but the wx gui is not showing up? do you know shy? i’m using gnu radio companion

    actually i’ve got 2 warning, but have a same message when i execute the companion : “Block key “blocks_ctrlport_monitor_performance” not found when loading category tree”
    whether it has the effect of warning?

    • hendri
      February 2, 2014 Reply

      sory, i mean i’ve tried your gnu-companion file, and i mean “do you know why?” hehehe

      • admin
        February 4, 2014 Reply

        I’m using too, which works fine for me, possibly you haven’t compiled it with WX support?

        • hendri
          February 8, 2014 Reply

          But when i tried to run a simple grc the wxpy was run very well, i tried to change the tcp sink with audio sink or null sink, your ultrasound-fsk wx gui is showing up.

          i think, i have problem with the network configuration in gnuradio companion. :D

        • hendri
          February 9, 2014 Reply

          I want to try, create ultrasonic like your grc project. i have a question for to ensure me, can we create ultrasonic with frequency more than 23 khz (maybe more than 30khz) using standard speaker (that written have spec: respond in 90 hz – 20 khz)?

          • admin
            February 9, 2014

            Potentially you could, but both your soundcard and speaker would have to support that. I know most laptop’s soundcards
            only seem to go up to around 48kHz, meaning the max. frequency you could output would be 48/2=24kHz (according to nyquist).

  • j054n
    April 23, 2014 Reply

    Hi, I’m trying to test your project, but I have some doubts about how to adapt it using GRC under Win7.
    Must I to run two instances in 2 laptops with different TCP addresses?
    Must I setup some parameters for audio soundcards?
    Must I setup some permissions? I’m obtaining some errors like this:

    Generating: “C:\Users\Usuario\top_block.py”
    Executing: “C:\Users\Usuario\top_block.py”

    8: Permission denied
    ÒC:\Program Files (x86)\gnuradio\lib\site-packages\gnuradio\grc\gui\Dialogs.py:4
    7: GtkWarning: gtk_text_buffer_emit_insert: assertion `g_utf8_validate (text, le
    n, NULL)’ failed
    self.get_buffer().insert(self.get_buffer().get_end_iter(), line)
    : Permission denied

    Thanks in advance.

    • admin
      April 25, 2014 Reply

      I’m afraid I’m not sure what would cause that, as I don’t really use windows. However you may want
      to join the #gnuradio IRC channel on freenode for some good advice.

  • Aziz
    April 25, 2014 Reply


    I would like to know if you tested it in a closed environment like a steel pipe. I have project and it would be very helpfull if you test it inside a steel tube.


    • admin
      April 25, 2014 Reply

      I can’t see why it couldn’t work, could you expand more about your project though, sounds very interesting.

  • Luke Kim
    July 8, 2014 Reply

    Hello Chris!

    I’m interesting in ultrasound voice transmission.
    the idea is, transmitter device modulate the voice to 20khz ~ 24khz and play it through speaker, then the recevier device catch it and demodulate the sound and play it.

    the theory is make sense i think, but i’m not sure it really works well.
    the quick and best way is just code the program and run. but i wonder it can be.

    do you think my idea is make sense?
    and does it work you think?

    • admin
      July 8, 2014 Reply

      Hi Luke,

      You could possibly do it using FM/AM on a carrier wave at an ultrasound



Leave Comment

nine − = 0

Error Please check your entries!