EngeePhased.PhaseCodedWaveform
相位码调制信号发生器。
库::`[医]工程师` 座:: 相位编码波形
资料描述
要生成相位码调制(FCM)信号,请执行以下步骤:
-
创建*EngeePhased对象。PhaseCodedWaveform*并设置其属性。
-
用参数调用对象,就好像它是一个函数一样。
若要了解有关如何使用系统对象的详细信息,请参阅 AnyMath系统对象.
语法
创造
-
波形=EngeePhased。PhaseCodedWaveform()-创建系统对象波形具有默认属性的FCM的信号发生器。 -
波形=EngeePhased。PhaseCodedWaveform(名称=值)-创建系统对象波形一对形式的具有指定属性的FCM信号发生器名称=值,在哪里姓名-物业的名称,以及价值-适当的值。 您可以指定多个对 «名称-值» 对的顺序并不重要。 未指定的属性保留其默认值。
使用
-
Y=波形()-以列向量*Y*的形式从FCM返回脉冲计数。 -
Y=波形(prfidx)-使用*prfidx*索引从由*PRF*属性设置的预定义值向量中选择脉冲重复率(PRF)。 如果*PRFOutputPort*属性设置为真的. -
Y=波形(freqoffset)-使用*freqoffset*生成频率偏移信号。 在需要动态更新发送脉冲的频率的情况下使用该语法。 此语法适用于属性*FrequencyOffsetSource*值集"输入端口". -
Y,prf=波形(_)-还返回当前脉冲重复率*prf*。 若要使用此语法,请将*PRFOutputPort*属性设置为真的,并为属性*OutputFormat*值"脉冲". -
Y,coeff=波形(_)-还返回当前脉冲的匹配*coeff*滤波器的系数。 若要使用此语法,请设置*[Property:CoordicientsOutputPort]*值真的.
如果指定了包含可选输入和输出参数的属性,则可以组合它们。 可选输入和输出的列出顺序应与包含它们的属性相同。 例如, Y,prf,coeff=波形(prfidx,freqoffset).
争论
输入参数
prfidx — 脉冲重复率指数
+
一个正整数
Details
脉冲重复率指数(PRF),设定为正整数。 索引标识*PRF*属性中的条目。 在必须动态选择传输脉冲的情况下使用此参数。 在这种情况下,PRF*属性包含预定义的PRF选择选项列表。 在仿真期间,基于输入数据*prfidx,选择其中一个Prf作为下一传输的PRF。
依赖关系
若要使用此参数,请将*PRFOutputPort*属性设置为 真的.
freqoffset — 频率偏移,Hz
+
标量,标量
Details
的频率偏移,设置为标量。 偏移允许您生成具有频率偏移的信号。 在需要动态更新发送脉冲的频率的情况下使用该自变量。
依赖关系
若要使用此参数,请将属性设置为*FrequencyOffsetSource*value "输入端口".
| 数据类型 |
|
输出参数
Y — 脉冲信号
+
列向量
Details
作为复数列向量返回的输出信号。
| 数据类型 |
|
prf — 脉冲重复率,Hz
+
标量,标量
Details
当前脉冲重复率,作为标量返回。
依赖关系
若要使用此参数,请将*PRFOutputPort*属性设置为 真的,并为属性*OutputFormat*值 "脉冲".
| 数据类型 |
|
科夫 — 匹配滤波器的系数
+
向量资料
Details
作为复向量返回的匹配滤波器的系数 ,在哪里 -最大的非零脉冲宽度。
依赖关系
若要使用此参数,请将属性设置为*[Property:CoordicientsOutputPort]*value 真的.
| 数据类型 |
|
特征
#
Code —
相位代码的类型
String
Details
指定用于相位调制的相位代码的类型。 可接受的值:
-
"弗兰克"(默认情况下); -
"P1"; -
"P2"; -
"Px"; -
"扎多夫-朱"; -
"P3"; -
"P4"; -
"巴克".
#
OutputFormat —
输出信号格式
String
Details
的输出信号格式,设置为 "脉冲" (默认情况下)或 "样本":
如果设置此属性的值 "脉冲",则该块的输出由若干个脉冲组成。 脉冲数是属性NumPulses*的值。
如果设置此属性的值 "样本",则该块的输出由若干个样本组成。 样本数是[Property:numSamples]*属性的值。
#
NumSamples —
输出信号的采样数
Real number
Details
#
FrequencyOffsetSource —
频率偏移设置的来源
String
Details
频率偏移设置的来源,设置为 "财产" (默认情况下)或 "输入端口":
如果值设置为 "财产",则偏移量由FrequencyOffset*的值决定。
*如果值设置为 "输入端口",偏移量由*FreqOffset*参数的值确定。
#
NumPulses —
输出信号脉冲数
Real number
Details
#
PRF —
脉冲重复率
Real number
Details
脉冲重复率(PRF),设置为标量或字符串向量。 测量单位为Hz。 脉冲重复周期(PRI)是脉冲重复率(PRF)的倒数。 PRF值必须满足以下约束: PRF*与脉冲持续时间的乘积必须小于或等于一。 该条件要求脉冲宽度小于一个PRI。 对于相位编码信号,脉冲持续时间等于一个码片的持续时间与码片数量的乘积。 *RelationSampleRate*k*PRF*必须是整数。 此条件要求一个PRI中的样本数为整数。
可以仅使用*PRF*属性值或结合*prfidx*输入参数的属性值来设置PRF值。
IfPRFOutputPort*具有值 错误,仅使用*PRF*属性设置PRF。 你可以:
**通过将*PRF*属性指定为正实标量值来实现常量PRF。
**通过将*PRF*属性指定为具有正实数元素的向量字符串来实现离散PRF。 每个对象调用都使用此向量的连续元素作为PRF。 一旦对象到达向量的最后一个元素,它就循环地继续向量的第一个元素的过程。
当PRFOutputPort*具有值时 真的 您可以将*PRF*属性与输入参数*prfidx*结合使用来设置PRF的值。 您可以通过将*PRF*属性指定为具有正实数元素的矢量字符串来实现可选PRF。 执行对象时,使用输入参数*prfidx*中指定的索引来选择PRF,以索引PRF向量。
在所有情况下,如果将属性设置为*OutputFormat*value,则输出样本的数量是固定的 "样本". 使用可变脉冲重复率(PRF)并设置属性*OutputFormat*值时 "脉冲" 计数的数量可能会有所不同。
默认值 — 10e3.
#
ChipWidth —
每个芯片的持续时间
Real number
Details
FCM信号中每个码片的持续时间,设置为正标量。 对于给定信号,脉冲持续时间等于码片持续时间与码片数量的乘积。
此属性的值必须满足以下约束:
SampleRate*ChipWidth*是整数-芯片中的样本数必须是整数。
测量单位为秒。
#
CoefficientsOutputPort —
使能匹配滤波器系数的输出
Logical
Details
通过指定值启用或禁用匹配滤波器的系数的输出 错误 (默认情况下)或 真的. 将此属性设置为 真的 为仿真期间使用的波形启用匹配滤波器系数的输出。
#
PRFOutputPort —
启用PRF输出
Logical
Details
依赖关系
若要使用此属性,请设置*OutputFormat*值 "脉冲".
#
FrequencyOffset —
频率偏移
Real number
Details
例子:
FCM信号的形成
Details
我们将生成一个长度为Barker代码的FCM信号 13,芯片的持续时间 20 mks,脉冲重复率 20 kHz和中心频率 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*使用*pcm_signal*变量。
pcm_signal = PCM_Waveform();
使用函数 情节 让我们以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="Амплитуда");
图(图1,图2,布局=(2,1))

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

