Мой анализатор VLF-спектра в MATLAB

При приеме сверхдлинноволновых сигналов часто возникает проблема в распознавании наличия слабого сигнала, которого почти не видно на спектрограмме-"водопаде", которая строится популярной у любителей сверхдлинных волн программой Spectrum Lab.

Я решил использовать тот факт, что спектр помех случаен, что позволит, накапливая результаты наблюдений, распознать наличие слабого полезного сигнала. При этом я предполагаю, что анализируемый радиосигнал подается на вход звуковой карты компьютера с выхода предварительного усилителя.

Код скрипта для математического пакета MATLAB vlf.m я разместил в репозитарии на Github: https://github.com/Dreamy16101976/VLF_MATLAB

При запуске скрипта запрашиваются:

  • нижняя частота среза ФВЧ (по умолчанию 6000 Гц)
    сверхдлинные волны
  • интервал для анализа спектра dt (по умолчанию 20 мс)
    VLF/ELF
  • число анализируемых интервалов N (по умолчанию 5000)
    very low frequency
  • нижняя частота интервала для анализа пиков на спектрограмме
  • верхняя частота интервала для анализа пиков на спектрограмме

Скрипт непрерывно производит анализ спектра (включая поиск пиков на спектрограмме в заданном интервале) и записывает результаты в текстовые и png-файлы (с именем вида YYYYMMDDHHMMSS.xxx) с перечислением пиков частот и их уровней (в миллионных долях) и картинками спектра:
мониторинг сверхдлинных волн

Для прерывания работы скрипта необходимо нажать сочетание клавиш CTRL-C в командном окне MATLAB или окне консоли, в котором выполняется скомпилированное приложение.

Параметры скрипта

Частота оцифровки (в герцах) задается жестко заданным в скрипте параметром Fs (желательно, чтобы звуковая карта позволяла использовать частоту не ниже 96 кГц).

На сглаживание спектра и его способность распознавать сигналы малой длительности влияет параметр N (при N=5000 длительность цикла составляет около 7 минут).

На качество распознавания пиков на спектрограмме влияют параметры (жестко заданные в скрипте):
peak_width - определяет ширину пика (позволяет отсеивать "размазанные" максимумы, вызванные помехами)
peak_thres - определяет высоту пика (позволяет отсеивать шумовые пики)

Компиляция скрипта

Скрипт можно компилировать в исполняемый exe-файл посредством команды:

mcc -mv -o vlf vlf.m

Результаты работы скрипта

Я зафиксировал сигналы таких частот:

частота 21750 кГц - Rosnay, France  (HWU) N 46° 42' 47.26" E 001° 14' 42.89

частота 22100 кГц - Skelton, UK (GQD) N 54° 43' 54.48" W 002° 52' 58.92" - используется для мониторинга VLF-прохождения

Примеры работы скрипта при распознавании слабых сигналов

Спектрограмма-"водопад" с одним заметным и двумя очень слабыми сигналами:
VLF спектр
1 - сигнал с частотой  18,1 кГц
2 - сигнал с частотой  около 21,8 кГц
3 - сигнал с частотой около 23,4 кГц

Результат работы скрипта при dt = 20; N = 5000:
анализ VLF сигналов

Для повышения частотного разрешения я запустил скрипт с параметрами dt = 1000; N = 3600:
VLF-мониторинг

На представленном графике, видны две частоты (1) и (2) мощного сигнала СДВ-радиостанции - 18050 и 18150 Гц:
сверхдлинные радиоволны
Сигнал (3) соответствует весьма слабому сигналу частотой 23400 Гц.
Причина резкого пика (4) мне пока неизвестна.
На другом графике, построенном с такими же параметрами, присутствует слабый сигнал (5) частотой 21750 Гц:
VLF
СДВ
Затем я развернул рамку антенны на 90 градусов и опять сделал анализ спектра:
...

Для проверки я сделал анализ спектра при отключенном питании предварительного усилителя:
сверхдлинные волны
Как видно, на нем присутвует пик на 24000 Гц, но гораздо меньший по величине.
 

Яндекс.Метрика