
Set your radio to 148.500 MHz, select FM, USB, or CW mode, and set the squelch to 0 or 1. Then, extend your radio's antenna toward the monitor's HDMI port, and congratulations—you can now transmit in Morse code directly from your monitor!
Author: TA1EEI (Efe Işık)
Version: 1.2
License: MIT (Open Source / Educational & Experimental)
The VHF Monitor RF Transmitter is a browser-based experimental tool that converts an ordinary computer display into a short-range VHF Morse code transmitter.
Remarkably, this project operates without any radio hardware, RF transmitters, SDRs, or external modems. By controlling the precise pixel output on your screen using an optimized HTML5 Canvas render engine, it manipulates the display's internal video processing unit (GPU/Scaler) and transmission interfaces (HDMI/DisplayPort) to radiate modulated electromagnetic signals directly through side-channel emissions (TEMPEST).
Modern video pipelines are not purely optical; they are high-speed digital electronics operating at high frequencies. This project exploits Unintentional Electromagnetic Radiation (EMI) to broadcast readable RF signals.
To display a stable image, a graphics card continuously pushes video data to a monitor frame-by-frame, line-by-line. The base clock frequency governing this pixel stream is known as the Pixel Clock Frequency ($f_{\text{pixel}}$).
The Pixel Clock is calculated based on total frame dimensions (including active display area plus horizontal and vertical blanking intervals) multiplied by the screen refresh rate:
$$f_{\text{pixel}} = H_{\text{total}} \times V_{\text{total}} \times f_{\text{refresh}}$$
Where:
Example Calculation (Standard 1080p @ 60Hz):
When the screen displays a plain black or static background, the signal current across the video cable remains relatively uniform.
However, when the application renders an alternating $1 \times 1$ pixel pattern (alternating black #000000 and white #FFFFFF pixels side by side), every adjacent clock cycle forces the display interface serializer (TMDS or FRL in HDMI; Main Link Lanes in DisplayPort) to toggle its voltage state rapidly.
This maximum state toggling induces a strong electromagnetic field at the exact pixel clock frequency (148.500 MHz), broadcasting an RF carrier wave into space.
To encode readable data into this electromagnetic radiation:
#000000). Clock transitions drop to minimal baseline noise, collapsing the radiated RF output.By timing these pattern toggles to match standardized Morse Code element lengths (Dots = 1 unit, Dashes = 3 units), a nearby radio receiver picks up an audible CW/AM tone.
Different monitor resolutions and refresh rates produce distinct fundamental frequencies. Below are calculated target frequencies commonly generated by display timings:
Note on Harmonics: In addition to the fundamental pixel clock frequency, strong secondary and tertiary harmonics can also be detected across higher bands ($2 \times f_{\text{pixel}}$, $3 \times f_{\text{pixel}}$).
navigator.language on startup and localizes the UI automatically into English, Turkish, French, German, Spanish, or Chinese.performance.now()) to dynamically predict the active transmission frequency.To listen to transmissions using a handheld radio (e.g., Quansheng, Baofeng, Yaesu, Icom) or an SDR (RTL-SDR, HackRF, Airspy):
148.500 MHz).If you use this project in your research, academic work, or technical experiments, please cite it as follows:
@software{isik2026vhf,
author = {Isik, Efe},
title = {VHF Monitor RF Transmitter: Browser-Based TEMPEST / EMI Side-Channel Morse Generator},
year = {2026},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{[https://github.com/TA1EEI/vhf-morse-transmitter-monitor](https://github.com/TA1EEI/vhf-morse-transmitter-monitor)}},
license = {MIT}
}
| Resolution | Refresh Rate (Hz) | Total Timings ($H_{\text{total}} \times V_{\text{total}}$) | Fundamental Target Frequency |
|---|
| 1920 x 1080 | 60 Hz | $2200 \times 1125$ | 148.500 MHz (VHF Amateur 2m Band) |
| 1920 x 1080 | 144 Hz | $2200 \times 1125$ | 356.400 MHz (UHF Military / Aviation) |
| 2560 x 1440 | 60 Hz | $2720 \times 1481$ | 241.500 MHz (VHF High) |
| 1280 x 720 | 60 Hz | $1650 \times 750$ | 74.250 MHz (VHF Low / 4m Band) |