Сообщество Engee

EngeeDSP: спектрограмма комплексного сигнала

Автор
avatar-ussmoussmo
Notebook

Построение спектрограммы нестационарного комплексного сигнала при помощи блока БПФ

Рассмотрим классическую задачу отображения спектра нестационарного во времени сигнала. В качестве подобного сигнала можно использовать сигнал с линейной частотной модуляцией (ЛЧМ). Например такой, когда частота колебаний за время моделирования линейно возрастает. Стандартный подход вычисления быстрого преобразования Фурье (БПФ) всего сигнала за время наблюдения не позволит нам оценить динамику изменения, а значит надо применять метод STFT (Short Time Fourier Transform) для построения спектрограммы, или же наблюдать промежуточные "кадры" спектра сигнала в динамике.

И то и другое легко осуществить в среде моделирования Engee при помощи функционала библиотеки обработки сигналов EngeeDSP.

Состав модели

Динамическая модель собрана в файле complex_fft.engee. Мы можем открыть её программно:

In [ ]:
engee.open("complex_fft.engee")

Врехний уровень модели выглядит подобным образом:

complex_fft--1770891051205.png

В качестве источника сигнала используется подсистема Complex_LFM, в которой собирается комплексный ЛЧМ-сигнал:

complex_fft--1770891180980.png

Далее, формируемый комплексный сигнал поступает на фильтр нижних частот (ФНЧ), который был сгенерирован с применением интерактивного приложения Engee "Редактор цифровых фильтров". Характеристики и спецификация фильтра в приложении представлена на рисунке ниже:

fda.png

Сгенерированная структура фильтра находится в подсистеме IIR_LPF:

complex_fft--1770891207229.png

Последовательные комплексные отсчёты после выхода фильтра поступают на блок Buffer, выход которого представляет собой вектор из 1024 элементов. К вектору применяется оконная функция Хэмминга, и далее он идёт на вход блока FFT. Последующая цепочка блоков выделяет первую половину выходного комплексного вектора отсчётов БПФ, вычисялет модуль значений, компенсирует энергетику и представляет промежуточный амплитудный спектр в единицах dBm.

Результаты прогона сохраняются в переменную workspace_out.

Интерактивный анализ результатов симуляции

Модель настроена таким образом, что одна секунда симуляции соответствует одной секунде "реального" времени (настенных часов). Таким образом, после старта модели в окне "Визуализация сигналов" можно наблюдать различные выходы в динамике, как во временной, так и в частотной областях.

Вывод окна "Визуализация сигналов"

Осциллограмма комплексного ЛЧМ при прохождении через ФНЧ выглядит так:

01_lpf.png

Выход модуля усечённого вектора выхода БПФ можно наблюдать при помощи типа отображения "Кадр во временной области":

02_fft.png

Встроенный анализатор спектра среды моделирования ("Сигналы в частотной области") будет отображать изменения спектра ЛЧМ сигнала до и после фильтра в динамике:

gif1.gif

А логируемый выход "пользовательской" цепи обработки также можно визуализировать в динамике при помощи опции "Построение массива":

gif2.gif

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

Для задачи анализа в скрипте мы записывали выход цепи блоком В рабочую область. Это позволяет нам представить кадры выхода преобразования в виде матрицы. Модель можно запустить программно:

In [ ]:
engee.run("complex_fft")

И далее в цикле мы выделим численные вектора результатов обработки (отдельные "кадры" спектра для формирования спектрограммы) в переменную outmatrix:

In [ ]:
nframes = Int(ceil(stoptime*fs/nfft));
half_nfft = Int(round(nfft/2));
timeline = zeros(nframes);
outmatrix = zeros(half_nfft,nframes);
for k = 1:nframes
    tempvar = workspace_out[k];
    timeline[k] = tempvar[1];
    outmatrix[:,k] = tempvar[2];
end
freqvec = LinRange(0,fs/2,half_nfft);

Построим спектрограмму в виде трёхмерной поверхности:

In [ ]:
surface(timeline, freqvec, outmatrix, c = :rainbow)
Out[0]:

Заключение

Мы познакомились с функционалом блоков и интерактивных инструментов библиотеки EngeeDSP для построения динамической модели, обрабатывающей нестационарный комплексный сигнал. Также мы рассмотрели два способа визуализации частотного состава подобных сигналов - в динамике и при помощи спектрограммы.