《合成孔径雷达成像算法与实现》学习记录

《合成孔径雷达成像算法与实现》学习记录

本部分内容作为本人本科毕业设计和研究生阶段的前置学习内容,方便以后查阅。

 次点击
95 分钟阅读

参考书目:Digital Processing of Synthetic Aperture Radar Data Algorithms and Implementation

本部分内容作为本人本科毕业设计和研究生阶段的前置学习内容,方便以后查阅。

第一部分 合成孔径雷达基础

第一章 概论

SAR的不同工作模式

维度

条带模式(Stripmap)

扫描模式(ScanSAR)

影响/解读

成像机理

天线波束指向固定,持续照射同一条带

在多个子条带/子扇区间按“突发(burst)”方式快速切换照射

ScanSAR把时间分给多条带,单条带驻留时间缩短

视幅(覆盖宽度)

中等(典型数十–一两百 km)

很宽(典型数百 km)

ScanSAR为大范围监测而生

方位分辨率

较高,稳定(常见米级到十余米)

较低,随子条带数变粗(常见几十米)

分辨率与每条带的有效合成长时间成正比

距离分辨率

主要由信号带宽决定,二者相当

同左

模式差异对距离分辨率影响不大(同带宽条件)

PRF与多普勒采样

单一PRF、连续采样,多普勒谱完整

分段/间歇采样,多普勒谱存在间隔

ScanSAR需特殊处理以抑制方位模糊与纹理起伏

辐射定标与均匀性

良好、均匀

容易出现burst拼接边界、方位起伏(scalloping)

需严格定标与均衡处理

SNR/NEσ⁰

SNR较高(驻留时间长)

SNR较低(驻留时间短)

ScanSAR单位像元集成时间短,噪声等效后向散射略高

数据率/数据量

单位面积像素密度高,单景数据量中等

单位面积像素密度低,但单景覆盖大,总量可能更大

任务设计需在链路和存储上折中

时间覆盖能力

条带宽度有限,重复覆盖速度一般

同一轨道下“有效重访”更快

ScanSAR更适合周期性大范围巡查

干涉测量(InSAR)

适宜,相干性高、几何稳定

难度较高,需严格burst同步与几何匹配

传统ScanSAR不利于高精度InSAR;专门设计的广域干涉模式可改进

处理复杂度

处理流程成熟、相对简单

需burst拼接、多普勒校正、增益均衡等

地面处理链更复杂

对几何畸变

斜视成像常见压缩、叠掩、阴影

同左,且子条带间几何/辐射可能不连续

需DEM辅助几何校正

硬件/波束控制

可用定向或简单双向稳定

需快速电子/机械扫描与开关控制

相控阵/天线开关设计更关键

典型应用

目标检测、形变监测、中分辨率制图

海洋风场/海冰、洪涝与灾害态势、林火/沙尘大范围监测

分辨率 vs 覆盖的经典取舍

代表性参数(典型值)

3–30 m,20–100 km 视幅

20–100 m,200–500 km 视幅

实际取决于平台与工作体制

信噪比(Signal-to-Noise,SNR)

雷达方程导出SAR信号的信噪比

基本假设:单基地脉冲体制、远场点目标、发收共用天线(Gt=Gr=G)、匹配滤波接收,系统等效噪声温度为 Tsys,接收机噪声系数为 F,总损耗为 L。

1) 从雷达方程得到回波功率

P_r = \frac{P_t\, G^2\, \lambda^2\, \sigma}{(4\pi)^3\, R^4\, L}

其中,

  P_t:峰值发射功率, \lambda:波长, R:斜距, L:含传播/系统等综合损耗

2) 噪声功率与匹配滤波

热噪声单边功率谱密度 N_0=k\,T_\mathrm{sys}\,F(k 为玻尔兹曼常数)。时宽为 \tau 的单个脉冲,经匹配滤波器后在抽样点的最优 SNR:

\mathrm{SNR}\approx \frac{E_r}{N_0}= \frac{P_r\,\tau}{k\,T\mathrm{sys}\,F}

代入雷达方程得:

{\mathrm{SNR}=\frac{P_t\,G^2\,\lambda^2\,\sigma\,\tau}{(4\pi)^3\,R^4\,k\,T\mathrm{sys}\,F\,L}}

