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

EngeePhased.PhaseCodedWaveform

Генератор сигнала с фазокодовой модуляцией.

Библиотека

EngeePhased

Блок

Phase-Coded Waveform

Описание

Чтобы сгенерировать сигнал с фазокодовой модуляцией (ФКМ), выполните следующие действия:

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

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

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

Синтаксис

Создание

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

  • waveform = EngeePhased.PhaseCodedWaveform(Name=Value) — создает системный объект waveform генератора сигнала с ФКМ с заданными свойствами в виде пары Name=Value, где Name — имя свойства, а Value — соответствующее значение. Можно указать несколько пар «имя-значение», порядок пар не имеет значения. Неуказанные свойства сохраняют свои значения по умолчанию.

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

  • Y = waveform() — возвращает отсчеты импульсов с ФКМ в виде вектора-столбца Y.

  • Y = waveform(prfidx) — использует индекс prfidx для выбора частоты повторения импульсов (PRF) из предопределенного вектора значений, заданного свойством PRF. Этот синтаксис применяется, если для свойства PRFOutputPort установлено значение true.

  • Y = waveform(freqoffset) — использует freqoffset для генерации сигнала со смещением частоты. Используйте этот синтаксис в случаях, когда необходимо динамически обновлять частоту передаваемых импульсов. Этот синтаксис применяется, если для свойства FrequencyOffsetSource установлено значение "Input port".

  • Y,prf = waveform(___) — также возвращает текущую частоту повторения импульсов prf. Чтобы использовать этот синтаксис, установите для свойства PRFOutputPort значение true, а для свойства OutputFormat значение "Pulses".

  • Y,coeff = waveform(___) — также возвращает коэффициенты согласованного фильтра coeff для текущего импульса. Чтобы использовать этот синтаксис, установите для свойства CoefficientsOutputPort значение true.

Вы можете комбинировать необязательные входные и выходные аргументы, если заданы свойства, которые их включают. Необязательные входы и выходы должны быть перечислены в том же порядке, что и свойства, которые их включают. Например, Y,prf,coeff = waveform(prfidx,freqoffset).

Аргументы

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

prfidx — индекс частоты повторения импульсов
целое положительное число

Details

Индекс частоты повторения импульсов (PRF), заданный как положительное целое число. Индекс идентифицирует записи в свойстве PRF. Используйте этот аргумент в случаях, когда импульс передачи должен выбираться динамически. В таких ситуациях свойство PRF содержит список заранее определенных вариантов выбора PRF. Во время моделирования на основе входных данных prfidx один из PRF выбирается в качестве PRF для следующей передачи.

Зависимости

Чтобы использовать этот аргумент, установите для свойства PRFOutputPort значение true.

freqoffset — смещение частоты, Гц
скаляр

Details

Смещение частоты, заданное как скаляр. Смещение позволяет генерировать сигнал со смещением частоты. Используйте этот аргумент в случаях, когда необходимо динамически обновлять частоту передаваемого импульса.

Зависимости

Чтобы использовать этот аргумент, установите для свойства FrequencyOffsetSource значение "Input port".

Типы данных

Float64

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

Y — импульсный сигнал
вектор-столбец

Details

Выходной сигнал, возвращаемый как комплексный вектор-столбец.

Типы данных

Float64

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

да

prf — частота повторения импульсов, Гц
скаляр

Details

Текущая частота повторения импульсов, возвращаемая как скаляр.

Зависимости

Чтобы использовать этот аргумент, установите для свойства PRFOutputPort значение true, а для свойства OutputFormat значение "Pulses".

Типы данных

Float64

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

да

coeff — коэффициенты согласованного фильтра
вектор

Details

Коэффициенты согласованного фильтра, возвращаемые как комплексный вектор , где — наибольшая ненулевая ширина импульса.

Зависимости

Чтобы использовать этот аргумент, установите для свойства CoefficientsOutputPort значение true.

Типы данных

Float64

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

да

Свойства

# Code — тип фазового кода
String

Details

