├── requirements.txt ├── LICENSE ├── rtl_sdr_freq_scanner.py └── README.md /requirements.txt: -------------------------------------------------------------------------------- 1 | numpy 2 | matplotlib.pyplot 3 | rtlsdr 4 | tqdm 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Tim 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /rtl_sdr_freq_scanner.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import matplotlib.pyplot as plt 3 | from rtlsdr import RtlSdr 4 | from tqdm import tqdm 5 | 6 | def display_menu(): 7 | print(""" 8 | ################################################ 9 | # # 10 | # RTL SDR SCANNER # 11 | # # 12 | # by Tim Digga # 13 | # GitHub: https://github.com/timdigga # 14 | # # 15 | ################################################ 16 | """) 17 | 18 | def scan_spectrum(): 19 | display_menu() 20 | start_freq_mhz = input("Enter start frequency in MHz (default 24): ") or 24 21 | stop_freq_mhz = input("Enter stop frequency in MHz (default 1766): ") or 1766 22 | step_size_khz = input("Enter step size in kHz (default 200): ") or 200 23 | start_freq_mhz = float(start_freq_mhz) 24 | stop_freq_mhz = float(stop_freq_mhz) 25 | step_size_khz = float(step_size_khz) 26 | sdr = RtlSdr() 27 | sdr.sample_rate = 2.4e6 # Hz 28 | sdr.gain = 'auto' 29 | start_freq = int(start_freq_mhz * 1e6) 30 | stop_freq = int(stop_freq_mhz * 1e6) 31 | step_size = int(step_size_khz * 1e3) 32 | frequencies = np.arange(start_freq, stop_freq, step_size) 33 | power_levels = [] 34 | print(f"Scanning from {start_freq_mhz} MHz to {stop_freq_mhz} MHz...") 35 | for freq in tqdm(frequencies, desc="Scanning frequencies"): 36 | sdr.center_freq = freq 37 | samples = sdr.read_samples(1024 * 128) 38 | spectrum = np.fft.fftshift(np.abs(np.fft.fft(samples))**2) 39 | power = 10 * np.log10(np.mean(spectrum)) 40 | power_levels.append(power) 41 | sdr.close() 42 | threshold = np.mean(power_levels) + np.std(power_levels) 43 | high_power_indices = np.where(np.array(power_levels) > threshold)[0] 44 | high_power_freqs = frequencies[high_power_indices] / 1e6 45 | print("High-power frequencies detected at (MHz):", high_power_freqs) 46 | plt.figure(figsize=(10, 6)) 47 | plt.plot(frequencies / 1e6, power_levels, color='blue') 48 | plt.xlabel('Frequency (MHz)') 49 | plt.ylabel('Power (dB)') 50 | plt.title('RTL-SDR Frequency Scan') 51 | plt.grid(True) 52 | plt.show() 53 | 54 | 55 | if __name__ == "__main__": 56 | scan_spectrum() 57 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🎛️ RTL-SDR Scanner 📡 2 | 3 | A powerful and user-friendly software tool for scanning radio frequencies using RTL-SDR devices. This scanner covers a wide frequency range with customizable settings, real-time signal analysis, and an intuitive interface. 4 | 5 | ## 🚀 Features 6 | - 📶 **Wide Frequency Coverage**: Scan from 24 MHz to 1766 MHz. 7 | - ⚙️ **Customizable Settings**: Set start/stop frequencies and step sizes with optional default values. 8 | - 📊 **Real-Time Visualization**: Analyze and display signal strengths using a dynamic power spectrum plot. 9 | - ⏱️ **Efficient Scanning**: Utilizes a progress bar for better tracking. 10 | - 🖥️ **Interactive Menu**: Welcomes users with a stylish interface including author credit and GitHub link. 11 | 12 | ## 🛠️ Installation 13 | 14 | ### Prerequisites 15 | Ensure you have Python 3 installed along with the following libraries: 16 | - `numpy` 17 | - `matplotlib` 18 | - `rtlsdr` 19 | - `tqdm` 20 | 21 | ### Installation Steps 22 | 23 | 1. **Clone the repository:** 24 | ```bash 25 | git clone https://github.com/timdigga/rtlsdrscanner 26 | cd rtlsdrscanner 27 | ``` 28 | 29 | 2. **Install dependencies:** 30 | ```bash 31 | pip install -r requirements.txt 32 | ``` 33 | 34 | 3. **Run the scanner:** 35 | ```bash 36 | python rtl_sdr_freq_scanner.py 37 | ``` 38 | 39 | 4. **Follow the on-screen prompts** to start scanning. 40 | 41 | ## 🔍 Usage 42 | 43 | The program will prompt you to enter the start and stop frequencies, as well as the step size. Press **Enter** to use the default values. 44 | 45 | ## 📡 Example 46 | 47 | ``` 48 | ################################################ 49 | # # 50 | # RTL SDR SCANNER # 51 | # # 52 | # by Tim Digga # 53 | # GitHub: https://github.com/timdigga # 54 | # # 55 | ################################################ 56 | 57 | Enter start frequency in MHz (default 24): 58 | Enter stop frequency in MHz (default 1766): 59 | Enter step size in kHz (default 200): 60 | 61 | Scanning from 24.0 MHz to 1766.0 MHz... 62 | Scanning frequencies: 100%|████████████████████| 1000/1000 [00:30<00:00, 33.33 freq/s] 63 | High-power frequencies detected at (MHz): [88.5, 101.7, 145.0] 64 | ``` 65 | 66 | ## 🤝 Contributing 67 | 68 | Feel free to submit issues or fork the repository to contribute improvements. 69 | 70 | ## 🤓 About the Author 71 | Developed with passion by **Tim Digga**. 72 | GitHub: [timdigga](https://github.com/timdigga) 73 | 74 | ## 📜 License 75 | MIT License. 76 | --------------------------------------------------------------------------------