EngeePhased.FMCWWaveform
Генератор сигнала с непрерывной частотной модуляцией.
| Библиотека |
|
| Блок |
Описание
Системный объект EngeePhased.FMCWWaveform представляет собой генератор сигнала с непрерывной частотной модуляцией (ЧМ).
Чтобы сгенерировать сигнал с непрерывной ЧМ, выполните следующие действия:
-
Создайте объект EngeePhased.FMCWWaveform и установите его свойства.
-
Вызовите объект с аргументами, как если бы это была функция.
Чтобы узнать подробнее о том, как работать с системными объектами, см. Системные объекты Engee.
Синтаксис
Создание
-
waveform = EngeePhased.FMCWWaveform()— создает системный объектwaveformгенератора сигнала с непрерывной ЧМ со свойствами по умолчанию. -
waveform = EngeePhased.FMCWWaveform(Name=Value)— создает системный объектwaveformгенератора сигнала с непрерывной ЧМ с указанным свойством"Name", установленным на указанное значениеValue. Вы можете указать дополнительные свойства в виде пар имя-значение в любом порядке (Name1=Value1,…,NameN=ValueN).
Аргументы
Выходные аргументы
Y —
сигнал с непрерывной ЧМ
комплексный вектор
Details
Если свойство OutputFormat имеет значение "Samples", то Y содержит NumSamples отсчетов.
Если OutputFormat имеет значение "Sweeps", то Y содержит NumSweeps импульсов. Кроме того, если SweepDirection имеет значение "Triangle", то каждый импульс составляет половину периода.
| Типы данных |
|
| Поддержка комплексных чисел |
да |
Свойства
#
SampleRate —
частота дискретизации выходного сигнала
Вещественное число
Details
Частота дискретизации сигнала в виде положительного скаляра. Единицы измерения — Гц.
Значение по умолчанию — 1e6.
#
SweepTime —
период моделирующего сигнала
Скаляр / вектор вещественных чисел
Details
Укажите период моделирующего сигнала в виде вектора из положительных вещественных чисел.
Единицы измерения — секунды.
Если для свойства SweepDirection установлено значение "Triangle", время импульса равно половине периода, поскольку каждый период состоит из подъема и спада.
Если для свойства SweepDirection установлено значение "Up" или "Down", время импульса развертки равно периоду.
Чтобы реализовать изменяющееся время импульса, укажите SweepTime как вектор. Сигнал использует последовательные элементы вектора в качестве времени импульса для последовательных периодов сигнала. Если достигнут последний элемент вектора, процесс циклически продолжается с первого элемента вектора.
Если свойства SweepTime и SweepBandwidth заданы в виде вектора, они должны иметь одинаковую длину.
Значение по умолчанию — 1e−4.
#
SweepDirection —
направление девиации частоты
Строка
Details
Укажите направление девиации частоты: "Up", "Down", "Triangle". Подробнее см. в разделе Дополнительно.
#
SweepInterval —
интервал девиации частоты
Строка
Details
Интервал девиации частоты, заданный как "Positive" (по умолчанию) или "Symmetric":
-
"Positive"— частота сигнала будет изменяться в интервале от0доB, гдеB— ширина полосы девиации в свойстве SweepBandwidth. -
"Symmetric"— частота сигнала будет изменяться в интервале от−B/2доB/2.
#
OutputFormat —
формат выходного сигнала
Строка
Details
Формат выходного сигнала в виде "Sweeps" (по умолчанию) или "Samples":
-
Если установить для этого свойства значение
"Sweeps", то выход блока состоит из нескольких импульсов. Количество импульсов — это значение свойства NumSweeps. -
Если установить для этого свойства значение
"Samples", то выход блока состоит из нескольких отсчетов. Количество отсчетов — это значение свойства NumSamples.
#
NumSamples —
число отсчетов выходного сигнала
Вещественное число
Details
Число отсчетов выходного сигнала, заданное в виде положительного целого числа.
Значение по умолчанию — 100.
Зависимости
Чтобы использовать это свойство, установите для свойства OutputFormat значение "Samples".
#
NumSweeps —
число импульсов выходного сигнала
Вещественное число
Details
Число импульсов в выходном сигнале, заданное в виде целого положительного числа.
Зависимости
Чтобы использовать это свойство, установите для свойства OutputFormat значение "Sweeps".
Значение по умолчанию — 1.
#
SweepBandwidth —
девиация частоты
Скаляр / вектор вещественных чисел
Details
Полоса пропускания сигнала с непрерывной ЧМ, заданная в виде вектора из положительных вещественных чисел. Единицы измерения — Гц.
Значение по умолчанию — 10e4.
Методы
Примеры
Формирование непрерывного сигнала с линейной частотной модуляцией
Details
Сформируем непрерывный сигнал с линейной частотной модуляцией с частотой дискретизации 1 МГц, периодом нарастания 500 мкс и девиацией частот 200 кГц.
Выполним инициализацию параметров.
fs = 1e6 # Частота дискретизации, Гц
sweep_time = 500.e-6 # период нарастания, с
sweep_band = 2e5 # Гц, ширина спектра
out_type = "Sweeps" # тип выходного сигнала "Pulses" — по импульсам
num_sweeps = 2 # количество пил
sw_dir = "Up" # направление изменения частоты
sweep_int = "Positive"; # тип пилы ["Positive","Symmetric"]
Воспользуемся EngeePhased.FMCWWaveform для создания системного объекта зондирующего сигнала fmcw.
fmcw = EngeePhased.FMCWWaveform(
SampleRate = fs,
SweepTime = sweep_time,
SweepBandwidth = sweep_band,
SweepDirection = sw_dir,
SweepInterval = sweep_int,
NumSweeps = num_sweeps
);
Выполним вызов системного объекта EngeePhased.FMCWWaveform c помощью переменной fmcw.
fmcw_sig = fmcw();
С помощью функции plot построим осциллограмму в виде IQ-компонент, модуль и фазу сигнала.
# построение IQ-компонент
t_grid = range(start = 0,step = 1/fs,length = length(fmcw_sig)) * 1e6 # сетка времени, мкс
fig1 = plot(t_grid,real.(fmcw_sig),title = "синфазная составляющая",lab="",ylab="Амплитуда")
fig2 = plot(t_grid,imag.(fmcw_sig),title = "квадратурная составляющая",lab="",xlab = "Время, мкс",ylab="Амплитуда");
plot(fig1,fig2,layout = (2,1))

