Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Transferring data using ultrasound

Yamaha InfoSound and ShopKick application use technologies that allow to transfer data using ultrasound. That is playing an inaudible signal (>18kHz) that can be picked up by modern mobile phones (iOS, Android).

What is the approach used in such technologies? What kind of modulation they use?

like image 562
alexey Avatar asked Jun 04 '11 07:06

alexey


People also ask

What is ultrasonic data?

Ultrasonic technology is defined as the process of using barely audible and inaudible sound waves to transmit digital data. It is also known as ultrasonic data transmission.

Can mobile phone produce ultrasound?

The phone's speaker can reproduce a maximum frequency of 18-20 kHz. Ultrasound - this is the frequency above 20 kHz. It is impossible to generate ultrasonic signal.


2 Answers

I don't know how they do it but this is how I do it:

If it is a string then make sure it's not a long one (the longer the higher is the error probability ). Lets assume we're working with the vital part of the ASCII code, namely up to character number 127, then all you need is 7 bits per character. Transform this character into bits and modulate those bits using QFSK (there are several modulations to choose from, frequency shift based ones have turned out to be the most robust I've tried from the conventional ones... I've created my own modulation scheme for this use case). Select the carrier frequencies as 18.5,19,19.5, and 20 kHz (if you want to be mathematically strict in your design, select frequency values that assure you both orthogonality and phase continuity at symbol transitions, if you can't, a good workaround to avoid abrupt symbols transitions is to multiply your symbols by a window of the same size, eg. a Gaussian or Bartlet ). In my experience you can move this values in the range from 17.5 to 20.5 kHz (if you go lower it will start to bother people using your app, if you go higher the average type microphone frequency response will attenuate your transmission and induce unwanted errors).

On the receiver side implement a correlation or matched filter receiver (an FFT receiver works as well, specially a zero padded one but it might be a little bit slower, I wouldn't recommend Goertzel because frequency shift due to Doppler effect or speaker-microphone non-linearities could affect your reception). Once you have received the bit stream make characters with them and you will recover your message

If you face too many broadcasting errors, try selecting a higher amount of samples per symbol or band-pass filtering each frequency value before giving them to the demodulator, using an error correction code such as BCH or Reed Solomon is sometimes the only way to assure an error free communication.

One topic everybody always forgets to talk about is synchronization (to know on the receiver side when the transmission has begun), you have to be creative here and make a lot a tests with a lot of phones before you can derive an actual detection threshold that works on all, notice that this might also be distance dependent

If you are unfamiliar with these subjects I would recommend a couple of great books:

Digital Modulation Techniques from Fuqin Xiong

DIGITAL COMMUNICATIONS Fundamentals and Applications from BERNARD SKLAR

Digital Communications from John G. Proakis

like image 97
VMMF Avatar answered Oct 06 '22 16:10

VMMF


I see several problems with this approach. First, 18kHz is not inaudible. Many people cannot hear it, especially as they age, but I know I certainly can (I do regular hearing tests, work-related). Also, most phones have different low-pass filters on their A/D converters, and many devices, especially older Android ones (I've personally seen that happen), filter everything below 16 kHz or so. Your app therefore is not guaranteed to work on any hardware. The iPhone should probably be able to do it.

In terms of modulation, it could be anything really, but I would definitely rule out AM. Sound has next to zero robustness when it comes to volume. If I were to implement something like that, I would go with FSK. I would think that PSK would fail due to acoustic reflections and such. The difficulty is that you're working with non-robust energy transfer within a very narrow bandwidth. I certainly do not doubt that it can be achieved, but I don't see something like this proving reliable. Just IMHO, that is.

Update: Now that i think about it, a plain on-off would work with a single tone if you're not transferring any data, just some short signals.

like image 28
Phonon Avatar answered Oct 06 '22 14:10

Phonon