以“时间–带宽积(TBP)”表示,若信号带宽为 B:\mathrm{SNR}{1}=\frac{P_t\,G^2\,\lambda^2\,\sigma}{(4\pi)^3\,R^4\,k\,T\mathrm{sys}\,F\,L}\times(\tau B)

未压缩矩形脉冲B\!\approx\!1/\tau\Rightarrow \tau B\!\approx\!1;脉冲压缩(如 LFM)给出处理增益 \tau B>1

3) 多脉冲积累(处理增益)

  • 相干积累 N 脉冲\displaystyle \mathrm{SNR}=\mathrm{SNR}_{1}\,N

  • 非相干积累 N 脉冲\displaystyle \mathrm{SNR}\approx \mathrm{SNR}_{1}\,\sqrt{N}(精确系数略小于 \sqrt{N}

综合(相干积累为例):{\mathrm{SNR}=\frac{P_t\,G^2\,\lambda^2\,\sigma}{(4\pi)^3\,R^4\,k\,T_\mathrm{sys}\,F\,L}\times(\tau B)\times N}

4) 分布目标(面目标)与成像体制的替换

分布目标常以后向散射系数 \sigma^0 分辨单元面积 A_\mathrm{res} 替代点目标 \sigma\sigma \Rightarrow \sigma_\mathrm{eq}=\sigma^0\,A_\mathrm{res}

{\mathrm{SNR}=\frac{P_t\,G^2\,\lambda^2\,(\sigma^0 A_\mathrm{res})}{(4\pi)^3\,R^4\,k\,T_\mathrm{sys}\,F\,L}\times(\tau B)\times \text{(积累增益)}}

在具体体制(如 SAR 条带/ScanSAR)中,A_\mathrm{res} 与可积累脉冲数的表达不同,但代入思路相同。

距离徒动(Range Cell Migration,RCM)

由于在合成孔径内传感器的移动,雷达与目标的距离随时间变化,这个变化所引起的回波数据的多普勒频移构成了合成孔径处理的基础。

距离徒动校正(Range Cell Migration Correction,RCMC)

要点:不过度增加处理复杂度的同时精确地校正RCM。

第二章 信号处理基础

2.2 线性卷积

2.2.1 连续时间卷积

在连续时域内,卷积可写为(y = s*h)(t)=\int_{-\infty}^{+\infty} s(u)\,h(t-u)\,du =\int_{-\infty}^{+\infty} s(t-u)\,h(u)\,du .

MATLAB手写“时域”线性卷积(不依赖 conv)

function y = lconv_time(x, h)
%   LCONV_TIME  时域线性卷积(不调用内置 conv)
%   y = lconv_time(x, h)
%   输出 y 的长度为 length(x)+length(h)-1
%
%   说明:默认输出列向量;若两输入均为行向量则输出行向量

    x_is_row = isrow(x);
    h_is_row = isrow(h);

    x = x(:);    % 列向量
    h = h(:);    % 列向量
    Nx = length(x);
    Nh = length(h);
    Ny = Nx + Nh - 1;
    y  = zeros(Ny, 1);

    % 双循环:y[n] = sum_{k} x[k] * h[n-k+1]
    for n = 1:Ny
        kmin = max(1, n - Nh + 1);
        kmax = min(n, Nx);
        % 等价于: for k = 1:Nx, 若 1<=n-k+1<=Nh 再累加
        for k = kmin:kmax
            y(n) = y(n) + x(k) * h(n - k + 1);
        end
    end

    % 若两输入均为行向量,则转为行向量输出
    if x_is_row && h_is_row
        y = y.';
    end
end

% ------------ 示例 -------------
% x = [1 2 3]; h = [1 1 1];
% y = lconv_time(x, h)   % -> [1 3 6 5 3]

相关

相关的定义为{\;(s*h)(t)=\int_{-\infty}^{\infty} s(u)\,h(t-u)\,du\;}

与卷积不同:滤波器的时间轴无需进行反转;若滤波器是复的,则还需取共轭。

2.3 傅立叶变换

2.3.1 连续时间傅立叶变换

傅立叶变换的优势:函数g(t)可以表示为一组幅度和相位各不相同的正弦信号的和。