Укажите тип фазового кода, используемого при фазовой модуляции. Допустимые значения:

  • "Frank" (по умолчанию);

  • "P1";

  • "P2";

  • "Px";

  • "Zadoff-Chu";

  • "P3";

  • "P4";

  • "Barker".

# OutputFormat — формат выходного сигнала
String

Details

Формат выходного сигнала, заданный как "Pulses" (по умолчанию) или "Samples":

  • Если установить для этого свойства значение "Pulses", то выход блока состоит из нескольких импульсов. Количество импульсов — это значение свойства NumPulses.

  • Если установить для этого свойства значение "Samples", то выход блока состоит из нескольких отсчетов. Количество отсчетов — это значение свойства NumSamples.

# NumSamples — число отсчетов выходного сигнала
Real number

Details

Число отсчетов выходного сигнала, заданное как положительное целое число.

Значение по умолчанию — 100.

Зависимости

Чтобы использовать это свойство, установите для свойства OutputFormat значение "Samples".

# FrequencyOffsetSource — источник установки смещения частоты
String

Details

Источник установки смещения частоты, заданный как "Property" (по умолчанию) или "Input port":

  • Если установлено значение "Property", то смещение определяется значением свойства FrequencyOffset.

  • Если установлено значение "Input port", то смещение определяется значением аргумента FreqOffset.

# NumPulses — число импульсов выходного сигнала
Real number

Details

Число импульсов выходного сигнала, заданное как положительное целое число.

Значение по умолчанию — 1.

Зависимости

Чтобы использовать это свойство, установите для свойства OutputFormat значение "Pulses".

# PRF — частота повторения импульсов
Real number

Details

Частота повторения импульсов (PRF), заданная как скаляр или вектор-строка. Единицы измерения — Гц. Период следования импульсов (PRI) является обратной величиной значения (PRF) частоты повторения импульсов. Значение PRF должно удовлетворять следующим ограничениям:

  • Произведение PRF и длительности импульса должно быть меньше или равно единице. Это условие требует, чтобы ширина импульса была меньше одного PRI. Для сигнала с фазовым кодированием длительность импульса равна произведению длительности одного чипа на количество чипов.

  • Отношение SampleRate к PRF должно быть целым числом. Это условие требует, чтобы количество отсчетов в одном PRI было целым числом.

Значение PRF можно установить, используя только значения свойства PRF или значения свойства в сочетании с входным аргументом prfidx.

  • Если PRFOutputPort имеет значение false, PRF устанавливается только с помощью свойств PRF. Вы можете:

    • Реализовать постоянную PRF, указав свойство PRF как положительное вещественное скалярное значение.

    • Реализовать дискретную PRF, указав свойство PRF как вектор-строку с положительными вещественными элементами. Каждый вызов объекта использует последовательные элементы этого вектора в качестве PRF. Как только объект достигает последнего элемента вектора, он циклически продолжает процесс с первым элементом вектора.

  • Когда PRFOutputPort имеет значение true, вы можете установить значение PRF, используя свойство PRF в сочетании с входным аргументом prfidx. Вы реализуете выбираемую PRF, указав свойство PRF как вектор-строку с положительными вещественными элементами. При выполнении объекта выбор PRF осуществляется с использованием индекса, указанного во входном аргументе prfidx, для индексации вектора PRF.

Во всех случаях количество выходных отсчетов фиксировано, если установить для свойства OutputFormat значение "Samples". При использовании изменяющейся частоты повторения импульсов (PRF) и установке для свойства OutputFormat значения "Pulses" количество отсчетов может меняться.

Значение по умолчанию — 10e3.

# SequenceIndex — индекс последовательности Задова — Чу
Integer

Details

Индекс последовательности, используемый в коде "Zadoff-Chu", заданный как целое положительное число.

Значение свойства SequenceIndex должно быть взаимно простым со значением свойства NumChips.

Зависимости

Чтобы использовать это свойство, установите для свойства Code значение "Zadoff-Chu".

# ChipWidth — длительность каждого чипа
Real number

Details

Длительность каждого чипа в сигнале с ФКМ, заданная как положительный скаляр. Для данного сигнала длительность импульса равна произведению длительности чипа и количества чипов.

