Mystery signal from a helicopter

Last night, YouTube suggested a video for me. It was a raw clip from a news helicopter filming a police chase in Kansas City, Missouri. I quickly noticed a weird interference in the audio, especially the left channel, and thought it must be caused by the chopper's engine. I turned up the volume and realized it's not interference at all, but a mysterious digital signal! And off we went again.

The signal sits alone on the left audio channel, so I can completely isolate it. Judging from the spectrogram, the modulation scheme seems to be BFSK, switching the carrier between 1200 and 2200 Hz. I demodulated it by filtering it with a lowpass and highpass sinc in SoX and comparing outputs. Now I had a bitstream at 1200 bps.

[Image: A nondescript oscillogram of the data signal, and below it, the signal after FM demodulation, showing a clear pattern characteristic of binary FSK switching at 1200 bps.]

The bitstream consists of packets of 47 bytes each, synchronized by start and stop bits and separated by repetitions of the byte 0x80. Most bits stay constant during the video, but three distinct groups of bytes contain varying data, marked blue below:

[Image: A time-stamped hex dump of the byte stream, arranged in packets with only a few bytes changing over time.]

What could it be? Location telemetry from the helicopter? Information about the camera direction? Video timestamps?

The first guess seems to be correct. It is supported by the relationship of two of the three byte groups. If the 4 first bits of each byte are ignored, the data forms a smooth gradient of three-digit numbers in base-10. When plotted parametrically, they form an intriguing winding curve. It is very similar to this plot of the car's position (blue, yellow) along with viewing angles from the helicopter (green), derived from the video by manually following landmarks (only the first few minutes shown):

[Image: Screenshot from Google Earth, showing time-stamped placemarks tracing the roads of a suburb, accompanied by an X-Y plot of the changing FSK bytes that draws a very similar picture.]

When the received curve is overlaid with the car's location trace, we see that 100 steps on the curve scale corresponds to exactly 1 minute of arc on the map!

Using this relative information, and the fact that the helicopter circled around the police station in the end, we can plot all the received data points in Google Earth to see the location trace of the helicopter:

[Image: Coordinates from the whole data signal plotted on top of a Google Earth satellite photo several miles across, with a lot of circling around.]

Update: Apparently the video downlink to ground was transmitted using a transmitter similar to Nucomm Skymaster TX that is able to send live GPS coordinates. And this is how they seem to do it.

Update 2: Yes, it's 7-bit Bell 202 ASCII. I tried decoding it as 7-bit data earlier, ignoring parity, but must have gotten the bit order wrong! So I just chose a roundabout way and kept looking at the hex. When fully decoded, the stream says:

#L N390386 W09434208YJ
#L N390386 W09434208YJ
#L N390384 W09434208YJ
#L N390384 W09434208YJ
#L N390381 W09434198YJ
#L N390381 W09434198YJ
#L N390379 W09434188YJ

These are the full lat/lon pairs of coordinates (39° 3.86′ N, 94° 34.20′ W). Nucomm says the system enables viewing the helicopter "on a moving map system". Also, it could enable the receiving antenna to be locked onto the helicopter's position, to allow uninterrupted video downlink.

Thanks to all the readers for additional hints!

If you want to try it yourself, there's a shell script that will run sox, minimodem, and Perl in the right order for you.

