1.1. 线性调频信号

1.1.1. 线性调频信号

线性频率调制信号 (Linear Frequency Modulated , LFM) 简称 线性调频信号 (Chirp) , 之所以称之为 线性调频 是因为其频率随时间呈线性变化, 数学表示为:

(1.13)s(t)=rect(tT)exp{jπKt2},s(t) = {\rm rect}\left(\frac{t}{T}\right){\rm exp}\left\{j\pi Kt^2\right\},

其中, tt 为时间, 单位为 s\text s , KK 为线性调频率, 可正可负, 单位为 Hz/s\text{Hz/s}, TT 为脉冲宽度, 单位为 ss, 在脉冲持续时间内, 频率调制带宽为 B=KTB=|K|T, 时间带宽积(Time Bandwidth Product, TBP)为 TBP=BT=KT2{\rm TBP}=BT=|K|T^2, rect(tT){\rm rect}\left(\frac{t}{T}\right) 为矩形窗函数, 只是对信号加了一定大小的窗, 窗大小由 TT 决定,

提示

矩形窗函数的表达式如下:

rect(t)={0,          t>1/21/2,      t=1/21,          t<1/2{\rm rect}(t) = \left\{ {\begin{array}{ccc}{0,\;\;\;\;\;|t| > 1/2}\\{1/2,\;\;\;|t| = 1/2}\\{1,\;\;\;\;\;|t| < 1/2}\end{array}} \right.

脉冲相位 ϕ(t)=πKt2\phi(t) = \pi Kt^2 对时间取微分得到

f=d(ϕ(t)/2π)dt=Kt,f = \frac{{\rm d}({\phi(t)}/{2\pi})}{{\rm d}t} = Kt,

即频率随时间线性变化, 因而称之为线性调频信号. 实际系统中, 可能会有一个初始相位 ϕ0\phi_0, 并且通常会把该信号加载到一个较高频率的载波 exp{2jπFct}{\rm exp}\left\{2j\pi F_c t\right\} 上发射, 从而有最终的发射信号为

(1.14)s(t)=rect(tT)exp{jϕ0+j2πFct+jπKt2},s(t) = {\rm rect}\left(\frac{t}{T}\right){\rm exp}\left\{j\phi_0 + j2\pi F_c t + j\pi Kt^2\right\},

1.1.2. 线性调频信号的频谱

线性调频信号 s(t)=rect(tT)exp{jϕ(t)}s(t)={\rm rect}\left(\frac{t}{T}\right){\rm exp}\{j\phi(t)\} 的频谱为

(1.17)S(f)=+s(t)exp{j2πft}dt=+rect(tT)exp{jϕ(t)}exp{j2πft}dt=T/2+T/2rect(tT)exp{j[ϕ(t)2πft]}dt\begin{aligned} {\mathcal S}(f) &= \int_{-\infty}^{+\infty} s(t){\rm exp}\left\{-j2\pi ft\right\}{\rm d}t\\ &= \int_{-\infty}^{+\infty}{\rm rect}\left(\frac{t}{T}\right){\rm exp}\left\{j\phi(t)\right\}{\rm exp}\left\{-j2\pi ft\right\}{\rm d}t \\ &= \int_{-T/2}^{+T/2}{\rm rect}\left(\frac{t}{T}\right){\rm exp}\left\{j\left[\phi(t)-2\pi ft\right]\right\}{\rm d}t \end{aligned}

很难直接求解出 式.1.17 所示积分解, 线性调频信号的性质, 决定了可以利用驻定相位原理 (Principle of Stationary Phase, PoSP) [1] 求解该积分的近似解. 在PoSP中, 将信号相位对于时间的导数为零的点称为驻留点, 在该点附近, 信号的相位是缓变的, 其值对积分的贡献大, 而在该区域之外的两侧, 是捷变的, 其正负部分几乎相互抵消, 积分为零, 因而, 积分值主要取决于驻留点附近的缓变区域. 只要时间带宽积 TBP{\rm TBP} 足够大, 利用POSP原理求得的积分解就是十分准确的.

提示

PoSP原理表明, 对于一个包络为 w(t)w(t) (时间缓变), 调制相位为 ϕ(t)\phi(t) (时间捷变)的线性或近似线性调频信号 g(t)=w(t)exp{jϕ(t)}g(t)=w(t){\rm exp}\{j\phi(t)\}, 其频谱可以近似为

(1.16)G(f)=+g(t)exp{j2πt}=+w(t)exp{jθ(t)}Cw(t(f))exp{j[θ(t(f))±π4]}\begin{aligned} {\mathcal G}(f) &= \int_{-\infty}^{+\infty}g(t){\rm exp}\{-j2\pi t\}\\ &= \int_{-\infty}^{+\infty}w(t){\rm exp}\{j\theta(t)\}\\ & \approx C w\left(t(f)\right) {\rm exp}\left\{j\left [\theta\left(t(f)\right) \pm \frac{\pi}{4}\right ]\right\} \end{aligned}

其中, C=2π/ϕ(ts)C=\sqrt{2\pi /|\phi''(t_s)|} 为一常数, w(t(f))w\left(t(f)\right) 为频域包络, θ(t(f))\theta\left(t(f)\right) 为频域相位, θ(t)=ϕ(t)2πft\theta(t)=\phi(t)-2\pi ft 为时域相位, t(f)t(f) 由时频关系确定, π4\frac{\pi}{4} 前的符号与 ϕ(ts)\phi''(t_s) 的符号一致, tst_s 为驻留点, C,π4C, \frac{\pi}{4} 通常可以被忽略. 线性调频信号的详细推导见 https://www.cnblogs.com/archerC/p/9359289.html

对于不含载频和初始相位的信号, 被积相位为 θ(t)=ϕ(t)2πft=πKt22πft\theta(t)=\phi(t) - 2\pi ft=\pi Kt^2 - 2\pi ft, 令 dθ(t)/dt=0{\rm d}{\theta(t)}/{\rm d}t=0, 求得 f=Kt,t=f/Kf=Kt, t=f/K, 则驻留点为 ts=f/Kt_s=f/K, 从而有 C=2π/2πK=1/KC=\sqrt{2\pi /|2\pi K|}=\sqrt{1/|K|}, w(t(f))=rect(f/K)w(t(f))={\rm rect}(f/K) θ(t(f))=ϕ(f/K)2πf2/K=πf2/K\theta(t(f))=\phi(f/K) - 2\pi f^2/K=-\pi {f^2}/K, 最终得到该信号的频谱

(1.17)S(f)=1Krect(fKT)exp{j[πf2K+sign(K)π4]}{\mathcal S}(f) = \sqrt{\frac{1}{|K|}}{\rm rect}\left(\frac{f}{KT}\right){\rm exp}\left\{j\left[-\pi \frac{f^2}{K} + {\rm sign}(K) \frac{\pi}{4}\right]\right\}

对于含载频和初始相位的信号, 被积相位为 θ(t)=ϕ(t)2πft=ϕ0+2πFct+πKt22πft\theta(t)=\phi(t) - 2\pi ft=\phi_0 + 2\pi F_c t + \pi Kt^2 - 2\pi ft, 令 dθ(t)/dt=0{\rm d}{\theta(t)}/{\rm d}t=0, 求得 f=Fc+Kt,t=(fFc)/Kf=F_c+Kt, t=(f-F_c)/K, 则驻留点为 ts=(fFc)/Kt_s=(f-F_c)/K, 从而有 C=2π/2πK=1/KC=\sqrt{2\pi /|2\pi K|}=\sqrt{1/|K|}, w(t(f))=rect((fFc)/K)w(t(f))={\rm rect}((f-F_c)/K), θ(t(f))=ϕ((fFc)/K)2πf(fFc)/K=π(fFc)2/K\theta(t(f))=\phi((f-F_c)/K) - 2\pi f(f-F_c)/K=-\pi (f-F_c)^2/K, 最终得到该信号的频谱

(1.18)S(f)=1Krect(fFcKT)exp{j[π(fFc)2K+sign(K)π4]}{\mathcal S}(f) = \sqrt{\frac{1}{|K|}}{\rm rect}\left(\frac{f-F_c}{KT}\right){\rm exp}\left\{j\left[-\pi \frac{(f-F_c)^2}{K} + {\rm sign}(K) \frac{\pi}{4}\right]\right\}

1.1.3. 实验仿真

生成分析LFM

实验代码

python 代码如下

import matplotlib.pyplot as plt
import numpy as np


def rect(x):
    r"""
    Rectangle function:
        rect(x) = {1, if |x|<= 0.5; 0, otherwise}
    """
    return np.where(np.abs(x) >= 0.5, 0, 1)


def chirp(t, T, Kr):
    """
    Create a chirp signal :
        S_{tx}(t) = rect(t/T) * exp(1j*pi*Kr*t^2)
    """
    return rect(t / T) * np.exp(1j * np.pi * Kr * t ** 2)


Ns = 1000
t = np.linspace(-1, 1, Ns)
yrect = rect(t)

plt.figure()
plt.plot(t, yrect, '-r', linewidth=2)
plt.axis([-1, 1, -0.1, 1.1])
plt.grid()
plt.xlabel('Time/s')
plt.ylabel('Amplitude')
plt.title('rect')
plt.show()

Kr1 = 5
Kr2 = 20
T1 = 2.0
T2 = 4.0
t = np.linspace(-3, 3, Ns)
ychirp1 = chirp(t, T1, Kr=Kr1)
ychirp2 = chirp(t, T2, Kr=Kr1)

ychirp3 = chirp(t, T1, Kr=Kr2)
ychirp4 = chirp(t, T2, Kr=Kr2)

plt.figure()
plt.subplot(221)
plt.grid()
plt.plot(t, ychirp1, '-r')
plt.xlabel('Time/s')
plt.ylabel('Amplitude')
plt.title("T=" + str(T1) + "s, K=" + str(Kr1) + "Hz/s")
plt.subplot(222)
plt.grid()
plt.plot(t, ychirp2, '-b')
plt.xlabel('Time/s')
plt.ylabel('Amplitude')
plt.title("T=" + str(T2) + "s, K=" + str(Kr1) + "Hz/s")
plt.subplot(223)
plt.grid()
plt.plot(t, ychirp3, '-r')
plt.xlabel('Time/s')
plt.ylabel('Amplitude')
plt.title("T=" + str(T1) + "s, K=" + str(Kr2) + "Hz/s")
plt.subplot(224)
plt.grid()
plt.plot(t, ychirp4, '-b')
plt.xlabel('Time/s')
plt.ylabel('Amplitude')
plt.title("T=" + str(T2) + "s, K=" + str(Kr2) + "Hz/s")
plt.tight_layout()
plt.show()

# ==================compute spectral

ychirp1_fft = np.fft.fft(ychirp1)
ychirp2_fft = np.fft.fft(ychirp2)
ychirp3_fft = np.fft.fft(ychirp3)
ychirp4_fft = np.fft.fft(ychirp4)

ychirp1_fft = np.fft.fftshift(ychirp1_fft)
ychirp2_fft = np.fft.fftshift(ychirp2_fft)
ychirp3_fft = np.fft.fftshift(ychirp3_fft)
ychirp4_fft = np.fft.fftshift(ychirp4_fft)

f = np.fft.fftfreq(t.shape[-1])
# print(f)
f = np.fft.fftshift(f)
# print(f)

plt.figure()
plt.subplot(221)
plt.grid()
plt.plot(f, np.abs(ychirp1_fft), '-r')
plt.xlabel('Frequency/Hz')
plt.ylabel('Amplitude')
plt.title("T=" + str(T1) + "s, K=" + str(Kr1) + "Hz/s")
plt.subplot(222)
plt.grid()
plt.plot(f, np.abs(ychirp2_fft), '-b')
plt.xlabel('Frequency/Hz')
plt.ylabel('Amplitude')
plt.title("T=" + str(T2) + "s, K=" + str(Kr2) + "Hz/s")
plt.subplot(223)
plt.grid()
plt.plot(f, np.abs(ychirp3_fft), '-r')
plt.xlabel('Frequency/Hz')
plt.ylabel('Amplitude')
plt.title("T=" + str(T1) + "s, K=" + str(Kr1) + "Hz/s")
plt.subplot(224)
plt.grid()
plt.plot(f, np.abs(ychirp4_fft), '-b')
plt.xlabel('Frequency/Hz')
plt.ylabel('Amplitude')
plt.title("T=" + str(T2) + "s, K=" + str(Kr2) + "Hz/s")
plt.tight_layout()
plt.show()

实验结果

生成的 rect\rm rect 信号:

rect信号

生成的 chirp\rm chirp 线性调频信号:

线性调频Chirp信号

生成的 chirp\rm chirp 线性调频信号的幅度谱:

线性调频信号的幅度谱