连续时间傅立叶变换:X(f)=\int_{-\infty}^{\infty} x(t)\,e^{-j2\pi f t}\,dt,\qquad x(t)=\int_{-\infty}^{\infty} X(f)\,e^{j2\pi f t}\,df .

%% ctft_demo.m
% 数值连续时间傅里叶变换(CTFT,角频率域)演示
% X(ω) = ∫ x(t) e^{-j ω t} dt,  x(t) = (1/2π) ∫ X(ω) e^{j ω t} dω
clear; close all; clc;

%% 全局数值网格设置(可根据信号时间/频率特性调整)
Twin = 10;            % 时间窗总时长(秒),[-Twin/2, Twin/2]
dt   = 1e-3;          % 采样间隔(秒)
t    = (-Twin/2:dt:Twin/2).';    % 列向量

wmax = 200;           % 频域范围(rad/s)
Nw   = 4001;          % 频域采样点数(奇数便于对称)
w    = linspace(-wmax, wmax, Nw).';   % 列向量

%% 工具函数(见文末):ctft_numeric, ictft, plot_spec, rectfun

%% 示例 1:矩形脉冲  x(t) = rect(t/T0)  (宽度 T0)
T0 = 1.0;
x1 = rectfun(t/T0);                      % rect(t/T0), 中心对齐
[X1w] = ctft_numeric(x1, t, w);          % 数值 CTFT
X1w_ana = T0 * sinc((w*T0)/2);           % 解析解(sinc(x)=sin(x)/x, x=ωT0/2)

figure('Name','Example 1: Rect pulse');
plot_spec(w, X1w, 'Rect pulse: numeric CTFT');
hold on; plot(w, abs(X1w_ana), 'LineWidth', 1.0, 'LineStyle', '--'); legend('|\bfX_{num}|','|\bfX_{ana}|');

% 重构检查
x1_rec = ictft(w, X1w, t);
err1 = norm(x1 - x1_rec, 2) / norm(x1, 2);
fprintf('Example 1 recon RMSE ratio: %.3e\n', err1);

% Parseval 检查:∫|x(t)|^2 dt  ≈ (1/2π)∫|X(ω)|^2 dω
E_time = trapz(t, abs(x1).^2);
E_freq = (1/(2*pi)) * trapz(w, abs(X1w).^2);
fprintf('Example 1 Parseval: time=%.6f, freq=%.6f, rel.err=%.3e\n', E_time, E_freq, abs(E_time-E_freq)/E_time);

