MUSIC 测角
如果说 Capon 算法是通过“自适应抗干扰”的思想向窄主瓣迈进了一步,那么 MUSIC(Multiple Signal Classification,多信号分类)算法则带来了划时代的突破。MUSIC 的核心思想是将阵列观测空间通过特征值分解,严格划分为互相正交的信号子空间和噪声子空间,利用几何正交性来完成超高分辨率的测角。其分辨率和抗噪性能在非相干信号下达到了极高的水准。下面是 MUSIC 算法数学原理。 阵列信号模型设定 在均匀线性阵列标准模型下,阵列接收的快拍向量 x(t)∈CN×1x(t) \in \mathbb{C}^{N \times 1}x(t)∈CN×1 及其协方差矩阵 Rxx∈CN×NR_{xx} \in \mathbb{C}^{N \times N}Rxx∈CN×N 分别为: x(t)=As(t)+n(t)x(t) = As(t) + n(t) x(t)=As(t)+n(t) Rxx=E[x(t)xH(t)]=ARsAH+σ2INR_{xx} = \mathbb{E}[x(t)x^H(t)] = AR_sA^H + \sigma^2I_N Rxx=E[x(...
Capon 测角
继常规波束形成(DBF)之后,Capon 算法在阵列信号处理中通常被称为最小方差无失真响应(Minimum Variance Distortionless Response,MVDR)是走向“超分辨率”测角算法的关键一步。其核心思想是:自适应地构建空间滤波器。在观察某一特定方向 θ\thetaθ 时,它不仅让该方向的信号无失真地通过,同时还能最大程度地压低来自其他所有方向的噪声和干扰。因此,它的分辨率远超常规 DBF,能够突破瑞利限。下面 Capon 测角算法数学推导。 阵列信号模型设定 假设一个由 NNN 个阵元组成的均匀线性阵列,在 ttt 时刻接收到空间中 MMM 个远场窄带信号。阵列的接收快拍向量 x(t)∈CN×1x(t) \in \mathbb{C}^{N \times 1}x(t)∈CN×1 可以表示为: x(t)=∑m=1Ma(θm)sm(t)+n(t)=As(t)+n(t)x(t) = \sum_{m=1}^{M} a(\theta_m) s_m(t) + n(t) = As(t) + n(t) x(t)=m=1∑Ma(θm)sm(t)+n(t)=As(t...
雷达相关概念解析
上变频、混频、下变频 要理解变频流程,必须先理解核心器件——混频器(Mixer)。 混频(Mixing) 混频是一种利用非线性元件(如二极管或晶体管)将两个不同频率的输入信号组合,从而产生新频率的过程。 在理想情况下,当两个频率为 f1f_{1}f1 和 f2f_{2}f2 的信号输入混频器时,输出会产生两个主要的非线性组合频率: 和频:f1+f2f_{1} + f_{2}f1+f2 差频:∣f1−f2∣|f_{1} - f_{2}|∣f1−f2∣ 混频是上变频和下变频的底层物理机制。 上变频(Up-conversion) 上变频是将较低频率的信号(通常是中频 IF 或基带信号)转换成较高频率的信号(射频 RF)的过程。 为什么需要? 低频信号不适合直接进行无线远距离传输(因为频率低意味着波长长,所需的发射天线尺寸会大到无法实现)。 如何实现? 在发射机中,中频信号 fIFf_{IF}fIF 与本地振荡器(LO)产生的本振信号 fLOf_{LO}fLO 一起输入混频器,通过滤波器滤除差频,只保留和频作为射频信号发射出去: fRF=fIF+fLOf_{RF}...
Huge Packet 掉线问题修复总结
问题现象 在使用 udp2raw 串联 WireGuard 时,日志中频繁出现如下警告信息: 1[WARN] huge packet 4098 > 1800, dropped. maybe you need to turn down mtu... 表现为: 网络连接极不稳定,频繁掉线; 握手失败或连接无法建立; 完全断网的情况也可能出现。 这类问题通常与 UDP 包在传输过程中被异常合并或分割有关。 造成原因 经过排查发现,问题主要在于: 软件干扰:在连接 udp2raw 时启动了 Clash,导致其修改了网络收发机制; 系统行为:Windows 内核自动将多个合法的 UDP 包合并成单个大包,超出了 udp2raw 默认的最大处理包大小(1800 字节)。 根本原因 深入分析可知,其本质原因是系统与网络驱动层的特性冲突: 系统机制 Windows 默认可能启用以下网络优化技术: RSC (Receive Segment Coalescing) ——接收端合并多个小 UDP 包为大包以提升吞吐; GRO (Generic Receive Offload) ——...
Python 语法精炼26
Python 的动态代码执行机制:exec、eval、compile,这是 Python 运行时最具“元编程”特性的部分之一。 动态代码执行 Python 是动态语言,代码本身可以在运行时被生成、修改、再执行。这类能力主要通过三个内置函数实现: 函数 用途 eval(expr) 计算一个表达式字符串,返回结果 exec(code) 执行一段任意 Python 代码,不返回值 compile(source, filename, mode) 把字符串或 AST 编译成可执行代码对象,可配合 exec/eval 使用 这种机制是 Python 解释器的动态执行接口,常用于: 动态生成代码,如 DSL、模板、动态函数; 交互式解释器 / 脚本执行器; 元编程 / 插件系统; 调试、沙盒执行。 eval():动态求值表达式 语法 1eval(expression, globals=None, locals=None) 功能 只能执行“单个表达式”字符串,如"2 + 3", "a * b + c" 等; 返回表达式求值...
Python 语法精炼25
itertools 模块 itertools 模块提供了一系列高性能的迭代器生成函数,这些函数可以: 无缝组合(像拼积木一样) 惰性计算(按需生成,不一次性占用内存) 替代循环与列表推导式(更高效、更优雅) 导入方式: 1import itertools itertools 常见函数 类别 代表函数 功能说明 迭代器生成器 count(), cycle(), repeat() 创建无限序列 迭代器切片与选择 islice(), takewhile(), dropwhile(), filterfalse() 从迭代器中有条件地截取元素 迭代器组合 chain(), zip_longest(), product(), combinations() 组合或排列多个迭代器 分组与聚合 groupby(), accumulate() 对连续数据分组或累积 其他工具 tee(), starmap() 复制迭代器、展开元组调用函数 核心函数详解 itertools.chain():多个迭代器顺序连接 语法: 1itertools.chain(*itera...
Python 语法精炼24
Python 异步编程(Asynchronous Programming) 的核心语法部分,是 Python3.5+ 的重要特性之一,涉及: 协程(coroutine)机制:async def / await / async for / async with 同步 vs 异步 同步(Synchronous) 代码 逐行执行,一行没结束前下一行不会开始: 1234567891011def fetch_data(): time.sleep(3) # 阻塞3秒 return "data"def main(): print("Start") data = fetch_data() print("Got:", data) print("End")main() 执行顺序固定:Start → 等3秒 → Got: data → End 异步(Asynchronous) 异步程序 允许挂起等待任务完成,在等待期间可以执行其他任务。 这不是多线程,而是 单线程并发 —— 通过事...
Python 语法精炼23
参数类型 在 Python 3.8+ 中,函数参数可以用以下语法形式定义: 12def func(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2): pass 涉及三类关键的分隔符: 符号 含义 / 位置参数分界线(在此之前的参数必须通过位置传递) * 关键字参数分界线(在此之后的参数必须通过关键字传递) 无分隔符 既可用位置,也可用关键字传参 参数类别 位置参数(Positional arguments) 最常见的参数类型。 12def add(a, b): return a + b 调用方式: 12add(1, 2) # ✅ 位置传递add(a=1, b=2) # ✅ 关键字传递 注意:如果没有特殊声明,Python 默认允许既用位置又用关键字。 位置限定参数(Positional-only parameters) Python 3.8 新增 / 语法,用于限制某些参数只能通过位置传入,而不能使用关键字。 12def divide(a, b, /): return a / b 调用方式: ...
Python 语法精炼22
枚举 枚举(Enumeration)是一组 有名字的常量值。它的核心用途是: 让一组固定的、有限的值变得更清晰、更安全、更易维护。 比如:星期、颜色、状态码、权限等级等。 没有枚举 12345# 坏例子:直接用数字或字符串if status == 1: print("已启动")elif status == 2: print("已停止") 这段代码有问题: 可读性差:1 和 2 代表什么? 不安全:可能随意传入 3、“abc” 等错误值。 使用枚举 12345678910from enum import Enumclass Status(Enum): STARTED = 1 STOPPED = 2status = Status.STARTEDprint(status) # Status.STARTEDprint(status.name) # 'STARTED'print(status.value) # 1 枚举让代码语义更明确、类型更安全。 基本用法 定义枚举类 1234...
Python 语法精炼21
背景与目的 在 Python 中,很多类只是用来存放数据的(例如配置、记录、实体对象),它们通常包含: 一堆属性或者字段 一个 __init__ 构造函数 一个 __repr__、__eq__、__hash__ 等方法 手写这些方法既冗长又容易出错,因此: attrs 是一个第三方库(由 Hynek Schlawack 开发),最早解决了这个痛点; dataclasses 是 Python 3.7 引入的标准库,受 attrs 启发,提供类似功能。 dataclasses 模块详解 基本用法 123456from dataclasses import dataclass@dataclassclass Point: x: int y: int 等价于手写以下类: 12345678910class Point: def __init__(self, x: int, y: int): self.x = x self.y = y def __repr__(self): return f"Point(x=&...




