Hacker News new | past | comments | ask | show | jobs | submit login
Motion sensing using the doppler effect (danielrapp.github.io)
186 points by ismavis on Mar 10, 2015 | hide | past | web | favorite | 24 comments

This is a very cool demo. There are a couple of ways to improve this technique, improve accuracy, reduce power, and improve noise rejection.

The biggest wins are in improving the waveform from this one (called "continuous wave" or CW in the radar/sonar literature) to one with more bandwidth. One option is to sweep the frequency continuously (FMCW) or with breaks. Another option is to switch from this continuous noise to pulses of noise, just turning the sound on and off. Pulsing like this increases bandwidth (because the "turning on and off" introduces higher-bandwidth edges) very simply. Modulating the frequency during the pulse helps more, creating a wolf-whistle like "chirp".

Doing the signal processing for these alternative waveforms is a little bit trickier than the technique this page uses. It can be done in the time domain with correlation, or in the frequency domain with the the FFT and simple multiplication.

"Another option is to switch from this continuous noise to pulses of noise, just turning the sound on and off"

You can get ranging information if you use a generating polynomial to spread the transmitted signal into noise and then change it rather often and correlate past transmitted data with whats received. This probably makes a lot more sense if you already understand what I'm talking about. By example:

Your generating polynomial for psuedorandom noise says 2,42,9,73,1

You transmit 20000+2 Hz 20000+42 Hz you get the idea.

So you transmitted a 2, 42, 9, 73, 1 signal. OK.

Now reflecting back are multiple faint signals saying 2, 42, 9, 73, 1 at different delays shifted in time because the objects are different distance away...

Why this helps is you only get one range data point when you send a beep or a CW signal, but now you get a discrete range data point every time your generating polynomial switches freq, which is probably pretty often.

Also its basically unjam able unless the thing trying to jam you happens to know your generating polynomial. Of course you can use something cryptographically more advanced as a random number generator. We are now entering deep (classified?) radar and ECM and EECM stuff. This rabbit hole goes down quite a bit further of course. Cool eh?

If you're willing to sit on a desk chair and be pushed around with your laptop at a constant speed, maybe you could make a synthetic aperture sonar. Maybe. That would be impressive.

> We are now entering deep (classified?) radar and ECM and EECM stuff.

I doubt that this particular technique is classified, it is fairly well known and dates back to the early days of EW. One interesting angle is that the basic technique (frequency hopping) was invented by a famous actress and a composer (http://en.wikipedia.org/wiki/Hedy_Lamarr#Frequency-hopping_s...).

That sounds like a lot of fun! Could you recommend any textbooks for learning more about this kind of stuff?

cool I have got a ultra sonic sensor and a few ardunios I wonder if I could get this to work using that

Its a little tricky since producing a sine wave at high frequency on an arduino without extra hardware is hard. Likewise adjusting it finely is also hard. Also if you have a sensor and not a plain transducer, you can't change its programming.

Also, piezoelectric transducers can have a somewhat limited frequency range.

I've actually been looking into making some high quality sonar equipment from scratch, but getting good datasheets on ultrasonic transducers has been a royal pain in the butt.

FYI My dog HATED the sound from this demo. Incredibly cool demo nonetheless, just be careful if you've got pets around!

Weird my dog didn't even notice.

Maybe my dog is broken :(

One of the first things I checked was the hearing range article on Wikipedia. Seems like cats would be able to hear the tone too.

I had read about SoundWave a long time ago and emailed the researches if they were going to do anything with it or if they could open source their code. Unfortunately they told me it was "just a PhD" and that I could re-build it from the paper. I am super super super happy and glad to see that you've gone ahead and implemented it. Thank you so much.

Very cool!

However it makes me crazy... I hear that noise clear as a bell and I'm 42. Wikipedia says that human hearing typically goes up to 20kHz. (http://en.wikipedia.org/wiki/Hearing_range#Humans)

So maybe you want to go high enough that a much lower % of the population will go bonkers?

Scope the frequency response graph - you're probably not hearing the pure 22khz (maybe though!) and rather some of the lower harmonics.

Very cool idea, but unexpectedly my girlfriend started screaming and didn't let me keep the sound on for more than a second or two. She said it was a terrible noise and gave her a headache.I didn't know it but it appears she can hear 22 kHz.

Am I the only one thinking of BadBIOS right now?

wow cool idea. I wonder what could be achievable in terms of precision with different frequencies on seperate speakers and 2 or 3 microphones; a paper(printed) or laser lit (on a surface) keyboard?

If you use earphones, you can scroll the page by tapping on them, make sure that the laptop panel is open.

This is absolutely brilliant

How does this work with other noises and interference?

I'm sitting outside on my deck. Birds are chirping, dogs are barking. There was a clear 20kHz band, but the resizing rectangle was just randomly jumping around, and when I turned on the hands free scrolling the webpage started jumping up and down randomly and rapidly.

But hey, this is an excellent project! Love it.

Because something fairly specific is being searched for, the signal should stick out from the noise fairly well.

One could also use a pseudo-random code instead of a steady signal to further distinguish the signal from the noise (in the style of GPS).

This simple demo wouldn't be very good at noise rejection, but the general idea could be extended to reject noise very well. One option is to use a wider-band signal, like a pulse or a chirp. Signal processing techniques could then be used to extract the doppler while strongly rejecting noise. Another option, especially if you want multiple devices using this technique to work near eachother, is to use code division pulses (the same approach as CDMA). These kinds of pulses aren't that good at rejecting noise, but can be made very effective at rejecting other devices using different codes.

If they're up around 20khz probably not well.


Mind. Blown.

Applications are open for YC Winter 2020

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact