Transmitting Data Through Sound With Minimodem
Minimodemcan play and capture audio modem tones in real-time via thesystem audio device, or in batched mode via audio files.Minimodemcan be used to transfer data between nearby computers using anaudio cable (or just via sound waves), or between remote computers usingradio, telephone, or another audio communications medium."I like the Unix-philosophy of simple tools that do their job... minimodem has all the boxes ticked."- a minimodem userMinimodem demos and applications: [video] Original minimodem demo videoTry using minimodem to decode the modem data in this video yourself! (Hint: maybe use 'pavucontrol') [video] Sarah Rose "Signals Everywhere": Decoding Digital Audio DataExcellent demonstration of modem-audio forensics methods and tools! "This." -Kamal [blog] Maxime Leblanc: Decoding Audio ModemsGood introduction to basic FSK fundamentals. [application] Sega Saturn Save Game ExtractorTransmit Sega Saturn save game files as audio. Based on minimodem. [video] Kris Occhipinti: "Computer Radio Data Communications" video seriesNice video series using minimodem to demonstrate experimental emergency comms methods. [video] 300 Baud Acoustic Modem Emulation & calling a BBS [video] Hak5 "Alternative Sneaker Nets" (minimodem at 6m12s) [video] minimodem decoding modem data from Arduino microcontroller [audio] Freifunk.radio show featuring minimodem (German)
Transmitting data through sound with Minimodem
If you have to transmit a file from A to B then the most common methods are to use any kind of network (wired or wireless) or a shared storage medium like an USB stick. What if everything fails and you have to transmit data from computer A to computer B then you still have an option: Transmit the data via the soundcard !
Under Linux it is very simple to transmit data via the soundcard. The program minimodem can do exactly that: On the senders computer it converts data to a sound which is played back via the default soundcard and on the receivers computer this sound is converted back to the initial text. Here is a quick example:
The kind of sound that is produced with the upper command is called RTTY and it is very slow (only 45.45 bps, transmitted in a 5 bit code - so you can not use the whole ASCII Table to transmit data). This makes it useable in a very noisy environment like radio communications.
On the senders side the file input.bin is base64 coded (so you can transmit any kind of characters and you can be sure that it fits into the ASCII alphabet) and finally handed over to minimodem which converts it to 300 baud ASCII modem sound.
Of course this is not very reliable but it is interesting to know that you can use (HAM) radio technology to transmit data from your pc to another by just using the soundcard. If you now think "Well thats cool - can i set up a whole network like this ?" ... YES you can. One promising solution seems to be soundmodem which will be covered in another blog post.
Since you can set the mark and the space frequency (these are the frequencies that represent a 1 or a 0) you can propably use minimodem to produce ultrasound (frequencies > 19kHz) which is no longer hearable by the human ear. So you can transfer data out of a computer without beeing detected. (Idea taken from this Hackaday article about ultrasound datatransmission with gunradio and this article about ultrasound networking - but not verified yet).
Minimodem is a command-line program which decodes (or generates) audiomodem tones at any specified baud rate, using various framing protocols.It acts a general-purpose software FSK modem, and includes support forvarious standard FSK protocols such as Bell103, Bell202, RTTY, TTY/TDD,NOAA SAME, and Caller-ID.Minimodem can play and capture audio modem tones in real-time via thesystem audio device, or in batched mode via audio files.Minimodem can be used to transfer data between nearby computers using anaudio cable (or just via sound waves), or between remote computers usingradio, telephone, or another audio communications medium. Tags: User Interface: Command Line, Role: Program, Purpose: Transmission
Resilient to noise upto certain level:I've implemented a BCH error correcting code, with the ability to repair up to 8 error per data block. BCH codes have their biggest coding gains when there is a 25 to 50% redundancy added
You must use fifo or another tricks, and understand that: minimodem need WAV file ,yes it can be done with a specific command and tool capable to encode raw to wav and using pipe, for example with this tool : SoX - Sound eXchange, the Swiss Army knife of audio manipulationand using FIFO file.
As you can see , rtl_fm use current terminal where the bash rtl_fm command as running, minimodem is opened in a new terminal for real-time display demodulated datas and then anoter terminal is opened for display the sound for the user.
Try to close the aplay or minimodem terminal (or the two term.) manually when all is running, wait 20 secs and normally all is automaticly restarted correctly without any errors (for me for sure) and you can see the demodulated datas in the minimodem terminal.
With this mode all is done in background and minimodem datas are written into a specified file /tmp/minimodem.$date.log, then you canopen a new terminal (manually) and use (the filename is specified in this script output):
Besides the sound device drivers, ALSA bundles a user-space library for application developers who want to use driver features through an interface that is higher-level than the interface provided for direct interaction with the kernel drivers.
Part 2 of the hardware is comprised of two different audio attenuators for passing audio between the radio and the USB soundcard. This is especially complicated by the fact that the radio and the USB soundcard (and standard computer audio devices in general) are built on two different standards of audio hardware in terms of speaker and microphone impedance. So frankly, you might come up with something better than what I did. After trying several different audio attenuation circuit types (L, T, pi, etc.), I concluded that the resistors from Spkr+ and the system ground were ineffective and unnecessary so I removed them. So, this made the circuit very simple, but there is probably a better way.
If you've looked at it, it's probably fairly self-explanatory, but to be clear: As set up by default, the flow will receive strings passed to it on the MQTT topic "dataTX", and then transmit them out over the radio frequency your radio is tuned to. Then, it will publish strings received by the radio on MQTT topic "dataRX". It will also transmit text defined in the inject node, and return decoded text in the debug tab. Finally, the MQTT nodes can be replaced with any other node which will send/receive data, such as e-mail, twitter, watch file, GPIO, websocket, etc.
It seems that this same circuitry and software could just as well be used on HF bands with many HF rigs - at least the Yaesu ft-857d or similar, which have a PTT circuit and can use the same USB sound card for an audio interface. This would, of course, also allow for SSB operation on VHF/UHF frequencies which I would also expect to significantly increase range for the same power level.
I am working on a Free-Space-Optics transceiver that uses the soundcard of a computer, a LED, a photodiode and a lens to transmit data over the air. At the moment I am trying to connect two transceivers with the help of GNU Radio. The GNU Radio tutorials and examples that I know of, all cover USB radio devices.
I already experimented with software called Minimodem which uses Audio Frequency Shift Keying for data transmission over the soundcard. GNU Radio offers a lot of useful blocks like Automatic Gain Control (helpful for changing signals due to light and weather conditions) etc., which is the reason I would like to use it for my experiments.
Minimodem is a command-line program which decodes (or generates) audio modem tones at any specified baud rate, using various framing protocols. It acts a general-purpose software FSK modem, and includes support for various standard FSK protocols such as Bell103, Bell202, RTTY, NOAA SAME, and Caller-ID. Minimodem can play and capture audio modem tones in real-time via the system audio device, or in batched mode via audio files. Minimodem can be used to transfer data between nearby computers using an audio cable (or just via sound waves), or between remote computers using radio, telephone, or another audio communications medium.
Sarah first shows how to use Multimon-ng to decode the DTMF tone section of the signal. These are the tones heard when dialling on a landline phone. She then goes on to show how to use Audacity in spectrogram mode to take a closer look and analyze the next chunk of the signal. Then by using the information gained about the signal from the spectrogram analysis she is able to decode the data via minimodem.
Hackaday brings to attention a simple hack where hacker Marc uses an antenna connected to a general purpose I/O (GPIO) pin on his Raspberry Pi to wirelessly transmit a wav file via AFSK modulation to his RTL-SDR. He uses a program called minimodem to encode the wav on the Raspberry Pi and then on the PC to decode the data received by the RTL-SDR.
The Raspberry Pi will be running an open source software called MiniModem, in two separate threads. One thread will handle receiving data from the Baofeng Radio; the other will handle transmitting data to the Baofeng Radio.
With audio going out in both directions between the Baofeng radio and the USB sound card, through the audio out/mic in ports of each device, a bidirectional communication link is developed. Any digital data that needs to reach the Raspberry Pi in the HAB from the base station will be modulated into audio at Mission Control using MiniModem, and transmitted over 2m. The Baofeng radio will then receive this audio, and output it to the Raspberry Pi. The audio will be demodulated to digital data on the Raspberry Pi, using MiniModem in conjunction with the USB sound card.