Значение этого свойства должно удовлетворять следующим ограничениям:

  • ChipWidth меньше или равно (1/(NumChips * PRF)) — общая длительность всех чипов не может превышать длительность импульса.

  • SampleRate * ChipWidth является целым числом — количество выборок в чипе должно быть целым числом.

Единицы измерения — секунды.

# CoefficientsOutputPort — включить вывод коэффициентов согласованного фильтра
Logical

Details

Включить или выключить вывод коэффициентов согласованного фильтра, указав значение false (по умолчанию) или true. Установите для этого свойства значение true, чтобы включить вывод коэффициентов согласованного фильтра для формы сигнала, использованной во время моделирования.

# SampleRate — частота дискретизации
Real number

Details

Частота дискретизации сигнала, заданная как положительный скаляр. Значение этого свойства должно удовлетворять следующим ограничениям:

  • SampleRate/PRF является скаляром или вектором, содержащим только целые числа — количество отсчетов в импульсе должно быть целым числом.

  • SampleRate * ChipWidth является целым числом — количество отсчетов в чипе должно быть целым числом.

Единицы измерения — Гц.

Значение по умолчанию — 1e6.

# NumChips — длина кода
Real number

Details

Количество чипов на импульс в сигнале с ФКМ, заданное как целое положительное число. Значение этого свойства должно быть меньше или равно (1/(NumChips * PRF)) — общая длительность всех чипов не может превышать интервал повторения импульсов.

Значение по умолчанию — 4.

В таблице приведены дополнительные ограничения на количество чипов для различных типов кода.

NumChips

"Frank", "P1", "Px"

Квадрат простого числа

"P2"

Четное число, которое является квадратом простого числа

"Barker"

2, 3, 4, 5, 7, 11 или 13

# PRFOutputPort — включить вывод PRF
Logical

Details

Если установить для этого свойства значение true, вы можете передать аргумент индекса объекту для выбора предопределенного значения из вектора значений свойства PRF. Если установить для этого свойства значение false (по умолчанию), объект будет использовать свойство PRF для определения последовательности PRF, используемой в моделировании.

Зависимости

Чтобы использовать это свойство, установите для свойства OutputFormat значение "Pulses".

# FrequencyOffset — смещение частоты
Real number

Details

Смещение частоты, заданное как скаляр. Единицы измерения — Гц.

Значение по умолчанию — 0.

Зависимости

Чтобы использовать это свойство, установите для свойства FrequencyOffsetSource значение "Property".

Методы

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

step!

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

release!

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

reset!

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

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

bandwidth

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

getMatchedFilter

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

plot

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

Примеры

Формирование ФКМ-сигнала

Details

Сформируем ФКМ-сигнал с кодом Баркера длиной 13, длительностью чипа 20 мкс, частотой следования импульсов 20 кГц и центральной частотой 50 кГц.

Выполним инициализацию параметров.

fs = 1e6 # Частота дискретизации, Гц
type_code = "Barker" # тип кода ["Frank","Barker","Zadoff-Chu"]
ch_w = 2.0e-5 # длительность чипа
n_chip = 13 # количество чипов в импульсе
prf = 2000 # частота следования импульсов (ЧСИ)

freq_off_type = "Property" # способ задания параметров "Property" — в параметрах СО
freq_off = 50_000 # значение начальной частоты спектра, Гц
out_type = "Pulses" # тип выходного сигнала "Pulses" — по импульсам
num_pulse = 1; # количество импульсов

Воспользуемся EngeePhased.PhaseCodedWaveform для создания системного объекта зондирующего сигнала PCM_Waveform.

PCM_Waveform = EngeePhased.PhaseCodedWaveform(
    SampleRate = fs, # частота дискретизации
    Code = type_code, # тип кода
    ChipWidth = ch_w, # длительность чипа
    NumChips = n_chip, # количество чипов
    PRF = prf, # частота следования чипа
    FrequencyOffsetSource = freq_off_type,
    FrequencyOffset = freq_off,
    OutputFormat = out_type,
    NumPulses = num_pulse,
);