89 comments:

  1. Why do I get the feeling that you are going to be contacted by a shadowy organization for an off-the-record secret mission with an infamous jewel thief (sprung from prison just for this event) and the last Real Ninja, a side show contortionist, an experimental weapons expert, a bumbling but brilliant scientist and George Clooney?

    ReplyDelete
  2. What tools did you use to decode and analyze the data?

    ReplyDelete
    Replies
    1. Perl and SoX. Also used Baudline as a simple waveform inspector.

      Delete
    2. Perl. The programming language for super humans.

      Delete
  3. This is fascinating. Would it be too much to ask for a detailed step-by-step of how you did this using the tools you used?

    ReplyDelete
  4. How did that single get into the video in the first place ? Telemetry from heli was in the form of audio ?

    ReplyDelete
    Replies
    1. yup. quite common. here's one in Tulsa, OK from last week:
      http://www.newson6.com/story/24559132/tulsa-police-catch-a-vehicle-after-high-speed-chase
      (the 14min video)

      Delete
  5. I love reading about people that do this stuff. Totally awesome. Great work! HACK THE PLANET!!!

    ReplyDelete
  6. +1 for the diligent work
    +5 for the conclusive end-result
    +100 for detecting it in the first place

    ReplyDelete
  7. What software did you use for the "magical image analysis"?

    ReplyDelete
    Replies
    1. Plotting the car's position was actually all manual work. I've done that before from videos.

      Delete
  8. well done Dr. Arroway ;) http://youtu.be/uhIEfxRLiPI

    ReplyDelete
    Replies
    1. Funny you should say that, Dr. Arroway was one of the reasons I ever got into decoding signals back then.

      Delete
    2. it's not funny "Anonymous" said that; they know what you watched when younger.

      Delete
    3. Dr. Arroway was my inspiration for getting into radio as well.
      Eventually I'll live somewhere I can actually put up an antenna of decent size.

      Delete
    4. I just had to log in to comment. I remember watching Contact as a kid (I can admit I cried). Awesome touching movie but it never got me into HAM or signal analysis.

      Delete
  9. awesome work! this could be advertised to make children go into science :D

    ReplyDelete
  10. Oona, you're an inspiration. Keep publishing stuff like this!

    ReplyDelete
  11. Nice work!

    I'm curious what tool you used to threshold and software decode the UART stream to get the hex log?

    ReplyDelete
  12. Nice find - what I'm not clear on is how the digital signal ended up on the recording. Was this signal picked up via induction on one of the microphone inputs? I can't image there is a speaker squawking the digital signal out loud... this is the real mystery to me.

    ReplyDelete
    Replies
    1. The Skymaster TX deliberately inserts position data to enable infographics etc.

      Delete
  13. If they did this in a movie, I'd be like 'yeah, suuure you can do that..'.

    Very cool indeed.

    ReplyDelete
  14. Once again, epic hacking by you! :-)

    ReplyDelete
  15. I think you might enjoy ham radio.

    ReplyDelete
  16. Wow, incredible hack! Thanks for sharing.

    ReplyDelete
  17. Nice job. I second the comment about amateur radio, if you find analyzing signals interesting you'd probably enjoy some of the digital modes. If I came across this video I'd have piped that audio channel through a software decoder too! And you can do all sorts of things general public (just can't) like ping the space station as it passes over or have a voice chat with an astronaut. Or just talk to someone driving around. It's neat.

    ReplyDelete
  18. Hypnoottisen viileää puuhaa!

    ReplyDelete
  19. great work BUT...now they will encrypt it and NO one will be able to track them anymore
    only through ADSB and DFing the beacon and maybe WIFI/Bluetooth and cells in their pockets.

    MRX

    ReplyDelete
    Replies
    1. No I don't think they'd bother encrypting the telemetry, since the location data can be gotten from a subsidiary high bandwidth unencrypted back channel - by looking up!

      Delete
    2. Yeah, because it's really cheap and useful to replace this kind of specialized equipment. So they need to develop a crypto device with multi-platform phone app - two days? Then the news stations have to switch to the new device and throw away the old ones - another two days?
      And all this just for hiding publicly available data (just look at the sky).
      Nice try troll.

      Delete
  20. Ha! Good stuff, after reading this I remembered I had been planning a bike-to-bike telemetry system using some citizens band or whatever (semi)legal frequency. It would be sooo good to see co-bikers live locations on your navigator when traffic or something else divides the group. However even if I could build such application there remains one big problem - there aren't (m)any people who could/would join my adventures. :/

    ReplyDelete
    Replies
    1. You should look at APRS using Ham radio. It is completely legal (if you have your licence) and has already been developed. :)

      Delete
  21. Wow, I am impressed. Most notably, with noticing the interference stream in a YouTube video and bothering to investigate it in this detail. Massive respect.

    ReplyDelete
  22. Why are you Fins all such geniuses?

    ReplyDelete
  23. Bell 202 FTW. I always loved that protocol - silence when no data was sent if I recall correctly. AppleCat was my first 1200 baud modem - more than 10x the speed of my prior Bell 101 device! Always a walk down memory lane to catch 202 bursts on bleed-overs from leaky phone line with CallerID delivery. But kudos to your demod on the weak data. Next up: if you can get 30fps of flickering LEDs in the background of some random scene, can you decode what they're transmitting? Tricky timing questions!

    ReplyDelete
  24. Did you come to any conclusions as to the use of bytes 11-13, and 20? After inverting, scaling, and offsetting packets 500-1800, they look like the other two groups of values. However before 500 and after 1800, they deviate somewhat.

    ReplyDelete
  25. I really can't believe people can do what you did, Oona. Go inspire some young girls. :-)

    ReplyDelete
  26. ..And Silver Medal goes to Chuck Norris.

    When Gods want to do something cool, they call her.

    ReplyDelete
  27. Do you think Kansas City's involvement with Google Fiber has anything to do with this?

    ReplyDelete
  28. Great post, and thanks for sharing. I will explain it to my kids so to see if they get hooked into this kind of things and develop the curiosity that is needed to become like you. My compliments.

    I wonder if the interference noises that i can hear in my car speakers when my cellphone talks to the celltowers can be decoded too. Did you ever think about it?

    Marco
    @mgua

    ReplyDelete
    Replies
    1. Thank you again.

      Reading your blog a page of a book came to my mind: Peter Høeg's Smilla's Sense of Snow. Smilla gets an old audio cassette tape and brings it to an old blind audio and language expert. He manages to decode the language and to identify the speaker age, education, and place of origin, basing on dialect, accent and tone. A nice page about language reverse engineering.

      Marco
      @mgua

      Delete
    2. In fiction, identifying a criminal based on sound pattern analysis, without any tools at all goes back at least to Wilbur Daniel Steele's 1921 short story, Footfalls ( http://www.web-books.com/Classics/ON/B1/B1138/Henry_1920C15.html )

      Delete
  29. How about this? Quote from slashdot http://tech.slashdot.org/comments.pl?sid=4741341&cid=46129789

    You can decode it with off the shelf software, throw away the top bit, and get back mostly ASCII:

    $ ./minimodem --rx 1200 -f ~/helicopter.wav | tr '\200-\377\r' '\000-\177\n'
    ### CARRIER 1200 @ 1200.0 Hz ###
    282 0002.3
    #L N390374 W09432938YJ
    #AL #NA 282 0002.3
    #L N390374 W09432938YJ
    ...

    ReplyDelete
  30. What about the
    L #NA 272 0003.0 is this 272ft of elevation ?

    ReplyDelete
    Replies
    1. Yes, by the looks of the curve it makes, it's probably elevation.

      Delete
  31. Saw this via Twitter - Brilliant! As a deaf person, I'll never think you could find digital signals in the audio channel. Goes to show that all grounds must be covered including those that seem silly!

    ReplyDelete
    Replies
    1. Having listened to lots of them, I've begun to have an ear for certain modulations.

      Delete
  32. This is really cool. Nice work.
    Could you post the data file? Should be possible to add a live map view to the video.

    ReplyDelete
    Replies
    1. http://oona.windytan.com/coords.txt, but it doesn't contain timing so can't be plotted live. Some packets are missing from in between.

      Delete
    2. Yeah, without timing and missing packets its going to be difficult. Would have been cool though, especially since you also created a track with the car's location.
      With not too many and somewhat evenly distributed missing packets the average timing error might be low enough. Maybe I'll try anyway if I have some time to kill...

      Delete
    3. http://www.fileswap.com/dl/5lJeEkIc3D/HelicopterChase.kml.html
      Each point's title is the seconds into the video (minus 0.185), and the description is the elevation value.

      Delete
    4. Thanks for the kml file, Timothy. With that it should be possible.
      How did you manage to obtain the timing info?

      Delete
    5. You're welcome. When I decoded it in a Matlab script I wrote, I took care to preserve the timestamp of the beginning of each timestamp.

      Delete
    6. Sorry, I meant "the timestamp of each data packet."

      Delete
  33. Well done. A very good program to decode the AFSK directly is called minimodem http://www.whence.com/minimodem/. I am familiar with a version from a different manufacturer of this type of tracking system, NSI or N-systems. Originally gps rs232 data from the helicopter’s nav system was used, a Trimble protocol called RNAV r1, sent to a bell 202 v.23 modem running at 1200 baud. This audio signal was sent to one of the audio inputs of the microwave transmitter on board the ship, the same one transmitting the live video. The audio was pulled off at the receive site, decoded locally by the tracking system that drove the receive antenna to automatically follow the live coordinates from the moving helicopter. As gps has become more common the units no longer depend on flight computers, but due to backwards compatibility issues they still use the strange protocol. The earlier system was waypoint based, the copter transmitter antenna was pointed at a known waypoint (the receiver) this bearing-to-waypoint info was simply reversed 180 by the receive site to point at the helicopter, but this system doubled any pointing errors. The newer systems simply track the lat/long coordinates.

    Much of the reason it is done with audio is for legacy compatibility. The original versions of these systems used analog microwave links, extremely susceptible to breakup and mulitpath with any antenna pointing errors. Bell 202 worked great with the limited bandwidth audio subcarrier used, and usually didn't creep into the second voice/nat sound subcarrier. Every ENG helicopter microwave system is now digital and much more resilient, but we still use AFSK tracking data because that's how the infrastructure is set up.

    ReplyDelete
  34. Respect. With 0x20 years experience of programming and couple rounds with GPS and Fourier, I'm not sure if I could have done this. The math and programming, sure, but the quess work... I loved millennium trilogy and agree with the ref to Ms Salander :-)

    ReplyDelete
  35. 我是一个中国高中生,买了代理服务器才能看你的文章,表示因为你的杰出成就使自己对你产生崇敬之心

    ReplyDelete
  36. I have to say first that I love your kind of hackers because you can find something that ordinary people don't even think of ever... :)

    Because you are a hacker you are maybe interested in knowing that this specific finding is not unique in these devices (even if the manufacturer says so) because this technique has been used already years and years in these video links.

    I am myself an FPV hobbyist (I was one of the first in Finland that started doing this FPV with RC helicopters about 6 years ago) and at least a few years we have had a $100 transmitter that sends GPS signal (and all FPV RC airplane/copter logger data actually) in video audio channel. This function is in many devices, but for example it is available in this EagleEyes FPV Station:
    http://www.eagletreesystems.com/index.php?route=product/product&product_id=84

    You will get also more info about these video links and extra data from my 4 year old video in Assembly 2010:
    https://vimeo.com/18302745

    ReplyDelete
  37. Have you tried using GNU Radio for signal analysis? It can take some time to learn, but it is a very powerful and useful tool for this sort of reverse engineering project.

    ReplyDelete
    Replies
    1. GNU Radio seems a bit too complicated for me. I want raw samples and Perl.

      Delete
    2. I find GNU Radio to be a great way to get from raw samples to bits. If you get stuck on a complicated modulation scheme someday, you might want to give it a try.

      Delete
  38. This is some amazing work, thank you very much for sharing. After having read a few of your posts and watched some videos, I'm wondering how you generate these nice plots like the one with the raw signal, the demodulated data and the black background.

    I'm also wondering what program you used to generate the real-time spectrogram in the video on the 15.6 kHz high-pitch noise of the CRT. I like to visualize my results for my audience, but my visualizations are far inferior to what you are showing. Would you mind sharing?

    ReplyDelete
  39. Thanks for the info Ooona. The company I work for, Red Hen Systems, pioneered the technology behind this technique: http://www.redhensystems.com/

    ReplyDelete
  40. Say, Oona- you sound a lot like me (with your curiosity on things you hear and figuring out the signals) for reference, could you post the youtube video you finagled the signal from if possible? If you were signed into youtube when you watched it, it would be in your watched list. It would be interesting to see the very video you suspected that sound from. Thanks in advance- Kristin

    ReplyDelete
    Replies
    1. See the first sentence of the post, there's a link.

      Delete
  41. Look up APRS for more information on the Ham radio system that is very similar to this. Sending your location speed heading and other infomation in about a .7 second burst every x number or minutes.

    Jim K5JSW

    ReplyDelete
  42. wow, this is so cool. I love when you post articles like this. it inspires the inner geek within me.

    ReplyDelete
  43. Hi Oona,

    Very impressive signal decoding. I'm fairly new to LInux, and to SoX, but I'm trying to recreate your decoding of the GPS location data from the YouTube video, as an exercise in learning.

    With respect to the decoding of the BFSK 1.2kHz and 2.2kHz signals representing the binary data, how did you compare the two sinc filtered signals to create your baseband digital bitstream?

    And also, how did you decide which frequency (of 1.2kHz and 2.2kHz) represented a binary 0 and which a binary 1?

    Many thanks, and keep up the interesting work and posts,
    Oli, from Fleet, UK.

    ReplyDelete
    Replies
    1. Take the filtered signals, run any kind of envelope detection, and then just use basic inequalities, "bit = (mark > space)".

      It is oftentimes the case that the higher frequency in BFSK is the mark frequency (1). If it isn't, decoding will fail and I can try the other way round

      Delete
    2. Here's an example envelope detector for two piped inputs: env.c

      Delete
  44. Hello Oona,
    I found a similar case (this time a Police helicopter) and tried to replicate your excellent work. I could not easily demodulate in software, so I used minimodem.

    Congratulations for the very interesting blog!
    Alain K1FM

    ReplyDelete
  45. Hi Ms Oona- I had a similar mystery yesterday taking our local bus on public transit. Listening to my AM/FM headphones I noticed on AM radio, every time the door to the bus is opened and only the FRONT door, a signal that sounds like a fast siren interferes with AM radio. I thought that was interesting. I wonder if a signal is sent back to the head office to note each time a door is opened?

    ReplyDelete
    Replies
    1. You're probably hearing electrical interference caused by the door motor. AM radio is very sensitive to motor noise.

      Delete
  46. Hi Oona,

    I'll add my compliments to the pile. It's incredible work. Also, I imagine the posters you've kicked out will start popping up in classrooms. Few electronics teachers "get" aesthetics and infographics the way you do.

    Here's another system in use by broadcasters for helicopter tracking...

    http://www.trollsystems.com/index.php/video-and-data-links-2/bidirectional-data-links

    Note, there's a "sample manual" with photos of the receive station user interface on page 3-26.


    http://test.trollsystems.com/media/files/Directional%20Diversity%20Ground%20Receive%20System.pdf

    Another Alex

    ReplyDelete
  47. Hey Oona,

    Awesome post! I have read through it a few times now and each time I come away with something new to learn about. Thanks!

    Also, I found this video https://vimeo.com/111414803 of you explaining the process above. Didn't see it linked here so I posted it for the benefit of the other readers.

    Cheers!
    -Brandon

    ReplyDelete
  48. I've heard this signal to, and it's always coming from a helicopter news reporting. However it's usually NOT on during the entire duration of the helicopter reporter doing their news report. It usually comes on just after the person in the helicopter says "now back to [insert anchor-man's name here] in the newsroom" and switches off their broadcast signal from the helicopter (maybe accidentally switching on their telemetry too soon). I've never heard it on any news broadcast for more than 1 second. It's very interesting to see that you have a much longer sample of it here. How did you get it?

    It seems that they have no reason to send the telemetry over the same channel as voice audio, as that messes up the sound of the person you are trying to listen to. Why not have a separate transmitter and antenna dedicated to telemetry?

    Also, it's NOT 7bit ascii (or at least not being sent "in the clear"). 7bit ascii standard is 2 start bits (or sometimes 1 start bit), 7 data bits (for ham radio, though other applications usually use 8 data bits), 0 parity bits, and 1 stop bit. A start bit is a binary 0, and a stop bit is a binary 1. Also the bit order is usually MSB first.

    I have a ham radio decoder software capable of decoding raw 7bit ascii FSK stream at any baud rate, and any frequency shift, and it can't decode this thing. I tried both polarities (upper tone = binary 1, and lower tone = binary 1). Neither polarity decoded it. It can also decode 4 modes of ascii (including non-standard variants). Ascii 8 bits per byte, Ascii 7 bits per byte, Ascii 8 with MSB clear (7 bits, with one 0 bit for padding to 8 bits), and Ascii 8 with even parity (8 data bits plus a parity bit for a total of 9 bits between the startbits and stopbits). I tried all for of these modes with both tone polarities. It only decodes random garbage. I tend to believe that this signal is in fact encrypted, and you managed to somehow crack the encryption to decode it.

    ReplyDelete
    Replies
    1. Thanks for the comment!

      The telemetry is separated from the voice audio by simple stereo separation, and will not normally be broadcast on TV.

      You can decode 7-bit Bell202 using minimodem. You can read more about the Bell202 interface in this 1976 document.

      Delete
  49. Can you make the perl script available?...on github?
    better yet can you provide us with your(perl) Hex tool which you highlighted the octets...Image #3 on this page?

    ReplyDelete
  50. What fun! Well I know exactly what this is (as one of the original creators). You have most of it but missed a few details.. It is BELL202 running 7 data bits, one stop, odd parity. that adds up to 10 bits per char counting the start. What does all the data mean? the L #NA 272 0003.0 is the "bearing and range" to the site receiving the signal (the TV station tower). Start at the Lat/Long and then plot the bearing and range from there. Most likely the bearing is in "magnetic", but some transmit this in "true". Now for the next riddle: Where is the altitude?? Its there but the only part in binary and is in a magic grey code...

    ReplyDelete
  51. I just stumbled upon this Yle video from a helicopter in Japan:
    https://areena.yle.fi/1-63018632

    And there seems to be a very similar, yet different, digital audio stream.

    ReplyDelete
  52. https://youtu.be/QuDTlMM-raE?t=38

    ReplyDelete

Please browse through the FAQ first, it might be that your question is already answered.

Spammers have even found comments sections, so this comments section is pre-moderated; it will take some time for the comment to show up.