%% ---------------------- 本文件尾部的工具函数 ----------------------
function [Xw] = ctft_numeric(x, t, w)
% 数值 CTFT:  X(ω) ≈ ∫ x(t) e^{-jωt} dt  (trapz 实现)
% 输入: x(Nt×1), t(Nt×1), w(Nw×1); 输出: Xw(Nw×1)
    x  = x(:);  t = t(:);  w = w(:);
    % 生成 Nt×Nw 的指数矩阵,并沿 t 维做数值积分
    E  = exp(-1j * (t * w.'));       % Nt x Nw
    integrand = x .* E;              % 隐式广播:每列乘以 x
    Xrow = trapz(t, integrand, 1);   % 1×Nw
    Xw  = Xrow.';                    % Nw×1
end

function x = ictft(w, Xw, t)
% 数值反变换: x(t) ≈ (1/2π) ∫ X(ω) e^{jωt} dω
% 输入: w(Nw×1), Xw(Nw×1), t(Nt×1); 输出: x(Nt×1)
    t = t(:); w = w(:); Xw = Xw(:);
    E  = exp( 1j * (t * w.'));       % Nt x Nw
    integrand = (ones(numel(t),1) * Xw.') .* E;    % Nt x Nw
    x = (1/(2*pi)) * trapz(w, integrand, 2);       % Nt×1
end

function plot_spec(w, Xw, ttl)
% 绘制幅度与相位(相位用 unwrap)
    if size(w,2)>1, w = w(:); end
    if size(Xw,2)>1, Xw = Xw(:); end
    tiledlayout(2,1);
    nexttile; plot(w, abs(Xw), 'LineWidth', 1.2); grid on;
    xlabel('\omega (rad/s)'); ylabel('|X(\omega)|'); title(ttl);
    nexttile; plot(w, unwrap(angle(Xw)), 'LineWidth', 1.0); grid on;
    xlabel('\omega (rad/s)'); ylabel('\angle X(\omega) (rad)');
end

function y = rectfun(x)
% rect(x):|x|<=1/2 为 1,其他为 0;边界取 1
    y = double(abs(x) <= 0.5);
end

Example 1 recon RMSE ratio: 5.618e-02

Example 1 Parseval: time=1.001000, freq=0.997840, rel.err=3.157e-03

Picture21.png

%% 示例 2:单边指数  x(t)=u(t) e^{-a t}, a>0
a = 2;
x2 = (t>=0).*exp(-a*t);
[X2w] = ctft_numeric(x2, t, w);
X2w_ana = 1./(a + 1j*w);

figure('Name','Example 2: One-sided exponential');
plot_spec(w, X2w, 'u(t)e^{-at}: numeric CTFT');
hold on; plot(w, abs(X2w_ana), 'LineWidth', 1.0, 'LineStyle', '--'); legend('|\bfX_{num}|','|\bfX_{ana}|');

x2_rec = ictft(w, X2w, t);
err2 = norm(x2 - x2_rec, 2) / norm(x2, 2);
fprintf('Example 2 recon RMSE ratio: %.3e\n', err2);

E_time = trapz(t, abs(x2).^2);
E_freq = (1/(2*pi)) * trapz(w, abs(X2w).^2);
fprintf('Example 2 Parseval: time=%.6f, freq=%.6f, rel.err=%.3e\n', E_time, E_freq, abs(E_time-E_freq)/E_time);

Example 2 recon RMSE ratio: 7.964e-02

Example 2 Parseval: time=0.250500, freq=0.248911, rel.err=6.345e-03

a3db31ae4723ff931868b3470731ef8b.jpg

%% 示例 3:Gaussian  x(t)=exp(-a t^2), a>0
ag = 1.5;
x3 = exp(-ag*t.^2);
[X3w] = ctft_numeric(x3, t, w);
X3w_ana = sqrt(pi/ag) * exp(-(w.^2)/(4*ag));

figure('Name','Example 3: Gaussian');
plot_spec(w, X3w, 'exp(-a t^2): numeric CTFT');
hold on; plot(w, abs(X3w_ana), 'LineWidth', 1.0, 'LineStyle', '--'); legend('|\bfX_{num}|','|\bfX_{ana}|');

x3_rec = ictft(w, X3w, t);
err3 = norm(x3 - x3_rec, 2) / norm(x3, 2);
fprintf('Example 3 recon RMSE ratio: %.3e\n', err3);

E_time = trapz(t, abs(x3).^2);
E_freq = (1/(2*pi)) * trapz(w, abs(X3w).^2);
fprintf('Example 3 Parseval: time=%.6f, freq=%.6f, rel.err=%.3e\n', E_time, E_freq, abs(E_time-E_freq)/E_time);

Example 3 recon RMSE ratio: 3.037e-16

Example 3 Parseval: time=1.023327, freq=1.023327, rel.err=2.170e-16

Picture1-UBvw.png

%% 进阶:近似“余弦→谱线”(有限窗导致谱泄漏)
f0 = 5;                        % Hz(为了演示,便于观察)
w0 = 2*pi*f0;                  % rad/s
x4 = cos(w0*t) .* rectfun(t/4);% 给定4秒窗,近似观测
[X4w] = ctft_numeric(x4, t, w);

figure('Name','Example 4: Windowed cosine');
plot_spec(w, X4w, 'cos(ω0 t) with 4s window');
% 理论理想是 π[δ(ω-ω0)+δ(ω+ω0)];有限窗→近似sinc 主瓣+旁瓣

Picture2.png

2.3.2 离散傅立叶变换

2.3.3 傅立叶变换的性质

推导部分参考教材:

[6] A. Papoulis. The Fourier Integral and Its Applications. McGraw-Hill College Division, New York, 1962.

[7] E. O. Brigham. The Fast Fourier Transform: An Introduction to Its Theory and Application. Prentice Hall, Upper Saddle River, NJ, 1974.

[8] R. N. Bracewell. The Fourier Transform and Its Applications. WCB/McGraw-Hill, New York, 3rd edition, 1999.

(1)复共轭

\mathcal{F}\{f^(t)\}(\omega)=F^(-\omega),\qquad \mathcal{F}\{f(-t)\}(\omega)=F(-\omega).

含义: 实信号的谱具厄米对称F(-\omega)=F^*(\omega)。常用于验证回波与脉压结果的谱对称性与相位一致性。

推导:\mathcal{F}\{f^\}(\omega)=\int f^(t)e^{-j\omega t}dt =\left[\int f(t)e^{+j\omega t}dt\right]^* =\left[F(-\omega)\right]^=F^(-\omega).

(2)线性

\mathcal{F}\{a f(t)+b g(t)\}=aF(\omega)+bG(\omega).

含义:配滤波、孔径合成等可分步线性处理叠加。

推导: 由积分的线性性直接成立。

(3)尺度变换特性

含义: 频域轴伸缩/重采样(如 Stolt 映射的本质)与时域尺度变化互为倒数关系。

1D:\mathcal{F}\{f(a t)\}(\omega)=\frac{1}{|a|}\,F\!\left(\frac{\omega}{a}\right)

2D 一般线性变换:g(\boldsymbol{x})=f(\mathbf{A}\boldsymbol{x})\mathbf{A} 可为缩放、剪切、旋转…),则G(\boldsymbol{\omega})=\frac{1}{|\det\mathbf{A}|}\,F\!\left(\mathbf{A}^{-T}\boldsymbol{\omega}\right)

推导:u=at\Rightarrow dt=du/a\int f(at) e^{-j\omega t}dt =\frac{1}{|a|}\int f(u) e^{-j(\omega/a) u}\,du

(4)位移/调制

时间位移:\mathcal{F}\{f(t-t_0)\}=e^{-j\omega t_0}F(\omega).

调制:\mathcal{F}\{f(t)e^{j\omega_0 t}\}=F(\omega-\omega_0).

含义: 距离/方位向平移\Rightarrow频域线性相位;速度引起多普勒中心漂移\Rightarrow频谱搬移。

(5)均值

(6)对称性

(7)Parseval定理

1D:\int_{-\infty}^{\infty} |f(t)|^2 dt=\frac{1}{2\pi}\int_{-\infty}^{\infty} |F(\omega)|^2 d\omega .

含义: 能量/信噪比在时频域保持一致;用于定标与滤波器能量约束。

(8)卷积/乘法

含义: 匹配滤波(脉压/方位压缩)常在频域用“点乘”实现;时域乘窗 \Rightarrow 频域与 sinc 类核卷积(谱泄漏/旁瓣)。

(9)补零

核心: 对长度 N 的序列x[n] 在末尾补零到 L>N 并做 L 点 DFT:X_L[k]=\sum_{n=0}^{L-1}x_{\text{zp}}[n]e^{-j2\pi kn/L} =\sum_{n=0}^{N-1}x[n]e^{-j2\pi kn/L}=X\!\left(e^{j\omega}\right)\big|_{\omega=2\pi k/L}.

这等价于在频域更密集采样 DTFT插值光滑),并不增加新信息

含义: 细化距离/方位向像素间隔(视觉上更平滑、便于峰值定位),但不提升真正分辨率;配合峰值插值用于亚像素估计、RVP 补偿等。

(10)二维扭曲和旋转

含义: Keystone 变换、距离-多普勒耦合校正、本振漂移校正等常本质上是 2D 线性变换(剪切/缩放/旋转)在某个域(时-频或频-频)内的实现。

2.3.4 傅立叶变换示例

%% demo_rect_sinc_FT.m
% 演示:rect(t/T) <-> T*sinc(f*T);sinc(t/T) <-> T*rect(f*T)
% 采用 Fourier 变换定义:X(f) = ∫ x(t) e^{-j2π f t} dt  ,频率单位 Hz
% 说明:
% 1) 数值CTFT用:X_fft ≈ Δt * FFT{x(t)} 并做fftshift,频率栅格 f = (-N/2:N/2-1)/(N*Δt)
% 2) MATLAB中使用"归一化 sinc"定义:sinc(u) = sin(pi*u)/(pi*u)

clear; close all; clc;

%% 公用参数(时间窗、采样与频率轴)
Trect = 1;            % 矩形脉宽(秒)——可自行修改
L = 16*Trect;         % 总观察时长(越长,频域越细 & 截断效应越小)
N = 2^15;             % 采样点数(越大,频率分辨率越高)
dt = L/N;             % 采样间隔
t = (-N/2:N/2-1).' * dt;      % 对称时间轴,列向量
[f,~] = make_freq_axis(N, dt); % 频率轴(Hz)

% 自定义函数句柄(避免工具箱依赖)
sincn = @(u) sin(pi*u)./(pi*u); % 归一化sinc,u=0处稍后单独处理
rectp = @(x,Tw) double(abs(x) < Tw/2) + 0.5*double(abs(x) == Tw/2); % 矩形脉冲

%% --------------------- 示例 1:矩形 -> sinc ---------------------
x1 = rectp(t, Trect);                        % x1(t) = rect(t/Trect)
X1_num = ctft_fft(x1, dt);                   % 数值CTFT近似
X1_ana = Trect * safe_sinc(f*Trect, sincn);  % 解析:T * sinc(f*T)

figure('Name','Rect <-> Sinc','Color','w');
tiledlayout(2,2,"Padding","compact","TileSpacing","compact");

% 时域
nexttile; plot(t, x1, 'LineWidth', 1); grid on;
xlabel('t (s)'); ylabel('x_1(t)'); title('Rect:x_1(t)=rect(t/T)');
xlim([-1.5*Trect, 1.5*Trect]);

% 频域幅度
nexttile; plot(f, abs(X1_num), 'LineWidth', 1); hold on;
plot(f, abs(X1_ana), '--', 'LineWidth', 1);
grid on; xlabel('f (Hz)'); ylabel('|X_1(f)|');
title('FT 幅度:数值 vs 解析'); legend('Numerical (FFT)','Analytic','Location','best');
xlim([-10/Trect, 10/Trect]);

% 频域相位(只在幅度较大处显示更有意义)
mask = abs(X1_ana) > 1e-2*max(abs(X1_ana));
nexttile; plot(f(mask), angle(X1_num(mask)), '.', 'MarkerSize', 6); grid on;
xlabel('f (Hz)'); ylabel('∠X_1(f) (rad)'); title('FT 相位(数值)');

% 误差
nexttile; plot(f, abs(X1_num - X1_ana), 'LineWidth', 1); grid on;
xlabel('f (Hz)'); ylabel('|X_{num}-X_{ana}|'); title('数值-解析 误差');
xlim([-10/Trect, 10/Trect]);

%% --------------------- 示例 2:sinc -> 矩形 ---------------------
Tsinc = 0.25*Trect;               % sinc 的时间尺度,可改
x2 = safe_sinc(t/Tsinc, sincn);    % x2(t) = sinc(t/Tsinc)
X2_num = ctft_fft(x2, dt);         % 数值CTFT近似
% 解析:T * rect(f*T) ;rect(f*T) 的宽度为 1/T
X2_ana = Tsinc * rectp(f, 1/Tsinc);

figure('Name','Sinc <-> Rect','Color','w');
tiledlayout(2,2,"Padding","compact","TileSpacing","compact");

% 时域
nexttile; plot(t, x2, 'LineWidth', 1); grid on;
xlabel('t (s)'); ylabel('x_2(t)'); title('Sinc:x_2(t)=sinc(t/T_s)');
xlim([-6*Tsinc, 6*Tsinc]);

% 频域幅度
nexttile; plot(f, abs(X2_num), 'LineWidth', 1); hold on;
plot(f, abs(X2_ana), '--', 'LineWidth', 1);
grid on; xlabel('f (Hz)'); ylabel('|X_2(f)|');
title('FT 幅度:数值 vs 解析'); legend('Numerical (FFT)','Analytic','Location','best');
xlim([-3/Tsinc, 3/Tsinc]);

% 频域相位(矩形为实非负,解析相位≈0;数值会因截断略波动)
mask2 = abs(X2_ana) > 1e-3*max(abs(X2_ana));
nexttile; plot(f(mask2), angle(X2_num(mask2)), '.', 'MarkerSize', 6); grid on;
xlabel('f (Hz)'); ylabel('∠X_2(f) (rad)'); title('FT 相位(数值)');

% 误差
nexttile; plot(f, abs(X2_num - X2_ana), 'LineWidth', 1); grid on;
xlabel('f (Hz)'); ylabel('|X_{num}-X_{ana}|'); title('数值-解析 误差');
xlim([-3/Tsinc, 3/Tsinc]);

%% ---------- 备注 ----------
% - 增大 L 与 N 可减小截断/采样误差(特别是 sinc 的无限支撑会被时间窗截断)。
% - 若只做DFT演示,可去掉 Δt 标度,此处的 Δt 标度是为了逼近连续型积分定义。
% - 本脚本不依赖专用工具箱;如有 Signal Processing Toolbox,也可用 rectpuls/sinc 直接替代。

%% ===================== 辅助函数 =====================
function [f, df] = make_freq_axis(N, dt)
    df = 1/(N*dt);
    f = ((-N/2):(N/2-1)).' * df;
end

function X = ctft_fft(x, dt)
    % 近似 CTFT:X(f) ≈ Δt * FFTshift( FFT( IFFTshift{x(t)} ) )
    X = fftshift( fft( ifftshift(x) ) ) * dt;
end

function y = safe_sinc(u, sincn)
    % 处理 u=0 处的 0/0
    y = sincn(u);
    y(u==0) = 1;
end

Rect <-> Sinc-pPbJ.png

2.4 卷积的离散傅立叶变换计算

弃置点 源自循环卷积卷绕错误的点

补零 为了避免错误输出,将两个序列长度都延拓补零至N=n_1+n_2-1,其中n_1 n_2 为序列初始长度。

为了提高效率,DFT长度N通常选为2的幂。

2.5 信号采样

采样要求与信号类型有关。

2.5.2 信号类型

实信号与复信号

复解调过程(正交解调)将实信号转换为含有相同信息的复信号。

信号带宽

如果信号的最高频率为f_2,最低(正)频率为f_1,则信号带宽为f_2-f_1

基本频率范围

指能完整保存信号信息的最低频率集合。

基带和非基带信号

对于实信号,基带信号是指最低正频相对于宽带很小的信号。

对于复信号,基带信号是指在一定的采样率下,连续信号的主要能量完全集中在基本范围内的信号。

2.5.3 奈奎斯特采样率和混叠

实信号采样

奈奎斯特采样率 对于有限带宽的连续基带信号,为使采样能正确描述信号信息,采样率必须高于最高信号频率的两倍,该最小采样率。

非基带实信号

奈奎斯特采样定理 采样率必须高于非基带实信号带宽的两倍。

复信号采样

混叠方程

F_apparent_complex

2.6 平滑窗

2.7 插值

2.7.1 sinc插值

例子一:理想(无限长核)sinc 插值
%% 1) 造一个带限离散信号(两条正弦,最高归一化频率 0.35 cycles/sample < 0.5)
n = -20:20;                   % 离散时间索引
T = 1;                        % 采样周期(先用 1,方便演示)
x = cos(2*pi*0.10*n) + 0.5*sin(2*pi*0.35*n);  % 原离散样本 x[n]