信号的主要特征是频谱和频谱图。 让我们使用内置函数 周期图.
# расчет спектра сигнала
spec_PCM,f = EngeePhased.Functions.periodogram(
pcm_signal, # исходный сигнал
EngeeDSP.Functions.hamming(size(pcm_signal)...),
8192; # длина частоты дискретизации
out = :data, # тип выхода
fs = fs, # частота дискретизации
spectrumtype = "power" # тип спектра
);
使用函数可视化结果 情节.
plot(
f * 1e-3,
EngeePhased.Functions.mag2db.(spec_PCM),
lab="", xlab = "Частота, кГц",
ylab = "Мощность, дБВт",
title = "Спектр сигнала"
)

为了计算频谱图,我们使用内置函数 频谱图.
# расчет спектрограммы
spectgm_pcm,f1,t1 = EngeeDSP.Functions.spectrogram(
pcm_signal;
nfft = 1024, # длина БПФ
window = 128,
noverlap = 120, # перекрытие окна
spectrumtype = "power", # тип спектра — по мощности
freqrange = "twosided", # диапазон спектра — двусторонний
out = :data, # тип выхода — массив данных
fs = fs # частота дискретизации
);
我们使用函数可视化频谱图计算的结果 热图.
# построение спектрограммы
heatmap(
t1[:]*1e3,
f1[:]*1e-3,
abs.(spectgm_pcm),color = :jet,
xlab = "Время, мс",
ylab = "Частота Доплера, кГц",
ylims = (0,200)
)

此外
在双芯片Barker代码中,您可以使用 [1 −1] 或 [1 1] 作为振幅的序列。 在此系统对象中实现 [1 −1].
在四芯片Barker代码中,您可以使用 [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]。
算法
FKM无线电脉冲可以写成
哪里
-
--一个基本秘密(芯片)的持续时间;
-
--取值的代码序列的元素(例如,巴克代码或M序列)
±1; -
--代码的长度。
要从FCM生成信号,必须设置以下参数:
*滤波器采样率 ; *脉冲持续时间 ; *脉冲重复率 ; *脉冲数 ; *信号的初始频率 ; *信号的最终频率 ; *频率偏差 .
