Документация Engee

EngeePhased.FMCWWaveform

Генератор сигнала с непрерывной частотной модуляцией.

Библиотека

EngeePhased

Блок

Непрерывная ЧМ

Описание

Системный объект EngeePhased.FMCWWaveform представляет собой генератор сигнала с непрерывной частотной модуляцией (ЧМ).

Чтобы сгенерировать сигнал с непрерывной ЧМ, выполните следующие действия:

  1. Создайте объект EngeePhased.FMCWWaveform и установите его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Чтобы узнать подробнее о том, как работать с системными объектами, см. Системные объекты Engee.

Синтаксис

Создание

  • waveform = EngeePhased.FMCWWaveform() — создает системный объект waveform генератора сигнала с непрерывной ЧМ со свойствами по умолчанию.

  • waveform = EngeePhased.FMCWWaveform(Name=Value) — создает системный объект waveform генератора сигнала с непрерывной ЧМ с указанным свойством "Name", установленным на указанное значение Value. Вы можете указать дополнительные свойства в виде пар имя-значение в любом порядке (Name1=Value1,…​,NameN=ValueN).

Использование

Y = waveform() — возвращает сигнал Y с непрерывной ЧМ.

Аргументы

Выходные аргументы

Y — сигнал с непрерывной ЧМ
комплексный вектор

Details

Если свойство OutputFormat имеет значение "Samples", то Y содержит NumSamples отсчетов.

Если OutputFormat имеет значение "Sweeps", то Y содержит NumSweeps импульсов. Кроме того, если SweepDirection имеет значение "Triangle", то каждый импульс составляет половину периода.

Типы данных

Float64

Поддержка комплексных чисел

да

Свойства

# 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.

Методы

Общие для всех системных объектов

step!

Запустить алгоритм работы системного объекта

release!

Разрешить изменение значения свойства системного объекта

reset!

Сброс внутренних состояний системного объекта

Специальные для системных объектов генераторов сигнала

bandwidth

Ширина полосы пропускания сигнала

getMatchedFilter

Коэффициенты согласованного фильтра, полученные из сигнала

plot

Построение графика импульсного сигнала

Примеры

Формирование непрерывного сигнала с линейной частотной модуляцией

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))

object phased fmcw waveform 2 ru

# построение модуля и фазы сигнала
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))

object phased fmcw waveform 3 ru

Основной характеристикой сигнала является частотный спектр и спектрограмма. Воспользуемся встроенной функцией 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 = "Спектр сигнала"
)

object phased fmcw waveform 4 ru

Для вычисления спектрограммы воспользуемся встроенной функцией 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)
)

object phased fmcw waveform 5 ru

Дополнительно

Треугольная девиация частоты

Details

В каждом периоде треугольной девиации сигнал поднимается с наклоном , а затем опускается с наклоном , где — девиация частоты, а — время импульса. Период импульса равен .

so phased 1 ru

Положительное пилообразное направление девиации частоты

Details

В каждом периоде положительного пилообразного направления девиации частоты сигнал изменяется с наклоном , где — девиация частоты, а — время импульса.

so phased 2 ru

Отрицательное пилообразное направление девиации частоты

Details

В каждом периоде отрицательного пилообразного направления девиации частоты сигнал изменяется с наклоном , где — девиация частоты, а — время импульса.

so phased 3 ru

Алгоритмы

Аналитическая запись сигнала с непрерывной частотной модуляцией при классическом пилообразном законе модуляции имеет вид:

где

  •  — время развертки (длительность одного периода модуляции);

  •  — девиация частоты (ширина полосы перестройки);

  •  — амплитуда;

  •  — начальная частота.

Для генерации сигнала с непрерывной частотной модуляцией необходимо задать следующие параметры:

  • частота дискретизации фильтра ;

  • время развертки (период модуляции) ;

  • девиация частоты ;

  • форма (направление) изменения частоты (пилообразная или треугольная).

object phased fmcw waveform 1 ru

Литература

  1. Issakov, Vadim. Microwave Circuits for 24 GHz Automotive Radar in Silicon-based Technologies. Berlin: Springer, 2010.

  2. Skolnik, M.I. Introduction to Radar Systems. New York: McGraw-Hill, 1980.