%% 2) 准备要重构的“连续时间”细网格(这里做 16 倍细化)
L = 16;                                        % 细化倍数
t = linspace(n(1), n(end), (numel(n)-1)*L + 1);% 连续时间网格,单位同 n*T

%% 3) 理想 sinc 插值(矢量化实现)
% 公式:x_rec(t) = sum_k x[k] * sinc( (t - k*T)/T )
[tt, nn] = ndgrid(t, n);       % 生成所有 (t, n) 配对
S = sinc((tt - nn*T)/T);       % 权重矩阵(无限长 sinc)
x_rec = S * x(:);              % 对每个 t 做加权求和

%% 4) 可视化
figure; clf
subplot(2,1,1);
stem(n*T, x, 'filled'); hold on; grid on
plot(t, x_rec, 'LineWidth', 1.5);
xlabel('t'); ylabel('幅度');
legend('原始 x[n]','sinc 重构 x(t)');
title('理想 sinc 插值(无限长核)');

%% 5) 和常见插值比较(可选)
subplot(2,1,2);
plot(t, x_rec, 'LineWidth', 1.5); hold on; grid on
x_lin = interp1(n*T, x, t, 'linear');      % 线性插值
x_spl = interp1(n*T, x, t, 'spline');      % 三次样条
plot(t, x_lin, '--');
plot(t, x_spl, ':', 'LineWidth', 1.2);
legend('sinc','linear','spline');
xlabel('t'); ylabel('幅度');
title('不同插值方式对比');