# построение модуля и фазы сигнала
fig3 = plot(t_grid,abs.(fmcw_sig),title = "Модуль комплексного сигнала",lab="",ylab="Амплитуда");
fig4 = plot(t_grid,angle.(fmcw_sig)*180/pi,title = "Аргумент комплексного сигнала",lab="",xlab = "Время, мкс",ylab="Фаза, град.");
plot(fig3,fig4,layout = (2,1))

Основной характеристикой сигнала является частотный спектр и спектрограмма. Воспользуемся встроенной функцией periodogram.
# расчет спектра сигнала
spec_LFM,f = EngeePhased.Functions.periodogram(
fmcw_sig, # исходный сигнал
EngeeDSP.Functions.hamming(size(fmcw_sig)...),
8192; # длина частоты дискретизации
out = :data, # тип выхода
fs = fs, # частота дискретизации
spectrumtype = "power" # тип спектра
);
Визуализируем результат с помощью функции plot.
plot(
f * 1e-3,
EngeePhased.Functions.mag2db.(spec_LFM),
lab="", xlab = "Частота, кГц",
ylab = "Мощность, дБВт",
title = "Спектр сигнала"
)

Для вычисления спектрограммы воспользуемся встроенной функцией spectrogram.
# расчет спектрограммы
spectgm_lfm,f1,t1 = EngeeDSP.Functions.spectrogram(
real.(fmcw_sig);
nfft = 512, # длина БПФ
window = EngeeDSP.Functions.hamming(64),
noverlap = 60, # перекрытие окна
spectrumtype = "power", # тип спектра — по мощности
freqrange = "onesided", # диапазон спектра — односторонний
out = :data, # тип выхода — массив данных
fs = fs # частота дискретизации
);
Визуализируем результат расчета спектрограммы с помощью функции heatmap.
# построение спектрограммы
heatmap(
t1[:]*1e6,f1[:]*1e-3,
abs.(spectgm_lfm),color = :jet,
xlab = "Время, мкс",
ylab = "Частота Доплера, кГц",
ylims = (0,250)
)

Дополнительно
Треугольная девиация частоты
Details
В каждом периоде треугольной девиации сигнал поднимается с наклоном , а затем опускается с наклоном , где — девиация частоты, а — время импульса. Период импульса равен .
Алгоритмы
Аналитическая запись сигнала с непрерывной частотной модуляцией при классическом пилообразном законе модуляции имеет вид:
где
-
— время развертки (длительность одного периода модуляции);
-
— девиация частоты (ширина полосы перестройки);
-
— амплитуда;
-
— начальная частота.
Для генерации сигнала с непрерывной частотной модуляцией необходимо задать следующие параметры:
-
частота дискретизации фильтра ;
-
время развертки (период модуляции) ;
-
девиация частоты ;
-
форма (направление) изменения частоты (пилообразная или треугольная).
