工程师。FMCWWaveform
连续频率调制信号发生器。
库::`[医]工程师` 座:: FMCW Waveform
资料描述
该*EngeePhased。FMCWWaveform*系统对象是连续频率调制(FM)信号发生器。
要生成连续FM信号,请按照以下步骤操作:
-
创建*EngeePhased。FMCWWaveform*对象并设置其属性。
-
用参数调用对象,就好像它是一个函数一样。
若要了解有关如何使用系统对象的详细信息,请参阅 AnyMath系统对象.
争论
输出参数
Y — 连续调频信号
+
复向量
Details
如果属性是*[Property:OutputFormat]*具有值 "样本",则*Y*包含*[Property:numSamples]*计数。
如果*[Property:OutputFormat]*有一个值 "扫荡",则*Y*包含*[Property:NumSweeps]*脉冲。 此外,if*[Property:SweepDirection]*事项 "三角",则每个脉冲为周期的一半。
| 数据类型 |
|
例子:
线性频率调制的连续信号生成
Details
让我们用采样频率形成线性频率调制的连续信号 1 兆赫,上升期 500 iss和频率偏差 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。使用*fmcw*变量的FMCWWaveform*系统对象。
fmcw_sig = fmcw();
使用函数 情节 让我们以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))

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

为了计算频谱图,我们使用内置函数 频谱图.
# расчет спектрограммы
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(
t1[:]*1e6,f1[:]*1e-3,
abs.(spectgm_lfm),color = :jet,
xlab = "Время, мкс",
ylab = "Частота Доплера, кГц",
ylims = (0,250)
)