3b9350a8-61f1-4f11-97c6-1dba2a72b287.PNG

要点说明:

  • 这是“数学上的理想重构”,要求已知全体样本(核无限长)。实际中我们只有有限段,因此边缘附近会有误差和振铃(Gibbs-like),图上可见两端略差。

  • S*x(:) 是把每个 t 的权重与所有样本做一次内积,因此是 O(N\cdot N_\text{out}) 的计算量,N_out 是细网格点数。

例子二:工程常用的“窗化 + 截断”sinc(有限核)
%% 参数
R = 8;                 % 每侧截断长度(共 2R+1 个 taps)
useWindow = true;      % 是否使用窗函数(Hamming)
% 继续沿用上例中的 n, T, x, t

% 预分配
x_rec_win = zeros(size(t));

% 预先生成窗(对 |k|<=R 的离散 offset)
k = -R:R;
if useWindow
    win = hamming(2*R+1).';     % 行向量
else
    win = ones(1, 2*R+1);
end

% 对每个 t 只与附近 2R+1 个样本相乘求和(简单直观的写法)
for ii = 1:numel(t)
    tc = t(ii)/T;               % 以样本间隔为单位的连续时间
    n0 = floor(tc);             % 最近的样本整数索引
    idx = n0 + k;               % 邻域样本索引
    % 限制索引在有效范围内
    valid = (idx >= n(1)) & (idx <= n(end));
    idxv = idx(valid);

    % 计算对应的 sinc 权重并加窗
    w = sinc( (t(ii) - idxv*T)/T );         % 核
    % 对应的窗系数(按 k 的 valid 子集选择)
    wwin = win(valid);

    % 汇总求和
    xv = x( idxv - n(1) + 1 );              % 取样本值(索引换算)
    x_rec_win(ii) = sum( xv .* w .* wwin );
