# Oona Räisänen

a blog about sound & signals by windytan \[oona räisänen\]

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Smoother sailing: Studying audio imperfections in Steamboat Willie

DevFeed: [Smoother sailing: Studying audio imperfections in Steamboat Willie](<https://devfeed.tech/articles/smoother-sailing-studying-audio-imperfections-in-steamboat-willie-21660.md>)

Original publisher: [Read original article](<https://www.windytan.com/2024/01/smoother-sailing-steamboat-willie-flutter.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2024-01-23T19:47:00Z

Content type: tutorial

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [Playback](<https://devfeed.tech/topics/playback.md>), [Compression](<https://devfeed.tech/topics/compression.md>), [Tool](<https://devfeed.tech/topics/tool.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [audio](<https://devfeed.tech/tags/audio.md>), [audio-media](<https://devfeed.tech/tags/audio-media.md>), [code](<https://devfeed.tech/tags/code.md>), [compression](<https://devfeed.tech/tags/compression.md>), [music](<https://devfeed.tech/tags/music.md>), [playback](<https://devfeed.tech/tags/playback.md>), [tool](<https://devfeed.tech/tags/tool.md>)

### AI overview

The article examines flutter distortion in the soundtrack of the 1928 cartoon Steamboat Willie. It discusses prior attempts to reduce the unstable playback or recording speed, including Celemony Capstan, and considers a homemade approach using a high-quality digital source.

### Source excerpt

Steamboat Willie (1928) was one of the earliest cartoons with synchronized sound. That is, it had post-production sound effects; this was something new and exciting. Now that the cartoon has recently entered the public domain[bbc24] we can safely delve into its famous soundtrack. See, there's something interesting about how it sounds... If you listen closely to the soundtrack on Youtube it sounds somehow distorted. You might be tempted to point out that it's 96 years old, yes. But you might also recognize that it is suffering from flutter, i.e. an unstable playback or recording speed. In the spirit of this blog let's geek out for a bit and study this flutter distortion further. Can we learn something interesting? Could we perhaps learn enough to be able to reduce it? Of course the flutter might be 100% authentic to how it sounded in theatres in the 1920s; we don't know when and why it appeared in the audio (more on that later!). It might have sounded even worse. But we can still hope to enjoy the sound effects in their original recorded form. Prior work I'm not the first one to notice this clip is 'fluttering' and to try and do something about it. I found videos of people's attempts to un-flutter it using Celemony Capstan, a professional tool made just for this purpose, with varying results. Capstan uses Melodyne's famous note detection engine to detect musical features and then controls a varispeed effect to cancel out any flutter. But Capstan is expensive, and it's more fun to come up with a home-made solution anyway. And what about non-musical sounds? Besides, I had some code laying around in a forgotten desk drawer that just might fit the purpose. Finding a high quality source Why would I need a high-quality digital file of a poor-quality soundtrack from the 1920s? I guess it's the archivist in me hoping that it has been preserved with high level of detail. But also, if you're going to try and dig up some hidden details in the sound, you'd want minimal interfere

## Using HDMI EMI for fast wireless data transfer

DevFeed: [Using HDMI EMI for fast wireless data transfer](<https://devfeed.tech/articles/using-hdmi-emi-for-fast-wireless-data-transfer-21659.md>)

Original publisher: [Read original article](<https://www.windytan.com/2023/02/using-hdmi-radio-interference-for-high.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2023-02-27T21:02:00Z

Content type: tutorial

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [hdmi](<https://devfeed.tech/topics/hdmi.md>), [monitor](<https://devfeed.tech/topics/monitor.md>), [vulnerability](<https://devfeed.tech/topics/vulnerability.md>), [Raspberry Pi](<https://devfeed.tech/topics/raspberry-pi.md>), [data](<https://devfeed.tech/topics/data.md>)

Tags: [communications](<https://devfeed.tech/tags/communications.md>), [hdmi](<https://devfeed.tech/tags/hdmi.md>), [monitor](<https://devfeed.tech/tags/monitor.md>), [raspberry-pi](<https://devfeed.tech/tags/raspberry-pi.md>), [security](<https://devfeed.tech/tags/security.md>), [side-channels](<https://devfeed.tech/tags/side-channels.md>), [tempest](<https://devfeed.tech/tags/tempest.md>), [vulnerability](<https://devfeed.tech/tags/vulnerability.md>), [webcam](<https://devfeed.tech/tags/webcam.md>)

### AI overview

The article investigates wide-band radio interference from a monitor and shows how HDMI electromagnetic emissions can reveal a distorted image of a Raspberry Pi desktop. It connects the observation to the known monitor-eavesdropping technique called van Eck phreaking and explores whether the emissions can transfer additional information.

### Source excerpt

This story, too, begins with noise. I was browsing the radio waves with a software radio, looking for mysteries to accompany my ginger tea. I had started to notice a wide-band spiky signal on a number of frequencies that only seemed to appear indoors. Some sort of interference from electronic devices, probably. Spoiler alert, it eventually led me to broadcast a webcam picture over the radio waves... but how? It sounds like video The mystery deepened when I listened to how this interference sounded like as an AM signal. It reminded me of a time I mistakenly plugged our home stereo system to the Nintendo console's video output and heard a very similar buzz. Am I possibly listening to video? Why would there be analog video transmitting on any frequency, let alone inside my home? If we plot the signal's amplitude against time we can see that there is a strong pulse exactly 60 times per second. This could be the vertical synchronisation signal of 60 Hz video. A shorter pulse (pictured above) can be seen repeating more frequently; it could be the horizontal one. Between these pulses there is what appears to be noise. Maybe, if we use the strong pulses for synchronisation and plot the amplitude of that noise as a two-dimensional picture, we could see something? And sure enough, when main screen turn on, we get signal: (I've hidden the bright synchronisation signal from this picture.) It seems to be my Raspberry Pi's desktop with weirdly distorted greyscale colours! Somehow, some part of the monitor setup is radiating it quite loudly into the aether. The frequency I'm listening to is a multiple of the monitor's pixel clock frequency. As it turns out, this vulnerability of some monitors has been known for a long time. In 1985, van Eck demonstrated how CRT monitors can be spied on from a distance[1]; and in 2004, Markus Kuhn showed that the same still works on flat-screen monitors[2]. The image is heavily distorted, but some shapes and even bigger text can be recognisable. So

## Speech to birdsong conversion

DevFeed: [Speech to birdsong conversion](<https://devfeed.tech/articles/speech-to-birdsong-conversion-21657.md>)

Original publisher: [Read original article](<https://www.windytan.com/2021/03/speech-to-birdsong-conversion.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2021-03-29T18:37:00Z

Content type: tutorial

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [Perl](<https://devfeed.tech/topics/perl.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [acoustics](<https://devfeed.tech/tags/acoustics.md>), [art](<https://devfeed.tech/tags/art.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [dreams](<https://devfeed.tech/tags/dreams.md>), [perl](<https://devfeed.tech/tags/perl.md>), [programming](<https://devfeed.tech/tags/programming.md>), [script](<https://devfeed.tech/tags/script.md>), [sound](<https://devfeed.tech/tags/sound.md>), [synthetic](<https://devfeed.tech/tags/synthetic.md>), [toolchain](<https://devfeed.tech/tags/toolchain.md>), [voice](<https://devfeed.tech/tags/voice.md>)

### AI overview

This article presents a proof-of-concept method for converting speech into synthetic blackbird song. It describes extracting speech frequency and amplitude with FM and AM demodulation, multiplying the frequency while preserving amplitude variation, and implementing the process with a Perl-SoX-csdr command-line toolchain.

### Source excerpt

I had a dream one night where a blackbird was talking in human language. When I woke up there was actually a blackbird singing outside the window. Its inflections were curiously speech-like. The dreaming mind only needed to imagine a bunch of additional harmonics to form phonemes and words. One was left wondering if speech could be transformed into a blackbird song by isolating one of the harmonics... One way to do this would be to: Find the instantaneous fundamental frequency and amplitude of the speech. For example, filter the harmonics out and use an FM demodulator to find the frequency. Then find the signal envelope amplitude by AM demodulation. Generate a new wave with similar amplitude variations but greatly multiplied in frequency. A proof-of-concept script using the Perl-SoX-csdr command-line toolchain is available (source code here). The result sounds surprisingly blackbird-like. Even the little trills are there, probably as a result of FM noise or maybe vocal fry at the end of sentences. I got the best results by speaking slowly and using exaggerated inflection. Someone hinted that the type of intonation used in certain automatic announcements is perfect for this kind of conversion. And it seems to be true! Here, a noise gate and reverb has been added to the result to improve it a little: And finally, a piece of sound art where this synthetic blackbird song is mixed with a subtle chord and a forest ambience: Think of the possibilities: A simultaneous interpreter for talking to birds. A tool for dubbing talking birds in animation or live theatre. Entertainment for cats. What other birds could be done with a voice changer like this? What about croaky birds like a duck or a crow? (I talked about this blog post a little on NPR: Here's What 'All Things Considered' Sounds Like -- In Blackbird Song)

## Plotting patterns in music with a fantasy record player

DevFeed: [Plotting patterns in music with a fantasy record player](<https://devfeed.tech/articles/plotting-patterns-in-music-with-a-fantasy-record-player-21656.md>)

Original publisher: [Read original article](<https://www.windytan.com/2020/12/plotting-patterns-in-music-with-fantasy.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2020-12-08T21:42:00Z

Content type: article

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [Script](<https://devfeed.tech/topics/script.md>), [e-ink](<https://devfeed.tech/topics/e-ink.md>), [3D](<https://devfeed.tech/topics/3d.md>)

Tags: [3d](<https://devfeed.tech/tags/3d.md>), [art](<https://devfeed.tech/tags/art.md>), [audio-media](<https://devfeed.tech/tags/audio-media.md>), [blender](<https://devfeed.tech/tags/blender.md>), [computer](<https://devfeed.tech/tags/computer.md>), [e-ink](<https://devfeed.tech/tags/e-ink.md>), [experiment](<https://devfeed.tech/tags/experiment.md>), [music](<https://devfeed.tech/tags/music.md>), [patterns](<https://devfeed.tech/tags/patterns.md>), [physics](<https://devfeed.tech/tags/physics.md>), [plotting](<https://devfeed.tech/tags/plotting.md>), [script](<https://devfeed.tech/tags/script.md>), [shower-thoughts](<https://devfeed.tech/tags/shower-thoughts.md>), [signal](<https://devfeed.tech/tags/signal.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

The article explores how a vinyl record's wavy surface pattern can reflect the tempo and beat structure of its music. It describes a script that plots FLAC amplitude into a tempo-based grid and discusses clearer patterns in quantized electronic, pop, and rock music, along with a 3D-rendered fantasy record-player experiment.

### Source excerpt

Back in April I bought a vinyl record that had a weird wavy pattern near the outer edge. I though I may have broken it somehow but couldn't even test this because I don't own a record player. *) But when I took a closer look at the pattern it seemed to somehow follow changes in the music. That doesn't look like damage at all. When I played the CD version it became clear: this was an artifact of the tempo of the electronic track (100 bpm) being a multiple of the rotational speed (33 1/3 rpm), and these were probably drum hits! My tweet sparked some interesting discussion and I've been pondering this ever since. Could we plot any song as a loop or grid based on its own tempo and see interesting patterns? (*) I know, it's a little odd. But I have a few unplayed vinyl records waiting for the day that I finally have the proper equipment. By the way, the song was Black Pink by RinneRadio from their wonderful album staRRk. I wrote a little script to do just this: to plot the amplitude of the FLAC into a grid with an adjustable width. The result looks very similar to the pattern on the vinyl surface! Note that this image is a "straightened out" version of the disc surface and it's showing three of those wavy patterns. The top edge corresponds to the outer edge of the vinyl. Later I wrote a little more ambitious plotter that shall be explained soon. Computer-conducted music gives best patterns After plotting several different songs against their own tempo like this it seemed that in addition to electronic music a lot of pop and rock has this type of a pattern, too. The most striking and clear patterns can be seen in music that makes use of drum samples in a quantized time base (aka. a drum machine): the same kick drum sample, for example, repeats four times in each bar, perfectly timed by a computer so that they align in phase. Somewhat similar patterns can be seen in live music that is played to a "click track": each band member hears a common computer-generated time signal

## Capturing PAL video with an SDR (and a few dead-ends)

DevFeed: [Capturing PAL video with an SDR (and a few dead-ends)](<https://devfeed.tech/articles/capturing-pal-video-with-an-sdr-and-a-few-dead-ends-21655.md>)

Original publisher: [Read original article](<https://www.windytan.com/2019/08/capturing-pal-video-with-sdr-and-few.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2019-08-24T18:30:00Z

Content type: tutorial

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [Hardware](<https://devfeed.tech/topics/hardware.md>), [Software](<https://devfeed.tech/topics/software.md>)

Tags: [camera](<https://devfeed.tech/tags/camera.md>), [capture](<https://devfeed.tech/tags/capture.md>), [devices](<https://devfeed.tech/tags/devices.md>), [finland](<https://devfeed.tech/tags/finland.md>), [github](<https://devfeed.tech/tags/github.md>), [hardware](<https://devfeed.tech/tags/hardware.md>), [mac](<https://devfeed.tech/tags/mac.md>), [programming](<https://devfeed.tech/tags/programming.md>), [radio](<https://devfeed.tech/tags/radio.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

A project diary explores ways to capture PAL video from a Nintendo NES on a MacBook. It discusses unsuccessful or limited capture-device options and records a CRT television and manually configured DSLR camera setup that produced usable video, with some low-frame-rate jerkiness.

### Source excerpt

I play 1980s games, mostly Super Mario Bros., on the Nintendo NES console. It would be great to be able to capture live video from the console for recording speedrun attempts. Now, how to make the 1985 NES and the 2013 MacBook play together, preferably using hardware that I already have? This project diary documents my search for the answer. Here's a spoiler - it did work: Things that I tried first A capture device Video capture devices, or capture cards, are devices specially made for this purpose. There was only one cheap (~30EUR ) capture device for composite video available locally, and I bought it, hopingly. But it wasn't readily recognized as a video device on the Mac, and there seemed to be no Mac drivers available. Having already almost capped my budget for this project I then ordered a 5EUR  EasyCap device from eBay, as there was some evidence of Mac drivers online. The EasyCap was still making its way to Finland as of this writing, so I continued to pursure other routes. PS: When the device finally arrived, it sadly seemed that the EasyCapViewer-Fushicai software only supports opening this device in NTSC mode. There's PAL support in later commits in the GitHub repo, but the project is old and can't be compiled anymore as Apple has deprecated QuickTime. Even when they do work, a downside to many cheap capture devices is that they can only capture at half the true framerate (that is, at 25 or 30 fps). CRT TV + DSLR camera The cathode-ray tube television that I use for gaming could be filmed with a digital camera. This posed interesting problems: The camera must be timed appropriately so that a full scan is captured in every frame, to prevent temporal aliasing (stripes). This is why I used a DSLR camera with a full manual mode (Canon EOS 550D in this case). For the 50 Hz PAL television screen I used a camera frame rate of 25 fps and an exposure time of 1/50 seconds (set by camera limitations). The camera will miss every other frame of the original 50 fps video, but

## Animated line drawings with OpenCV

DevFeed: [Animated line drawings with OpenCV](<https://devfeed.tech/articles/animated-line-drawings-with-opencv-21653.md>)

Original publisher: [Read original article](<https://www.windytan.com/2017/12/animated-line-drawings-with-opencv.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2017-12-30T12:15:00Z

Content type: tutorial

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [OpenCV](<https://devfeed.tech/topics/opencv.md>), [C++](<https://devfeed.tech/topics/c-plus-plus.md>), [Computer vision](<https://devfeed.tech/topics/computer-vision.md>), [CMake](<https://devfeed.tech/topics/cmake.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>)

Tags: [art](<https://devfeed.tech/tags/art.md>), [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [canvas](<https://devfeed.tech/tags/canvas.md>), [cmake](<https://devfeed.tech/tags/cmake.md>), [compiler-flags](<https://devfeed.tech/tags/compiler-flags.md>), [computer-vision](<https://devfeed.tech/tags/computer-vision.md>), [gaussian](<https://devfeed.tech/tags/gaussian.md>), [graphics](<https://devfeed.tech/tags/graphics.md>), [gui](<https://devfeed.tech/tags/gui.md>), [make](<https://devfeed.tech/tags/make.md>), [music](<https://devfeed.tech/tags/music.md>), [plotting](<https://devfeed.tech/tags/plotting.md>), [programming](<https://devfeed.tech/tags/programming.md>), [rgb](<https://devfeed.tech/tags/rgb.md>), [rotation](<https://devfeed.tech/tags/rotation.md>), [subpixel](<https://devfeed.tech/tags/subpixel.md>), [terminal](<https://devfeed.tech/tags/terminal.md>), [vector](<https://devfeed.tech/tags/vector.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

This tutorial shows how to use OpenCV and C++ to create pixel-level animated graphics and save them as video. It covers project setup with CMake, drawing rotating concentric rings on an RGB canvas, subpixel antialiasing, and a Gaussian blur glow effect.

### Source excerpt

OpenCV is a pretty versatile C++ computer vision library. Because I use it every day it has also become my go-to tool for creating simple animations at pixel level, for fun, and saving them as video files. This is not one of its core functions but happens to be possible using its GUI drawing tools. Below we'll take a look at some video art I wrote for a music project. It goes a bit further than just line drawings but the rest is pretty much just flavouring. As you'll see, creating images in OpenCV has a lot in common with how you would work with layers and filters in an image editor like GIMP or Photoshop. Setting it up It doesn't take a lot of boilerplate to initialize an OpenCV project. Here's my minimal CMakeLists.txt: cmake_minimum_required (VERSION 2.8) project (marmalade) find_package (OpenCV REQUIRED) add_executable (marmalade marmalade.cc) target_link_libraries (marmalade ${OpenCV_LIBS}) I also like to set compiler flags to enforce the C++11 standard, but this is not necessary. In the main .cc file I have: #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" Now you can build the project by just typing cmake . && make in the terminal. Basic shapes First, we'll need an empty canvas. It will be a matrix (cv::Mat) with three unsigned char channels for RGB at Full HD resolution: const cv::Size video_size(1920, 1080); cv::Mat mat_frame = cv::Mat::zeros(video_size, CV_8UC3); This will also initialize everything to zero, i.e. black. Now we can draw our graphics! I had an initial idea of an endless cascade of concentric rings each rotating at a different speed. There might be color and brightness variations as well but otherwise it would stay static the whole time. You can't see a circle's rotation around its center, so we'll add some features to them as well, maybe some kind of bars or spokes. A simplified render method for a ring would look like this: void Ring::RenderTo(cv::Mat& mat_output) const { cv::circle(mat_output, 8 * center_, 8 *

## Analyzing and Synthesizing the Otamatone's Tone

DevFeed: [Analyzing and Synthesizing the Otamatone's Tone](<https://devfeed.tech/articles/in-pursuit-of-otama-s-tone-21652.md>)

Original publisher: [Read original article](<https://www.windytan.com/2017/11/in-pursuit-of-otamas-tone.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2017-11-25T14:03:00Z

Content type: article

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [Software](<https://devfeed.tech/topics/software.md>), [MIDI](<https://devfeed.tech/topics/midi.md>), [coding](<https://devfeed.tech/topics/coding.md>)

Tags: [art](<https://devfeed.tech/tags/art.md>), [audio](<https://devfeed.tech/tags/audio.md>), [gnireenigne](<https://devfeed.tech/tags/gnireenigne.md>), [music](<https://devfeed.tech/tags/music.md>), [software](<https://devfeed.tech/tags/software.md>), [toys](<https://devfeed.tech/tags/toys.md>)

### AI overview

The article investigates how to recreate the Otamatone's sound as a programmable virtual instrument. It compares microphone recordings with simpler waveform models, then describes capturing the speaker input directly through a soldered Line Out connection. The recorded signal appears to combine a low-duty-cycle square wave with a quieter 584 Hz sinusoidal ring that fades over 30 milliseconds.

### Source excerpt

It would be fun to use the Otamatone in a musical piece. But for someone used to keyboard instruments it's not so easy to play cleanly. It has a touch-sensitive (resistive) slider that spans roughly two octaves in just 14 centimeters, which makes it very sensitive to finger placement. And in any case, I'd just like to have a programmable virtual instrument that sounds like the Otamatone. What options do we have, as hackers? Of course the slider could be replaced with a MIDI interface, so that we could use a piano keyboard to hit the correct frequencies. But what if we could synthesize a similar sound all in software? Sampling via microphone We'll have to take a look at the waveform first. The Otamatone has a piercing electronic-sounding tone to it. One is inclined to think the waveform is something quite simple, perhaps a sawtooth wave with some harmonic coloring. Such a primitive signal would be easy to synthesize. A friend lended me her Otamatone for recording purposes. Turns out the wave is nothing that simple. It's not a sawtooth wave, nor a square wave, no matter how the microphone is placed. But it sounds like one! Why could that be? I suspect this is because the combination of speaker and air interface filters out the lowest harmonics (and parts of the others as well) of square waves. But the human ear still recognizes the residual features of a more primitive kind of waveform. We have to get to the source! Sampling the input voltage to the Otamatone's speaker could reveal the original signal. Also, by recording both the speaker input and the audio recorded via microphone, we could perhaps devise a software filter to simulate the speaker and head resonance. Then our synthesizer would simplify into a simple generator and filter. But this would require opening up the instrument and soldering a couple of leads in, to make a Line Out connector. I'm not doing this to my friend's Otamatone, so I bought one of my own. I named it TÄMÄ. I soldered the left channel and

## Descrambling split-band voice inversion with deinvert

DevFeed: [Descrambling split-band voice inversion with deinvert](<https://devfeed.tech/articles/descrambling-split-band-voice-inversion-with-deinvert-21651.md>)

Original publisher: [Read original article](<https://www.windytan.com/2017/09/descrambling-split-band-voice-inversion.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2017-09-12T20:31:00Z

Content type: tutorial

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [Software](<https://devfeed.tech/topics/software.md>), [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [Tool](<https://devfeed.tech/topics/tool.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [communications](<https://devfeed.tech/tags/communications.md>), [radio](<https://devfeed.tech/tags/radio.md>), [security](<https://devfeed.tech/tags/security.md>), [software](<https://devfeed.tech/tags/software.md>), [tool](<https://devfeed.tech/tags/tool.md>), [walkie-talkie](<https://devfeed.tech/tags/walkie-talkie.md>)

### AI overview

This article explains how the deinvert software tool reverses simple voice inversion and descrambles split-band inversion. It covers the filtering and mixing stages, the role of inversion carrier and split-point frequencies, and why split-band audio requires two inversion passes.

### Source excerpt

Voice inversion is a primitive method of rendering speech unintelligible to prevent eavesdropping of radio or telephone calls. I wrote about some simple ways to reverse it in a previous post. I've since written a software tool, deinvert (on Codeberg), that does all this for us. It can also descramble a slightly more advanced scrambling method called split-band inversion. Let's see how that happens behind the scenes. Simple voice inversion Voice inversion works by inverting the audio spectrum at a set maximum frequency called the inversion carrier. Frequencies near this carrier will thus become frequencies near zero Hz, and vice versa. The resulting audio is unintelligible, though familiar sentences can easily be recognized. (HTML5 audio: Inverted speech.) Deinvert comes with 8 preset carrier frequencies that can be activated with the -p option. These correspond to a list of carrier frequencies I found in an actual scrambler's manual, dubbed "the most commonly used inversion carriers". The algorithm behind deinvert can be divided into three phases: 1) pre-filtering, 2) mixing, and 3) post-filtering. Mixing means multiplying the signal by an oscillation at the selected carrier frequency. This produces two sidebands, or mirrored copies of the signal, with the lower one frequency-inverted. Pre-filtering is necessary to prevent this lower sideband from aliasing when its highest components would go below zero Hertz. Post-filtering removes the upper sideband, leaving just the inverted audio. Both filters can be realized as low-pass FIR filters. This operation is its own inverse, like ROT13; by applying the same inversion again we get intelligible speech back. Indeed, deinvert can also be used as a scrambler by just running unscrambled audio through it. The same inversion carrier should be used in both directions. Split-band inversion The split-band scrambling method adds another carrier frequency that I call the split point. It divides the spectrum into two parts that are

## CTCSS fingerprinting: a method for transmitter identification

DevFeed: [CTCSS fingerprinting: a method for transmitter identification](<https://devfeed.tech/articles/ctcss-fingerprinting-a-method-for-transmitter-identification-21647.md>)

Original publisher: [Read original article](<https://www.windytan.com/2016/10/ctcss-fingerprinting-method-for.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2016-10-07T13:17:00Z

Content type: article

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Streams](<https://devfeed.tech/topics/streams.md>), [Library](<https://devfeed.tech/topics/library.md>), [USB](<https://devfeed.tech/topics/usb.md>)

Tags: [algorithms](<https://devfeed.tech/tags/algorithms.md>), [analysis](<https://devfeed.tech/tags/analysis.md>), [audio](<https://devfeed.tech/tags/audio.md>), [communications](<https://devfeed.tech/tags/communications.md>), [dsp](<https://devfeed.tech/tags/dsp.md>), [library](<https://devfeed.tech/tags/library.md>), [quality](<https://devfeed.tech/tags/quality.md>), [radio](<https://devfeed.tech/tags/radio.md>), [security](<https://devfeed.tech/tags/security.md>), [side-channels](<https://devfeed.tech/tags/side-channels.md>), [signal](<https://devfeed.tech/tags/signal.md>), [usb](<https://devfeed.tech/tags/usb.md>), [voice](<https://devfeed.tech/tags/voice.md>), [walkie-talkie](<https://devfeed.tech/tags/walkie-talkie.md>)

### AI overview

The article investigates whether the 88.5 Hz CTCSS tone in hand-held FM transceivers can fingerprint transmitters by revealing small differences in crystal frequencies and modulation depths. It describes analyzing walkie-talkie recordings with liquid-dsp and a phase-locked loop.

### Source excerpt

Identifying unknown radio transmitters by their signals is called radio fingerprinting. It is usually based on rise-time signatures, i.e. characteristic differences in how the transmitter frequency fluctuates at carrier power-up. Here, instead, I investigate the fingerprintability of another feature in hand-held FM transceivers, known as CTCSS or Continuous Tone-Coded Squelch System. Motivation & data I came across a long, losslessly compressed recording of some walkie-talkie chatter and wanted to know more about it, things like the number of participants and who's talking with who. I started writing a transcript - a fun pastime - but some voices sounded so similar I wondered if there was a way to tell them apart automatically. The file comprises several thousand short transmissions as FM demodulated audio lowpass filtered at 4500 Hz. Signal quality is variable; most transmissions are crisp and clear but some are buried under noise. Passages with no signal are squelched to zero. I considered several potentially fingerprintable features, many of them unrealistic: Carrier power-up; but many transmissions were missing the very beginning because of squelch Voice identification; but it would probably require pretty sophisticated algorithms (too difficult!) and longer samples Mean audio power; but it's not consistent enough, as it depends on text, tone of voice, etc. Maximum audio power; but it's too sensitive to peaks in FM noise I then noticed all transmissions had a very low tone at 88.5 Hz. It turned out to be CTCSS, an inaudible signal that enables handsets to silence unwanted transmissions on the same channel. This gave me an idea inspired by mains frequency analysis: Could this tone be measured to reveal minute differences in crystal frequencies and modulation depths? Also, knowing that these were recorded using a cheap DVB-T USB stick - would it have a stable enough oscillator to produce consistent measurements? Measurements I used the liquid-dsp library for signa

## Redsea 0.7, a lightweight RDS decoder

DevFeed: [Redsea 0.7, a lightweight RDS decoder](<https://devfeed.tech/articles/redsea-0-7-a-lightweight-rds-decoder-21648.md>)

Original publisher: [Read original article](<https://www.windytan.com/2016/10/redsea-07-lightweight-rds-decoder.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2016-10-02T19:10:00Z

Content type: article

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [C++](<https://devfeed.tech/topics/c-plus-plus.md>), [Raspberry Pi](<https://devfeed.tech/topics/raspberry-pi.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [JSON](<https://devfeed.tech/topics/json.md>), [Shell](<https://devfeed.tech/topics/shell.md>), [Terminal](<https://devfeed.tech/topics/terminal.md>), [real-time](<https://devfeed.tech/topics/real-time.md>)

Tags: [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [dongle](<https://devfeed.tech/tags/dongle.md>), [fm-radio](<https://devfeed.tech/tags/fm-radio.md>), [json](<https://devfeed.tech/tags/json.md>), [raspberry-pi](<https://devfeed.tech/tags/raspberry-pi.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [sdr](<https://devfeed.tech/tags/sdr.md>), [shell-script](<https://devfeed.tech/tags/shell-script.md>), [software](<https://devfeed.tech/tags/software.md>), [terminal](<https://devfeed.tech/tags/terminal.md>)

### AI overview

This article summarizes the current state and possible future development of redsea 0.7.6, an RDS decoder. It describes supported input streams, line-delimited JSON and hexadecimal output, and efforts to keep the C++ implementation lightweight enough for real-time use on a Raspberry Pi 1. It also notes ongoing sensitivity issues with weak signals.

### Source excerpt

I've written about redsea, my RDS decoder project, many times before. It has changed a lot lately; it even has a version number, 0.7.6 as of this writing. What follows is a summary of its current state and possible future developments. Input formats Redsea can decode several types of data streams. The command-line switches to activate these can be found in the readme. Its main use, perhaps, is to demodulate an FM multiplex carrier, as received using a cheap rtl-sdr radio dongle and demodulated using rtl_fm. The multiplex is an FM demodulated signal sampled at 171 kHz, a convenient multiple of the RDS data rate (1187.5 bps) and the subcarrier frequency (57 kHz). There's a convenience shell script that starts both redsea and the rtl_fm receiver. For example, ./rtl-rx.sh -f 88.0M would start reception on 88.0 MHz. It can also decode an "ASCII binary" stream (--input-ascii): 0001100100111001000101110000101110011000010010110010011001000000100001 1010010000011010110100010000000100000001101110000100010111000010111001 1001000010110000111111011101101011001010101110100011111101000011100010 100000011010010001011100001 Or hex-encoded RDS groups one per line (--input-hex), which is the format used by RDS Spy: 6201 01D8 E704 594C 6201 01D9 2217 4520 6201 E1C1 594C 6202 6201 01DA 1139 594B 6201 21DC 2020 2020 Output formats The default output has changed drastically. There used to be no strict format to it, rather it was just a human-readable terminal display. This sort of output format will probably return at some point, as an option. But currently redsea outputs line-delimited JSON, where every group is a JSON object on a separate line. It is quite verbose but machine readable and well-suited for post-processing: {"pi":"0x6201","group":"0A","tp":false,"prog_type":"Serious classical","ta":tru e,"is_music":true,"alt_freqs":[87.9,88.5,89.2,89.5,89.8,90.9,93.2],"ps":"YLE YK SI"} {"pi":"0x6201","group":"14A","tp":false,"prog_type":"Serious classical","other_ network":{"pi":"0x6205","

## Pea whistle steganography

DevFeed: [Pea whistle steganography](<https://devfeed.tech/articles/pea-whistle-steganography-21645.md>)

Original publisher: [Read original article](<https://www.windytan.com/2015/10/pea-whistle-steganography.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2015-10-06T22:54:00Z

Content type: article

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [Steganography](<https://devfeed.tech/topics/steganography.md>), [data](<https://devfeed.tech/topics/data.md>)

Tags: [acoustics](<https://devfeed.tech/tags/acoustics.md>), [audio](<https://devfeed.tech/tags/audio.md>), [embedding](<https://devfeed.tech/tags/embedding.md>), [measurement](<https://devfeed.tech/tags/measurement.md>), [physics](<https://devfeed.tech/tags/physics.md>), [shower-thoughts](<https://devfeed.tech/tags/shower-thoughts.md>), [signal](<https://devfeed.tech/tags/signal.md>), [silly](<https://devfeed.tech/tags/silly.md>)

### AI overview

The article investigates whether a pea whistle's frequency modulation can carry hidden data. It analyzes recordings and spectrograms, finds that the modulation could fit frequency-shift keying, and describes synthesizing a whistle-like signal with a data-dependent phase modulator and harmonics.

### Source excerpt

Would anyone notice if a referee's whistle transmitted a secret data burst? I do really follow the game. But every time the pea whistle sounds to start the jam I can't help but think of the possibility of embedding data in the frequency fluctuation. I'm sure it's alternating between two distinct frequencies. Is it really that binary? How random is the fluctuation? Could it be synthesized to contain data, and could that be read back? I found a staggeringly detailed Wikipedia article about the physics of whistles - but not a single word there about the effects of adding a pea inside, which is obviously the cause of the frequency modulation. To investigate this I bought a metallic pea whistle, the Acme Thunderer 60.5, pictured here. Recording its sound wasn't straightforward as the laptop microphone couldn't record the sound without clipping. The sound is incredibly loud indeed - I borrowed a sound pressure meter and it showed a peak level of 106.3 dB(A) at a distance of 70 cm, which translates to 103 dB at the standard 1 m distance. (For some reason I suddenly didn't want to make another measurement to get the distance right.) Later I found a microphone that was happy about the decibels and got this spectrogram of a 500-millisecond whistle. (HTML5 audio: The sound of a whistle.) The whistle seems to contain a sliding beginning phase, a long steady phase with frequency shifts, and a short sliding end phase. The "tail" after the end slide is just a room reverb and I'm not going to need it just yet. A slight amplitude modulation can be seen in the oscillogram. There's also noise on somewhat narrow bands around the harmonics. The FM content is most clearly visible in the second and third harmonics. And seems like it could very well fit FSK data! Making it sound right I'm no expert on synthesizers, so I decided to write everything from scratch (whistle-encode.pl). But I know the start phase of a sound, called the attack, is pretty important in identification. It's simple t

## Case study: low-frequency tinnitus with distortion

DevFeed: [Case study: low-frequency tinnitus with distortion](<https://devfeed.tech/articles/case-study-low-frequency-tinnitus-with-distortion-21644.md>)

Original publisher: [Read original article](<https://www.windytan.com/2015/07/case-study-tinnitus-with-distortion.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2015-07-11T07:39:00Z

Content type: article

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [Simulation](<https://devfeed.tech/topics/simulation.md>), [Compression](<https://devfeed.tech/topics/compression.md>)

Tags: [acoustics](<https://devfeed.tech/tags/acoustics.md>), [analysis](<https://devfeed.tech/tags/analysis.md>), [biohack](<https://devfeed.tech/tags/biohack.md>), [case-study](<https://devfeed.tech/tags/case-study.md>), [compression](<https://devfeed.tech/tags/compression.md>), [html5](<https://devfeed.tech/tags/html5.md>), [simulation](<https://devfeed.tech/tags/simulation.md>)

### AI overview

The author analyzes periodically appearing low-frequency tinnitus, including simulated audio and occasional frequency shifts. The article speculates that a near-sinusoidal 65 Hz tone could cause perceived speech distortion through amplitude modulation or heterodyning, while noting that the condition is poorly understood.

### Source excerpt

A periodically appearing low-frequency tinnitus is one of my least favorite signals. A doctor's visit only resulted in a WONTFIX and the audiogram shown here, which didn't really answer any questions. Also, the sound comes with some pecularities that warrant a deeper analysis. So it shall become one of my absorptions. The possible subtype (Vielsmeier et al. 2012) of tinnitus I have, related to a joint problem, is apparently even more poorly understood than the classical case (Vielsmeier et al. 2011), which of course means I'm free to make wild speculations! And maybe throw a supporting citation here and there. Here's a simulation of what it sounds like. The occasional frequency shifts are caused by head movements. (There's only low-frequency content, so headphones will be needed; otherwise it will sound like silence.) (HTML5 audio: computer-generated low-frequency tone on the right channel with some frequency shifts.) It's nothing new, save for the somewhat uncommon frequency. Sounds a bit like a car left idling outside the house. Now to the weird stuff. Real-life audio artifacts! This analysis was originally sparked by a seemingly unrelated observation. I listen to podcasts and documentaries a lot, and sometimes I've noticed the voice sounding like it had shifted up in frequency, for just a small amount. It would resemble an across-the-spectrum linear shift that breaks the harmonic relationships, much like when listening to a SSB transmission. (Simulated sound sample from a podcast below.) [HTML5 audio: excerpt from a science news podcast with distorted speech.] I always assumed this was a compression artifact of some kind. Or maybe broken headphones. But one day I also noticed it in real life, when a friend was talking to me! I had to ask her repeat, even though I had heard her well. Surely not a compression artifact. Of course I immediately associated it with the tinnitus that had been quite strong that day. But how could a pure tone alter the whole spectrum so d

## Trackers leaking bank account data

DevFeed: [Trackers leaking bank account data](<https://devfeed.tech/articles/trackers-leaking-bank-account-data-21643.md>)

Original publisher: [Read original article](<https://www.windytan.com/2015/04/trackers-and-bank-accounts.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2015-04-14T17:17:00Z

Content type: article

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [data](<https://devfeed.tech/topics/data.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [Google](<https://devfeed.tech/topics/google.md>), [Database](<https://devfeed.tech/topics/database.md>), [C](<https://devfeed.tech/topics/c.md>)

Tags: [breach](<https://devfeed.tech/tags/breach.md>), [c](<https://devfeed.tech/tags/c.md>), [customer](<https://devfeed.tech/tags/customer.md>), [data](<https://devfeed.tech/tags/data.md>), [database](<https://devfeed.tech/tags/database.md>), [encryption](<https://devfeed.tech/tags/encryption.md>), [financial](<https://devfeed.tech/tags/financial.md>), [financial-services](<https://devfeed.tech/tags/financial-services.md>), [google](<https://devfeed.tech/tags/google.md>), [http](<https://devfeed.tech/tags/http.md>), [programming](<https://devfeed.tech/tags/programming.md>), [security](<https://devfeed.tech/tags/security.md>)

### AI overview

The article investigates a Finnish online bank's use of a US-based third-party analytics script. It reports that tracking requests exposed users' IP addresses, visited URLs, transaction archive codes, and an unsalted SHA-1 hash of a bank account number that could be reversed using a short C program.

### Source excerpt

A Finnish online bank used to include a US-based third-party analytics and tracking script in all of its pages. Ospi first wrote about it (in Finnish) in February 2015, and this caused a bit of a fuss. The bank responded to users' worries by claiming that all information is collected anonymously: But is it true? As Ospi notes, a plethora of information is sent along the HTTP request for the tracker script. This includes, of course, the IP address of the user; but also the full URL the user is browsing. The bank's URLs reveal quite a bit about what the user is doing; for instance, a user planning to start a continuous savings contract will send the url continuousSavingsContractStep1.do. I logged in to the bank (using well-known demo credentials) to record one such tracking request. The URL sent to the third party tracker contains a cleartext transaction archive code that could easily be used to match a transaction between two bank accounts, since it's identical for both users. But there's also a hex string called accountId (highlighted in red). Remote Address: 80.***.***.***:443 Request URL: https://www.google-analytics.com/collect?v=1&_v=j33&a=870588619&t =pageview&_s=1&dl=https%3A%2F%2Fonline.********.fi%2Febank%2Facco unt%2FinitTransactionDetails.do%3FbackLink%3Dreset%26accountId%3D 69af881eca98b7042f18e975e00f9d49d5d5ee64%26rowNo%3D0%26type%3Dtra ns%26archivecode%3D20150220123456780002&ul=en-us&de=windows-1252& dt=Tilit%C2%A0%7C%C2%A0Verkkopankki%20%7C%20S-Pankki&sd=24-bit&sr =1440x900&vp=1440x150&je=1&fl=16.0%20r0&_u=QACAAQQBI~&jid=&cid=18 39557247.1424801770&uid=&tid=UA-37407484-1&cd1=&cd2=demo_accounts &cd3=%2Ffi%2F&z=2098846672 Request Method: GET Status Code: 200 OK It's 40 hex characters long, which is 160 bits. This happens to be the length of an SHA-1 hash. Could it really be a simple hash of the user's bank account number? Surely they would at least salt it. Let's try! The demo account's IBAN code is FI96 3939 0001 0006 03, but this doesn't give us the a

## Receiving RDS with the RTL-SDR

DevFeed: [Receiving RDS with the RTL-SDR](<https://devfeed.tech/articles/receiving-rds-with-the-rtl-sdr-21642.md>)

Original publisher: [Read original article](<https://www.windytan.com/2015/02/receiving-rds-with-rtl-sdr.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2015-02-08T19:10:00Z

Content type: tutorial

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Tool](<https://devfeed.tech/topics/tool.md>), [C](<https://devfeed.tech/topics/c.md>), [Code](<https://devfeed.tech/topics/code.md>), [Linux](<https://devfeed.tech/topics/linux.md>)

Tags: [c](<https://devfeed.tech/tags/c.md>), [code](<https://devfeed.tech/tags/code.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [development](<https://devfeed.tech/tags/development.md>), [dsp](<https://devfeed.tech/tags/dsp.md>), [fm-radio](<https://devfeed.tech/tags/fm-radio.md>), [linux](<https://devfeed.tech/tags/linux.md>), [perl](<https://devfeed.tech/tags/perl.md>), [receiver](<https://devfeed.tech/tags/receiver.md>), [signal](<https://devfeed.tech/tags/signal.md>), [software](<https://devfeed.tech/tags/software.md>), [tool](<https://devfeed.tech/tags/tool.md>)

### AI overview

This article explains redsea, a command-line RDS decoder that supports RTL-SDR receivers through rtl_fm. It describes the tool's dependencies and operation, including the C99 DSP receiver, signal synchronization, symbol decoding, and subsequent RDS group processing by redsea.pl.

### Source excerpt

redsea is a command-line RDS decoder. I originally wrote it as a script to decode RDS from demultiplexed FM stereo sound. Later I've experimented with other ways to read the bits, and the latest addition is to support the RTL-SDR television receiver via the rtl_fm tool. Redsea is on GitHub. It has minimal dependencies (perl core modules, C standard library, rtl-sdr command-line tools) and has been tested to work on OSX and Linux with good enough FM reception. All test results, ideas, and pull requests are welcome. Update 12/2016: Redsea has seen a lot of development since this post was written; see Redsea 0.7, a lightweight RDS decoder. What it says The program prints out decoded RDS groups, one group per line. Each group will contain a PI code identifying the station plus varying other data, depending on the group type. The below picture explains the types of data you'll probably most often encounter. A more verbose output can be enabled with the -l option (it contains the same information though). The -t option prefixes all groups with an ISO timestamp. How it works The DSP side of my program, named rtl_redsea, is written in C99. It's a synchronous DBPSK receiver that first bandpass filters ① the multiplex signal. A PLL locks onto the 19 kHz stereo pilot tone; its third harmonic (57 kHz) is used to regenerate the RDS subcarrier. Dividing it by 16 also gives us the 1187.5 Hz clock frequency. Phase offsets of these derived signals are adjusted separately. The local 57 kHz carrier is synchronized so that the constellation lines up on the real axis, so we can work on the real part only ②. Biphase symbols are multiplied by the square-wave clock and integrated ③ over a clock period, and then dumped into a delta decoder ④, which outputs the binary data as bit strings into stdout ⑤. Signal quality is estimated a couple of times per second by counting the number of "suspicious" integrated biphase symbols, i.e. symbols with halves of opposite signs. The symbols are being sa

## My chip collection

DevFeed: [My chip collection](<https://devfeed.tech/articles/my-chip-collection-21641.md>)

Original publisher: [Read original article](<https://www.windytan.com/2015/01/my-chip-collection.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2015-01-16T17:54:00Z

Content type: article

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [Microcontroller](<https://devfeed.tech/topics/microcontroller.md>), [Playback](<https://devfeed.tech/topics/playback.md>), [intel](<https://devfeed.tech/topics/intel.md>)

Tags: [collection](<https://devfeed.tech/tags/collection.md>), [electronics](<https://devfeed.tech/tags/electronics.md>), [encoding](<https://devfeed.tech/tags/encoding.md>), [intel](<https://devfeed.tech/tags/intel.md>), [keyboard](<https://devfeed.tech/tags/keyboard.md>), [motor](<https://devfeed.tech/tags/motor.md>), [playback](<https://devfeed.tech/tags/playback.md>), [radio](<https://devfeed.tech/tags/radio.md>), [receiver](<https://devfeed.tech/tags/receiver.md>), [voice](<https://devfeed.tech/tags/voice.md>)

### AI overview

A personal overview of a collection of salvaged vintage integrated circuits, describing chips used in radios, answering machines, telephones, motor control, audio playback, and older devices.

### Source excerpt

Old IC (integrated circuit) packages are fun and I collect them. This involves going to flea markets to look for cheap vintage electronics like telephones, answering machines, radios or toys, and then desoldering and salvaging all the ICs and other interesting parts. Selected packages from my disorganized pile of chips follow. Most are POTS-related. Sony CXA1619BS A "one-chip-wonder", this is an FM/AM radio in a small package. It takes an RF signal (from the antenna) and an IF oscillator frequency as inputs and outputs demodulated monaural audio. Sanyo LA2805 This chip does general answering machine related tasks. It has a tape preamp for recording and playback; voice detector logic; beep detection using zero-crossing comparation; power amplifier; line amplifier; and pins for interfacing with a microcontroller. Unicorn Microelectronics UM91215C The UM91215C is a tone/pulse dialer. A telephone keyboard matrix is connected to the input pins, and the chip outputs DTMF-encoded audio or pulsed digits, depending on the selected dialing mode. An external oscillator needs to be connected as well. It can do a one-key redial of the last dialed number, and it can also flash the phone line. Holtek HT9170 A DTMF receiver, reversing the operation of UM91215C above. The chip, employing filters and zero-crossing detectors, is fed an external oscillator frequency and telephone line audio, and it outputs a four-bit code corresponding to the DTMF digit present in the signal. The use of external components is minimal, but a crystal oscillator is needed in this case as well. SGS-Thomson TDA1154 A speed regulator for DC motors, this chip can keep a motor running at a very stable speed under varying load conditions. In an answering machine, it is needed to keep distortions in tape audio in the minimum. Toshiba TC8835AN This chip can store and play back a total of 16 audio recordings of 512 kilobits in size. It also contains a lot of command logic, explained in a 40-page datasheet. Type of

## Visualizing hex dumps with Unicode emoji

DevFeed: [Visualizing hex dumps with Unicode emoji](<https://devfeed.tech/articles/visualizing-hex-dumps-with-unicode-emoji-21640.md>)

Original publisher: [Read original article](<https://www.windytan.com/2014/10/visualizing-hex-bytes-with-unicode-emoji.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2014-10-29T23:52:00Z

Content type: tutorial

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [Emoji](<https://devfeed.tech/topics/emoji.md>), [Perl](<https://devfeed.tech/topics/perl.md>), [OpenSSH](<https://devfeed.tech/topics/openssh.md>), [Script](<https://devfeed.tech/topics/script.md>), [ssh](<https://devfeed.tech/topics/ssh.md>), [Terminal](<https://devfeed.tech/topics/terminal.md>)

Tags: [art](<https://devfeed.tech/tags/art.md>), [hex-value](<https://devfeed.tech/tags/hex-value.md>), [numbers](<https://devfeed.tech/tags/numbers.md>), [openssh](<https://devfeed.tech/tags/openssh.md>), [perl](<https://devfeed.tech/tags/perl.md>), [script](<https://devfeed.tech/tags/script.md>), [silly](<https://devfeed.tech/tags/silly.md>), [ssh](<https://devfeed.tech/tags/ssh.md>), [terminal](<https://devfeed.tech/tags/terminal.md>)

### AI overview

A Perl script visualizes SSH public key fingerprints and other colon-separated hexadecimal byte sequences by mapping each byte to a selected Unicode emoji. The article explains the byte-to-emoji mapping and notes that the script could be extended to other hex-formatted sources such as xxd.

### Source excerpt

Memorizing SSH public key fingerprints can be difficult; they're just long random numbers displayed in base 16. There are some terminal-friendly solutions, like OpenSSH's randomart. But because I use a Unicode terminal, I like to map the individual bytes into characters in the Miscellaneous Symbols and Pictographs block. This Perl script does just that: @emoji = qw( 🌀 🌂 🌅 🌈 🌙 🌞 🌟 🌠 🌰 🌱 🌲 🌳 🌴 🌵 🌷 🌸 🌹 🌺 🌻 🌼 🌽 🌾 🌿 🍀 🍁 🍂 🍃 🍄 🍅 🍆 🍇 🍈 🍉 🍊 🍋 🍌 🍍 🍎 🍏 🍐 🍑 🍒 🍓 🍔 🍕 🍖 🍗 🍘 🍜 🍝 🍞 🍟 🍠 🍡 🍢 🍣 🍤 🍥 🍦 🍧 🍨 🍩 🍪 🍫 🍬 🍭 🍮 🍯 🍰 🍱 🍲 🍳 🍴 🍵 🍶 🍷 🍸 🍹 🍺 🍻 🍼 🎀 🎁 🎂 🎃 🎄 🎅 🎈 🎉 🎊 🎋 🎌 🎍 🎎 🎏 🎒 🎓 🎠 🎡 🎢 🎣 🎤 🎥 🎦 🎧 🎨 🎩 🎪 🎫 🎬 🎭 🎮 🎯 🎰 🎱 🎲 🎳 🎴 🎵 🎷 🎸 🎹 🎺 🎻 🎽 🎾 🎿 🏀 🏁 🏂 🏃 🏄 🏆 🏇 🏈 🏉 🏊 🐀 🐁 🐂 🐃 🐄 🐅 🐆 🐇 🐈 🐉 🐊 🐋 🐌 🐍 🐎 🐏 🐐 🐑 🐒 🐓 🐔 🐕 🐖 🐗 🐘 🐙 🐚 🐛 🐜 🐝 🐞 🐟 🐠 🐡 🐢 🐣 🐤 🐥 🐦 🐧 🐨 🐩 🐪 🐫 🐬 🐭 🐮 🐯 🐰 🐱 🐲 🐳 🐴 🐵 🐶 🐷 🐸 🐹 🐺 🐻 🐼 🐽 🐾 👀 👂 👃 👄 👅 👆 👇 👈 👉 👊 👋 👌 👍 👎 👏 👐 👑 👒 👓 👔 👕 👖 👗 👘 👙 👚 👛 👜 👝 👞 👟 👠 👡 👢 👣 👤 👥 👦 👧 👨 👩 👪 👮 👯 👺 👻 👼 👽 👾 👿 💀 💁 💂 💃 💄 💅 ); while (<>) { if (/[a-f0-9:]+:[a-f0-9:]+/) { ($b, $m, $a) = ($`, $&, $'); print $b.join(" ", map { $emoji[$_] } map hex, split /:/, $m)." ".$a; } } What's happening here? First we create a 256-element array containing a hand-picked collection of emoji. Naturally, they're all assigned an index from 0x00 to 0xff. Then we'll loop through standard input and look for lines containing colon-separated hex bytes. Each hex value is replaced with an emoji from the array. Here's the output: The script could easily be extended to support output from other hex-formatted sources as well, such as xxd: Some additional methods for visualizing hex dumps and key fingerprints, from the comments section: PGP Strong Set Top 50 Fingerprint Art VizHash GD - a visual hash

## Mapping microwave relay links from video

DevFeed: [Mapping microwave relay links from video](<https://devfeed.tech/articles/mapping-microwave-relay-links-from-video-21639.md>)

Original publisher: [Read original article](<https://www.windytan.com/2014/07/mapping-microwave-relay-links-from-video.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2014-07-14T13:05:00Z

Content type: tutorial

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [Network](<https://devfeed.tech/topics/network.md>), [Networks](<https://devfeed.tech/topics/networks.md>), [OpenCV](<https://devfeed.tech/topics/opencv.md>)

Tags: [camera](<https://devfeed.tech/tags/camera.md>), [communications](<https://devfeed.tech/tags/communications.md>), [computer-vision](<https://devfeed.tech/tags/computer-vision.md>), [drone](<https://devfeed.tech/tags/drone.md>), [government](<https://devfeed.tech/tags/government.md>), [gps](<https://devfeed.tech/tags/gps.md>), [map](<https://devfeed.tech/tags/map.md>), [mapping](<https://devfeed.tech/tags/mapping.md>), [network](<https://devfeed.tech/tags/network.md>), [networks](<https://devfeed.tech/tags/networks.md>), [radio](<https://devfeed.tech/tags/radio.md>)

### AI overview

The article explains how to map microwave relay links between towers using position-stamped video or still-camera footage. It describes estimating antenna direction from dish geometry, using OpenCV for image processing, and estimating a linked tower's maximum possible distance from antenna height and line-of-sight constraints.

### Source excerpt

Radio networks are often at least partially based on microwave relay links. They're those little mushroom-like appendices growing out of cell towers and building-mounted base stations. Technically, they're carefully directed dish antennas linking such towers together over a line-of-sight connection. I'm collecting a little map of nearby link stations, trying to find out how they're interconnected and which network they belong to. Circling around We can find a rough direction for any link antenna by approximating a tangent for the dish shroud surface from position-stamped video footage taken while circling the tower. Optimally we would have a drone make a full circle around the tower at a constant distance and elevation to map all antennas at once; but if our DJI Phantom has run out of battery, a GPS positioned still camera at ground level will also do. The rest can be done manually, or using Hough transform and centroid calculation from OpenCV. In these pictures, the ratio of the diameters of the concentric circles is a sinusoid function of the angle between the antenna direction and the camera direction. At its maximum, we're looking straight at the beam. (The ratio won't max out at unity in this case, because we're looking at the antenna slightly from below.) We can select the frame with the maximum ratio from high-speed footage, or we can interpolate a smooth sinusoid to get an even better value. This particular antenna is pointing west-northwest with an azimuth of 290°. What about distance? Because of the line-of-sight requirement, we also know the maximum possible distance to the linked tower, using the formula 7140 x √(4 / 3 x h) where h is the height of the antenna from ground. If the beam happens to hit a previously mapped tower closer than this distance, we can assume they're connected! This antenna is communicating to a tower not further away than 48 km. Judging from the building it's standing on, it belongs to a government trunked radio network.

## Headerless train announcements

DevFeed: [Headerless train announcements](<https://devfeed.tech/articles/headerless-train-announcements-21638.md>)

Original publisher: [Read original article](<https://www.windytan.com/2014/06/headerless-train-announcements.html>)

Author: Oona Räisänen (noreply@blogger.com)

Published: 2014-06-16T18:55:00Z

Content type: article

Language: en

Sources: [Oona Räisänen](<https://devfeed.tech/sources/oona-raisanen.md>)

Topics: [data](<https://devfeed.tech/topics/data.md>), [Filesystems](<https://devfeed.tech/topics/filesystems.md>)

Tags: [audio](<https://devfeed.tech/tags/audio.md>), [audio-media](<https://devfeed.tech/tags/audio-media.md>), [data](<https://devfeed.tech/tags/data.md>), [encoding](<https://devfeed.tech/tags/encoding.md>), [files](<https://devfeed.tech/tags/files.md>), [format](<https://devfeed.tech/tags/format.md>), [gnireenigne](<https://devfeed.tech/tags/gnireenigne.md>), [iso](<https://devfeed.tech/tags/iso.md>)

### AI overview

The article examines a 67-megabyte ISO 9660 image from an older Finnish train announcement device. It documents the file and directory structure, language separation, and 1,950 stored sound files, then investigates their unidentified headerless audio encoding. Analysis suggests 4-bit adaptive differential PCM, and partial decoding produces garbled speech after frequency and spectral processing.

### Source excerpt

The Finnish state railway company just changed their automatic announcement voice, discarding old recordings from trains. It's a good time for some data dumpster diving for the old ones, don't you think? A 67-megabyte ISO 9660 image is produced that once belonged to an older-type onboard announcement device. It contains a file system of 58 directories with five-digit names, and one called "yleis" (Finnish for "general"). Each directory contains files with three-digit file names. For each number, there's 001.inf, 001.txt and 001.snd. The .inf and .txt files seem to contain parts of announcements as ISO 8859 encoded strings, such as "InterCity train" and "to Helsinki". The .snd files obviously contain the corresponding audio announcements. There's a total of 1950 sound files. Directory structure The file system seems to be structurally pointless; there's nothing apparent that differentiates all files in /00104 from files in /00105. Announcements in different languages are numerically separated, though (/001xx = Finnish, /002xx = Swedish, /003xx = English). Track numbers and time readouts are stored sequentially, but there are out-of-place announcements and test files in between. The logic connecting numbers to their meanings is probably programmed into the device for every train route. Everything can be spliced together from almost single words. But many common announcements are also recorded as whole sentences, probably to make them sound more natural. Audio format The audio files are headerless; there is no explicit information about the format, sample rate or sample size anywhere. The byte histogram and Poincaré plot of the raw data suggest a 4-bit sample size; this, along with the fact that all files start with 0x80, is indicative of an adaptive differential PCM encoding scheme. Unfortunately there are as many variations to ADPCM as there are manufacturers of encoder chips. None of the decoders known by SoX produce clean results. But with the right settings for th