Выполним вызов системного объекта EngeePhased.PhaseCodedWaveform c помощью переменной pcm_signal.

pcm_signal = PCM_Waveform();

С помощью функции plot построим осциллограмму в виде IQ-компонент, модуль и фазу сигнала.

# построение IQ-компонент
t_grid = range(start = 0,step = 1/fs,length = length(pcm_signal)) * 1e6 # сетка времени, мкс
fig1 = plot(t_grid,real.(pcm_signal),title = "синфазная составляющая",lab="",ylab="Амплитуда")
fig2 = plot(t_grid,imag.(pcm_signal),title = "квадратурная составляющая",lab="",xlab = "Время, мкс",ylab="Амплитуда");

plot(fig1,fig2,layout = (2,1))

object phased phase coded waveform 2 ru

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

plot(fig3,fig4,layout = (2,1))

object phased phase coded waveform 3 ru

Основной характеристикой сигнала является частотный спектр и спектрограмма. Воспользуемся встроенной функцией periodogram.

# расчет спектра сигнала
spec_PCM,f = EngeePhased.Functions.periodogram(
    pcm_signal, # исходный сигнал
    EngeeDSP.Functions.hamming(size(pcm_signal)...),
    8192; # длина частоты дискретизации
    out = :data, # тип выхода
    fs = fs, # частота дискретизации
    spectrumtype = "power" # тип спектра
);

Визуализируем результат с помощью функции plot.

plot(
    f * 1e-3,
    EngeePhased.Functions.mag2db.(spec_PCM),
    lab="", xlab = "Частота, кГц",
    ylab = "Мощность, дБВт",
    title = "Спектр сигнала"
)

object phased phase coded waveform 4 ru

Для вычисления спектрограммы воспользуемся встроенной функцией spectrogram.

# расчет спектрограммы
spectgm_pcm,f1,t1 = EngeeDSP.Functions.spectrogram(
    pcm_signal;
    nfft = 1024, # длина БПФ
    window = 128,
    noverlap = 120, # перекрытие окна
    spectrumtype = "power",  # тип спектра — по мощности
    freqrange = "twosided", # диапазон спектра — двусторонний
    out = :data, # тип выхода — массив данных
    fs = fs # частота дискретизации
);

Визуализируем результат расчета спектрограммы с помощью функции heatmap.

# построение спектрограммы
heatmap(
    t1[:]*1e3,
    f1[:]*1e-3,
    abs.(spectgm_pcm),color = :jet,
    xlab = "Время, мс",
    ylab = "Частота Доплера, кГц",
    ylims = (0,200)
)

object phased phase coded waveform 5 ru

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

В двухчиповом коде Баркера можно использовать [1 −1] или [1 1] в качестве последовательности амплитуд. В данном системном объекте реализовано [1 −1].

В четырехчиповом коде Баркера можно использовать [1 1 −1 1] или [1 1 1 −1] в качестве последовательности амплитуд. В данном системном объекте реализовано [1 1 −1 1].

В коде Задова — Чу можно использовать последовательность фаз по часовой стрелке или против нее. В данном системном объекте реализована последовательность против часовой стрелки, например, π⋅f(k)⋅SequenceIndex/NumChips вместо −π⋅f(k)⋅SequenceIndex/NumChips. В этих выражениях k — индекс чипа, а f(k) — функция от k.

Более подробную информацию см. в [1].

Алгоритмы

ФКМ-радиоимпульс может быть записан как

где

  •  — длительность одного элементарного дискрета (чипа);

  •  — элементы кодовой последовательности (например, коды Баркера или М-последовательности), принимающие значения ±1;

  •  — длина кода.

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

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

  • длительность импульса ;

  • частота следования импульсов ;

  • количество импульсов ;

  • начальная частота сигнала ;

  • конечная частота сигнала ;

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

object phased phase coded waveform 1 ru

Литература

  1. Levanon, N. and E. Mozeson. Radar Signals. Hoboken, NJ: John Wiley & Sons, 2004.