end

%% 绘图对比
figure; clf; grid on; hold on
plot(t, x_rec, 'LineWidth', 1.5);                 % 无限长(理论参考)
plot(t, x_rec_win, '--', 'LineWidth', 1.5);       % 窗化截断
stem(n*T, x, 'filled');
legend('理想 sinc','窗化截断 sinc','原样本','Location','best');
xlabel('t'); ylabel('幅度');
title(sprintf('窗化截断 sinc(R=%d, %s 窗)', R, ternary(useWindow,'Hamming','Rect')));

Picture1.png

工程实践建议:

  • R 取 6–16 通常就很不错;R 越大,越接近理想,但计算量上升。

  • 常见窗:Hamming(折中)、Blackman(旁瓣更低)、Kaiser(可调参数 β)。把 win = kaiser(2*R+1, beta).' 即可试不同 β。

  • 插值越接近区间中部效果越好,最边缘仍会比理想解差一些(因为缺失“无限远”的样本)。

2.8 点目标分析

峰值旁瓣比(PSLR)最大旁瓣与主瓣的高度比

第三章 线性调频信号的脉冲压缩

3.1 概述

脉冲压缩 一种频谱扩展方法,用于最小化峰值功率、最大化信噪比,以及获得高分辨率目标(如获得高灵敏度的目标检测能力或良好的图像质量)。

3.2 线性调频信号

瞬时频率是时间的线性函数,这种信号用于发射,以得到均匀的信号带宽,其在接受信号中则来自传感器运动。3.2.1 时域表达

f_{\text{cen}} 为0时,信号的复数形式为s(t)=rect(\frac{t}{T})\exp{{j{\pi}Kt^2}}

3.2.2 线性调频脉冲的频谱

3.3 脉冲压缩

3.3.1 脉冲压缩原理

如果发射脉冲的持续时间为T,则每一目标在回波数据中占据相同的时间间隔T,故压缩前的可分辨能力为\rho'=T

© 本文著作权归作者所有,未经许可不得转载使用。