当前位置: 首页 > news >正文

[学习]RTKLib详解:rtkcmn.c与rtkpos.c

文章目录

    • Part A、Rrtkcmn.c
      • 一、总体功能
      • 二、关键API列表
      • 三、核心算法实现
      • 四、函数功能与参数说明
        • 1. `uniqnav`
        • 2. `lsq`
        • 3. `filter`
        • 4. `matmul`
        • 5. `satazel`
        • 6. `ionmapf`
        • 7. `geodist`
        • 8. `timeadd`
        • 9. `dgetrf_` / `dgetri_`(LAPACK接口)
      • 五、工作流程说明
        • 4.1 模块在RTKLib中的位置
        • 4.2 整体作用与工作流程分析
        • 4.3 模块内部函数调用关系
        • 4.4 关键流程说明
    • Part B、rtkpos.c
      • 一、整体作用与工作流程分析
      • 二、工作流程
        • 2.1 流程综述
        • 2.2 相对定位流程
        • 2. 3 模糊度解析流程
        • 2.4 状态更新流程
        • 2.5 注意事项
      • 三、函数详解
        • 1. `rtkinit`
        • 2. `relpos`
        • 3. `udpos`
        • 4. `udion`
        • 5. `udtrop`
        • 6. `udbias`
        • 7. `zdres`
        • 8. `ddres`
        • 9. `resamb_LAMBDA`
        • 10. `valpos`
      • 四、关键算法与数据结构

Part A、Rrtkcmn.c

一、总体功能

r t k c m n . c rtkcmn.c rtkcmn.c 是RTKLIB的核心公共模块,是GNSS数据处理的核心,涵盖了从原始观测数据到高精度定位解算的全流程,依赖高效的矩阵运算与数值方法(如卡尔曼滤波),实现动态环境下的实时定位,主要提供以下四类功能:

  1. 时间系统转换:GPS时间、UTC时间、年月日时分秒等格式的相互转换,如 g p s t 2 u t c ( ) gpst2utc() gpst2utc()
  2. 坐标系统转换:地心地固坐标系(ECEF)与大地坐标系(WGS84)的相互转换,如 e c e f 2 p o s ( ) ecef2pos() ecef2pos()
  3. 矩阵运算:提供基础线性代数运算,支持最小二乘解算等算法需求,如 m a t m u l ( ) matmul() matmul()
  4. 数据校验:实现GNSS通信协议中使用的CRC24Q、CRC32等校验算法,如 c r c 24 q ( ) crc24q() crc24q()

二、关键API列表

分类函数原型功能说明
时间转换void gpst2utc(const gtime_t t, double *utc)GPS时间转UTC时间
坐标转换void ecef2pos(const double *r, double *pos)ECEF转经纬高(WGS84)
矩阵运算void matcpy(double *A, const double *B, int n, int m)矩阵复制
数据校验uint32_t crc24q(const uint8_t *buff, int len)计算CRC24Q校验值
几何计算double geodist(const double *rs, const double *rr)计算卫星与接收机几何距离

三、核心算法实现

  1. CRC校验算法

    • 使用查表法优化计算速度
    • 多项式定义:
      #define POLYCRC24Q 0x1864CFBu  /* CRC24Q多项式 */
      
    • 实现特点:逐字节异或运算,支持数据流式处理
  2. 坐标转换算法

    • 使用迭代法求解大地纬度
      ϕ k + 1 = arctan ⁡ ( z + e ′ 2 b sin ⁡ 3 θ ( p − e 2 a cos ⁡ 3 θ ) ) \phi_{k+1} = \arctan\left(\frac{z + e'^2 b \sin^3\theta}{(p - e^2 a \cos^3\theta)}\right) ϕk+1=arctan((pe2acos3θ)z+e2bsin3θ)
      其中 p = x 2 + y 2 p=\sqrt{x^2+y^2} p=x2+y2 θ = arctan ⁡ ( z a / p b ) \theta=\arctan(z a / p b) θ=arctan(za/pb)
  3. 矩阵运算优化

    • 内存连续存储提高缓存命中率
    • 使用memcpy实现矩阵快速复制
    • 矩阵求逆采用LU分解法:
      A = P L U ⇒ A − 1 = U − 1 L − 1 P T A = PLU \Rightarrow A^{-1} = U^{-1}L^{-1}P^T A=PLUA1=U1L1PT

四、函数功能与参数说明

1. uniqnav
  • 功能:清理导航数据中的重复星历,更新载波波长。
  • 输入nav_t *nav(导航数据结构)。
  • 输出:无返回值,修改nav中的星历数据与波长表。
2. lsq
  • 功能:加权最小二乘估计,求解参数x及协方差矩阵Q
  • 输入
    • const double *A:设计矩阵的转置(n×m)。
    • const double *y:观测向量(m×1)。
    • int n, m:参数数量与观测数。
  • 输出
    • double *x:估计参数(n×1)。
    • double *Q:协方差矩阵(n×n)。
3. filter
  • 功能:卡尔曼滤波更新步骤,计算增益矩阵K并修正状态与协方差。
  • 输入
    • double *x, *P:当前状态与协方差。
    • const double *H, *v, *R:观测矩阵转置、残差、观测噪声协方差。
    • int n, m:状态数与观测数。
  • 输出
    • double *xp, *Pp:更新后的状态与协方差。
4. matmul
  • 功能:矩阵乘法(支持转置),计算C = alpha*A*B + beta*C
  • 输入
    • const char *tr:转置标志(“N”/“T”)。
    • int n, k, m:矩阵维度。
    • double alpha, beta:标量系数。
  • 输出:结果矩阵C(n×k)。
5. satazel
  • 功能:计算卫星方位角与仰角。
  • 输入
    • const double *pos:接收机地心坐标(纬度、经度、高度)。
    • const double *e:卫星至接收机单位向量(ECEF)。
  • 输出
    • double *azel:方位角(02π)与仰角(-π/2π/2)。
6. ionmapf
  • 功能:电离层映射函数(投影因子),将垂直延迟转换为斜路径延迟。
  • 输入
    • const double *pos:接收机位置(纬度、经度、高度)。
    • const double *azel:卫星方位角/仰角。
  • 输出:返回斜路径与垂直路径延迟比值。
7. geodist
  • 功能:计算接收机与卫星之间的几何距离(含地球自转修正)。
  • 输入
    • const double *rs:卫星位置(ECEF)。
    • const double *rr:接收机位置(ECEF)。
  • 输出:修正后的几何距离(米)。
8. timeadd
  • 功能:对时间结构gtime_t增加指定秒数。
  • 输入
    • gtime_t t:原始时间。
    • double sec:秒数(可为负)。
  • 输出:更新后的时间结构。
9. dgetrf_ / dgetri_(LAPACK接口)
  • 功能:LU分解与矩阵求逆(底层线性代数运算)。
  • 输入
    • int *n:矩阵阶数。
    • double *A:输入矩阵。
  • 输出:分解后的矩阵或逆矩阵。

五、工作流程说明

4.1 模块在RTKLib中的位置

在RTKlib内部,该模块调关系如下所示:

调用
调用
调用
rtkpos.c
rtkcmn.c
postpos.c
solution.c
矩阵运算
坐标转换
时间转换
4.2 整体作用与工作流程分析

该代码是RTKLIB库的核心模块(rtkcmn.c),实现了GNSS数据处理中的基础功能,包括:

  1. 导航数据处理:管理卫星轨道、钟差、电离层模型等数据。
  2. 观测数据处理:观测值去重、筛选、时间同步。
  3. 矩阵运算:线性代数运算(乘法、求逆、最小二乘解)。
  4. 卡尔曼滤波:状态更新与协方差矩阵调整。
  5. 时空转换:坐标系转换(ECEF/ENU)、时间系统转换(GPS/UTC)。
  6. 卫星几何计算:方位角/仰角、相位缠绕修正、潮汐效应。

工作流程

  • 输入:原始观测数据、导航电文、配置参数。
  • 处理:通过矩阵运算和卡尔曼滤波优化定位解,结合星历数据计算卫星位置,修正观测值误差(如电离层延迟)。
  • 输出:高精度定位结果(位置、速度、时间)及质量指标(DOP值)。

4.3 模块内部函数调用关系
uniqnav
uniqeph
uniqgeph
uniqseph
satwavelen
lsq
matmul
matinv
filter
filter_
matmul
matinv
satazel
xyz2enu
ecef2pos
geodist
OMGE
CLIGHT
ionmapf
sin
cos
timeadd
floor
dgetrf_
LAPACK
LAPACK

4.4 关键流程说明
  1. 导航数据处理

    • uniqnav调用uniqeph(GPS)、uniqgeph(GLONASS)、uniqseph(SBAS)去除重复星历,确保每个卫星仅保留最新轨道数据。
    • 调用satwavelen更新各频点载波波长。
  2. 最小二乘解算

    • lsq通过matmul构建法方程Q=A'A,调用matinv求逆矩阵,最终计算参数解x=Q^-1*A*y
  3. 卡尔曼滤波更新

    • filter将状态变量划分为有效子集(非零且正定协方差),调用filter_计算卡尔曼增益K,更新状态与协方差。
  4. 卫星几何计算

    • satazel通过xyz2enu将ECEF坐标转换为站心坐标系,计算方位角与仰角。
  5. 矩阵运算

    • 使用LAPACK加速时,matmulmatinv调用dgemm_dgetrf_等底层函数优化性能;否则使用纯C实现。

Part B、rtkpos.c

一、整体作用与工作流程分析

rtkpos.c 是 RTKLIB 库中实现高精度实时动态定位(RTK)的核心模块,主要负责从原始观测数据到最终位置解算的全流程处理,它实现了 RTK 定位的核心算法,涵盖状态估计、误差修正、模糊度解析及解算验证。代码结构清晰,模块化程度高,支持多频多系统观测数据处理,适用于高精度定位场景。其核心功能包括:

  • 状态估计与卡尔曼滤波:维护状态向量(位置、速度、加速度、电离层延迟、对流层延迟、相位偏差等)及其协方差矩阵,通过时间更新和观测更新进行动态调整。
  • 多系统支持:兼容 GPS、GLONASS、Galileo、BeiDou、QZSS 等多频段卫星系统。
  • 模糊度解析:采用 LAMBDA 算法或三频宽窄巷(WLNL/TCAR)方法固定整周模糊度,提升定位精度。
  • 误差模型与修正:处理电离层延迟、对流层延迟、卫星钟差、硬件偏差等误差项,并通过状态估计进行实时校正。
  • 解算验证:通过残差分析、卡方检验等方法验证解算结果的可靠性。

二、工作流程

2.1 流程综述
  1. 初始化

    • rtkinit:初始化 RTK 控制结构体 rtk_t,分配状态向量和协方差矩阵内存。
    • rtkopenstat:打开解算状态输出文件(如位置、速度、残差等)。
  2. 观测数据预处理

    • selsat:选择基站与流动站共同观测的卫星。
    • intpres:对残差进行时间插值(适用于后处理)。
  3. 状态时间更新

    • udpos:更新位置、速度、加速度的状态估计(基于动力学模型)。
    • udion:更新电离层延迟参数。
    • udtrop:更新对流层延迟参数。
    • udrcvbias:更新接收机硬件偏差。
    • udbias:更新相位偏差,检测周跳。
  4. 残差计算

    • zdres:计算单差残差(相位和伪距),考虑卫星钟差、几何距离、大气延迟等。
    • ddres:构建双差残差及其雅可比矩阵,用于卡尔曼滤波观测更新。
  5. 卡尔曼滤波

    • filter:执行卡尔曼滤波更新(未在代码中展示,但被 relposresamb_LAMBDA 调用),结合预测状态与观测残差。
  6. 模糊度解析

    • resamb_LAMBDA:使用 LAMBDA 算法求解整数模糊度,通过比率测试验证结果。
    • resamb_WLNL/TCAR:三频宽巷-窄巷模糊度解析(需外部扩展支持)。
  7. 解算验证与输出

    • valpos:验证解算结果的残差是否符合统计阈值。
    • holdamb:保持已固定的模糊度以供后续历元使用。
    • outsolstat:输出解算状态至文件(位置、速度、残差等)。
  8. 主流程

    • rtkpos:根据定位模式(单点、RTK、PPP)调用相应的解算函数,如 relpos(相对定位)或 pppos(PPP 定位)。

以下是基于 rtkpos.c 的函数调用关系 :

单点定位
PPP
相对定位
移动基线
rtkpos
定位模式
pntpos
pppos
relpos
relpos
udstate
udpos
udion
udtrop
udrcvbias
udbias
zdres
ddres
prectrop
gloicbcorr
test_sys
filter
resamb_LAMBDA
valpos
holdamb
valpos
outsolstat
outsolstat

流程说明

  1. 主入口函数 rtkpos

    • 根据定位模式(单点、PPP、相对定位、移动基线)调用不同的核心函数。
    • 单点定位:调用 pntpos
    • PPP 模式:调用 pppos
    • 相对定位/移动基线:调用 relpos
  2. 相对定位核心 relpos

    • 状态更新:调用 udstate,进一步调用以下子函数:
      • udpos:位置、速度、加速度的状态更新。
      • udion:电离层参数更新。
      • udtrop:对流层参数更新。
      • udrcvbias:接收机硬件偏差更新。
      • udbias:相位偏差更新(含周跳检测)。
    • 残差计算
      • zdres:单差残差计算。
      • ddres:双差残差及雅可比矩阵构建,依赖:
        • prectrop:对流层延迟模型。
        • gloicbcorr:GLONASS 通道间偏差校正。
        • test_sys:卫星系统类型判断。
    • 卡尔曼滤波:调用 filter(未在代码中展示,但逻辑上存在)。
    • 模糊度解析:根据配置调用 resamb_LAMBDA(默认)或 resamb_WLNL/TCAR
      • resamb_LAMBDA:LAMBDA 算法求解整数模糊度,依赖:
        • valpos:验证固定解。
        • holdamb:保持已固定模糊度。
    • 解算验证与输出
      • valpos:验证残差是否符合统计阈值。
      • outsolstat:输出解算状态至文件。
  3. 辅助函数

    • selsat:选择基站与流动站的共视卫星。
    • intpres:后处理中的残差时间插值。
    • statlevel:控制输出级别,决定是否生成状态文件。

2.2 相对定位流程
相对定位
rtkpos
定位模式
relpos
udstate
udpos
udion
udtrop
udrcvbias
udbias
zdres
ddres
prectrop
gloicbcorr
filter
resamb_LAMBDA
valpos
holdamb
valpos
outsolstat

流程说明

  • rtkpos 根据定位模式调用 relpos
  • relpos 调用 udstate 更新状态(位置、电离层、对流层、硬件偏差、相位偏差)。
  • zdresddres 计算单差/双差残差,依赖对流层模型 prectrop 和 GLONASS 通道间偏差校正 gloicbcorr
  • filter 执行卡尔曼滤波更新(未显式在代码中展示)。
  • resamb_LAMBDA 使用 LAMBDA 算法求解整数模糊度,通过 valpos 验证后调用 holdamb 保持模糊度。

2. 3 模糊度解析流程
resamb_LAMBDA
ddmat
lambda 外部库
ratio-test
holdamb

流程说明

  • resamb_LAMBDA 调用 ddmat 构建双差变换矩阵,依赖外部库 lambda 进行整数最小二乘搜索。
  • 通过比率测试(ratio-test)验证结果,成功后调用 holdamb 保持固定解。

2.4 状态更新流程
udstate
udpos
udion
udtrop
udrcvbias
udbias

流程说明

  • udstate 依次调用各子函数更新状态参数(位置、电离层、对流层、硬件偏差、相位偏差)。

2.5 注意事项
  • filter 的具体实现未在代码中展示,但逻辑上是卡尔曼滤波的核心步骤。
  • resamb_LAMBDA 依赖的 lambda 是外部库函数(如 CLIB 的 LAMBDA 算法实现)。
  • valposresamb_LAMBDArelpos 中多次调用,用于验证浮点解和固定解的残差。

三、函数详解

1. rtkinit
  • 功能:初始化 RTK 控制结构体。
  • 输入参数
    • rtk: RTK 控制结构体指针。
    • opt: 定位选项(如定位模式、误差模型)。
  • 输出参数
    • rtk->x, P: 状态向量和协方差矩阵初始化。
    • rtk->ssat: 卫星状态初始化。
2. relpos
  • 功能:执行相对定位(RTK)流程。
  • 输入参数
    • obs: 观测数据数组。
    • nu, nr: 流动站和基站观测数据的数量。
    • nav: 导航数据(卫星轨道、钟差等)。
  • 输出参数
    • rtk->sol: 解算结果(位置、速度、状态)。
    • rtk->x, P: 更新后的状态向量和协方差。
    • rtk->ssat: 卫星状态(残差、有效标志)。
3. udpos
  • 功能:更新位置、速度、加速度的状态估计。
  • 输入参数
    • rtk: RTK 结构体。
    • tt: 时间步长。
  • 输出参数
    • rtk->x, P: 状态向量和协方差更新。
4. udion
  • 功能:更新电离层延迟参数。
  • 输入参数
    • rtk: RTK 结构体。
    • tt, bl: 时间步长、基线长度。
    • sat, ns: 公共卫星列表及数量。
5. udtrop
  • 功能:更新对流层延迟参数(包括梯度项)。
  • 输入参数
    • rtk: RTK 结构体。
    • tt, bl: 时间步长、基线长度。
6. udbias
  • 功能:更新相位偏差,检测周跳(通过 LLI、几何自由相位跳跃、多普勒残差)。
  • 输入参数
    • rtk: RTK 结构体。
    • obs: 观测数据。
    • sat, iu, ir: 卫星列表及索引。
    • ns, nav: 公共卫星数、导航数据。
7. zdres
  • 功能:计算单差残差(相位和伪距),考虑大气延迟、天线相位中心修正等。
  • 输入参数
    • base: 接收机标识(1: 基站, 0: 流动站)。
    • obs: 观测数据。
    • rs, dts: 卫星位置和钟差。
    • rr: 接收机位置。
    • opt: 定位选项(如电离层模型)。
  • 输出参数
    • y: 残差向量。
    • e, azel: 卫星视线向量、方位角/仰角。
8. ddres
  • 功能:构建双差残差及其雅可比矩阵,用于卡尔曼滤波。
  • 输入参数
    • rtk: RTK 结构体。
    • nav: 导航数据。
    • dt: 时间差。
    • x, P: 当前状态和协方差。
    • sat, y, e, azel: 卫星列表、残差、视线向量。
  • 输出参数
    • v, H, R: 残差向量、雅可比矩阵、观测噪声协方差。
9. resamb_LAMBDA
  • 功能:使用 LAMBDA 算法求解整数模糊度。
  • 输入参数
    • rtk: RTK 结构体。
    • bias, xa: 模糊度偏差、固定解状态。
  • 输出参数
    • rtk->xa, Pa: 固定解状态和协方差。
    • rtk->sol.stat: 解算状态(浮点解/固定解)。
10. valpos
  • 功能:验证解算结果的残差是否符合统计阈值。
  • 输入参数
    • v, R: 残差向量、观测噪声协方差。
    • vflg: 残差标识(卫星对、频率等)。
    • nv, thres: 残差数量、阈值。
  • 输出参数
    • 返回验证结果(成功/失败)。

四、关键算法与数据结构

  1. 状态向量组织

    • 通过宏 NP, NI, NT, NL, NB 计算不同参数(位置、电离层、对流层、硬件偏差、相位偏差)在状态向量中的索引。
  2. 卡尔曼滤波

    • 预测步骤:由 udstate 调用各 ud* 函数更新状态。
    • 更新步骤:通过 ddres 构建观测矩阵并调用 filter 进行卡尔曼增益计算。
  3. 模糊度解析

    • LAMBDA 算法通过整数最小二乘(ILS)搜索最优整数解,并通过比率测试验证可靠性。
  4. 多系统支持

    • 通过 test_sys 判断卫星所属系统(GPS/GLO/GAL/BDS/QZS)。

研究学习不易,点赞易。
工作生活不易,收藏易,点收藏不迷茫 :)


相关文章:

[学习]RTKLib详解:rtkcmn.c与rtkpos.c

文章目录 Part A、Rrtkcmn.c一、总体功能二、关键API列表三、核心算法实现四、函数功能与参数说明1. uniqnav2. lsq3. filter4. matmul5. satazel6. ionmapf7. geodist8. timeadd9. dgetrf_ / dgetri_(LAPACK接口) 五、工作流程说明4.1 模块在RTKLib中的…...

cookie/session的关系

什么是cookie,session 我们平时去医院看病时,从进医院那一刻,我们最开始要做的就是挂号(需要我们填写表格,记录一些核心信息,医生会把这些信息录入电脑,并给我办一个就诊卡,卡里面只…...

Linux(十四)进程间通信(IPC),管道

一、进程间通信 (一)系统介绍进程间通信 进程间通信(IPC)介绍 小编插入的这篇文章详细介绍了进程间通信的一些内容,大家可以一起学习。 (二)进程间通信的方法 1、管道 2、信号量 3、共享…...

Nmap 工具的详细使用教程

Nmap(Network Mapper)是一款开源且功能强大的网络扫描和安全审计工具。它被广泛用于网络发现、端口扫描、操作系统检测、服务版本探测以及漏洞扫描等。 官方链接: Nmap 官方网站: https://nmap.org/Nmap 官方文档 (英文): https://nmap.org/book/man.h…...

Vue 自定义指令输入校验过滤

/*** 过滤字符串* param {*} filterCharRule* param {*} newVal* returns*/ function filterCharForValue(filterCharRule, newVal) {if(!filterCharRule || !newVal) returnconst isArray filterCharRule instanceof Arrayconst isRegExp filterCharRule instanceof RegExpi…...

OpenGl实战笔记(2)基于qt5.15.2+mingw64+opengl实现纹理贴图

一、作用原理 1、作用:将一张图片(纹理)映射到几何体表面,提升视觉真实感,不增加几何复杂度。 2、原理:加载图片为纹理 → 上传到 GPU;为顶点设置纹理坐标(如 0~1 范围)&…...

tinyrenderer笔记(透视矫正)

tinyrenderer个人代码仓库:tinyrenderer个人练习代码 引言 还要从上一节知识说起,在上一节中我为了调试代码,换了一个很简单的正方形 obj 模型,配上纹理贴图与法线贴图进行渲染,得了下面的结果: what&…...

c++类【发展】

类的静态成员(用static声明的成员),在声明之外用例单独的语句进行初始化,初始化时,不再需要用static进行限定。在方法文件中初始化。以防重复。 特殊成员函数 复制构造函数: 当使用一个对象来初始化另一个对象…...

玛格丽特鸡尾酒评鉴,玛格丽特酒的寓意和象征

玛格丽特鸡尾酒会有独特的风味,而且还会有一个比较吸引人的背后故事。在目前的鸡尾酒界就会占据着很重要的地位,不仅是味蕾的盛宴,同样也会拥有深厚的情感。 玛格丽特由龙舌兰酒、柠檬汁和君度橙酒调制而成,将三者巧妙地结合在一起…...

关于Java多态简单讲解

面向对象程序设计有三大特征,分别是封装,继承和多态。 这三大特性相辅相成,可以使程序员更容易用编程语言描述现实对象。 其中多态 多态是方法的多态,是通过子类通过对父类的重写,实现不同子类对同一方法有不同的实现…...

SecureCrt设置显示区域横列数

1. Logical rows //逻辑行调显示区域高度的 一般超过50就全屏了 2. Logical columns //逻辑列调显示区域宽度的 3. Scrollback buffer //缓冲区大小...

【PhysUnits】1 SI Prefixes 实现解析(prefix.rs)

一、源码 // prefix.rs //! SI Prefixes (国际单位制词头) //! //! 提供所有标准SI词头用于单位转换,仅处理10的幂次 //! //! Provides all standard SI prefixes for unit conversion, handling only powers of 10.use typenum::{Z0, P1, P2, P3, P6, P9, P12, …...

【Python】--实现多进程

import multiprocessing import time # 1.定义好函数 # codeing def coding():for i in range(10):print(f正在编写第{i}行代码)time.sleep(0.2)# music def music():for i in range(10):print(f正在听第{i}首歌曲)time.sleep(0.2)单任务 # 单任务--时间为4s多 if __name__ _…...

计算机视觉与深度学习 | 基于数字图像处理的裂缝检测与识别系统(matlab代码)

🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅 基于数字图像处理的裂缝检测与识别系统 🥦🥦🥦🥦🥦🥦🥦🥦🥦🥦🥦🥦🥦**系统架构设计****1. 图像预处理**目标:消除噪声+增强裂缝特征**2. 图像分割**目标:提取裂缝区域**3. 特征…...

嵌入式MCU语音识别算法及实现方案

在嵌入式MCU(微控制器单元)中实现语音识别,由于资源限制(如处理能力、内存、功耗等),通常需要轻量级算法和优化技术。以下是常见的语音识别算法及实现方案: 一、传统语音识别算法 动态时间规整&…...

【C++核心技术深度解析:从继承多态到STL容器 】

一、C继承机制:代码复用与层次设计 1. 继承基础概念 什么是继承? 继承是面向对象编程的核心机制,通过class Derived : public Base让子类(派生类)复用父类(基类)的属性和方法,同时…...

【C/C++】new关键字解析

📘 C 中 new 关键字详解笔记 🔹 什么是 new? new 是 C 中用于动态内存分配的关键字,它在堆内存中为对象或变量分配空间,并返回对应类型的指针。 与 C 语言中的 malloc 相比,new 更安全、更方便&#xff…...

C++高性能内存池

目录 1. 项目介绍 1. 这个项目做的是什么? 2. 该项目要求的知识储备 2. 什么是内存池 1. 池化技术 2. 内存池 3. 内存池主要解决的问题 4.malloc 3. 先设计一个定长的内存池 4.高并发内存池 -- 整体框架设计 5. 高并发内存池 -- thread cache 6. 高并发内存池 -- …...

chili3d调试笔记12 deepwiki viewport

xiangechen/chili3d | DeepWiki viewport阅读 🧠deep 我要把模型投影成dxf导出有什么办法 引用lookat 截图是如何实现的 明天接着搞 ----------------------------------------------------------------...

前端取经路——JavaScript修炼:悟空的九大心法

大家好,我是老十三,一名前端开发工程师。JavaScript如同孙悟空的七十二变,变化多端却又充满威力。本篇文章我将带你攻克JS中最令人头疼的九大难题,从闭包陷阱到原型链继承,从异步编程到性能优化。每个难题都配有实战代…...

从零实战:在Xilinx Zynq PS端移植VxWorks 6.9系统

一、环境准备与工具链搭建 1.1 硬件配置清单 开发板: Zynq-7000系列(推荐ZedBoard或ZCU102)调试工具: USB-JTAG调试器(如Xilinx Platform Cable USB II)存储介质: SD卡(建议Class 10以上)1.2 软件环境 工具版本作用Vivado2022.1FPGA硬件设计Vitis2022.1系统集成开发Wind…...

网工实验——RIP配置

网络拓扑图 配置 1.为每台设备配置ip地址 AR4 <Huawei>u t m <Huawei>sys [Huawei]sysname AR4 [AR4]int g0/0/0 [AR4-GigabitEthernet0/0/0]ip address 172.16.1.1 24 [AR4-GigabitEthernet0/0/0]q#下面配置换回口&#xff0c;模拟网 [AR4]int LoopBack 0 [AR4…...

前端流行框架Vue3教程:14. 组件传递Props效验

(4) 组件传递Props效验 Vue组件可以更细致地声明对传入的props的校验要求 ComponentA.vue <script> import ComponentB from ./ComponentB.vue; export default {components: {ComponentB},data() {return {title: 标题}} } </script> <template><h3&g…...

电子电器架构 --- 网关ECU中采用多CPU解决方案来实现网关功能

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

关于tftpboot的用法

TFTPBOOT 是一个常用于嵌入式系统或网络设备中的命令&#xff0c;用于通过 TFTP 协议从网络上启动操作系统镜像或引导文件。这个命令通常在设备启动时执行&#xff0c;允许设备通过网络从 TFTP 服务器下载启动镜像或其他必要的文件&#xff0c;而不需要从本地存储中启动。 一般…...

团队协作的润滑剂——GitHub与协作流程

各位代码界的社交恐惧症患者们&#xff0c;今天我们要聊的是如何假装自己很会团队协作——使用GitHub&#xff01;这就像程序员版的"相亲平台"&#xff0c;只不过在这里&#xff0c;你展示的不是自拍和收入&#xff0c;而是代码和commit记录&#xff08;后者往往更令…...

数据库复习

DML操作包括&#xff1a; SELECT INSERT UPDATE DELETE MERGE 返回字符串长度&#xff1a;length() 查询记录&#xff1a;SELECT 增&#xff08;INSERT&#xff09;、删&#xff08;DELETE&#xff09;、改&#xff08;UPDATE&#xff09;、查&#xff08;SELECT&#…...

AI与机器学习、深度学习在气候变化预测中的应用与实践

前言&#xff1a; 全球气候变化是现代社会面临的最重要的环境挑战之一&#xff0c;影响了气温、降水、海平面、农业、生态系统等多个方面。气候变化的驱动因素主要包括温室气体排放、气溶胶浓度、火灾频发、海冰融化、叶绿素变化、农业变化和生态环境变化等。这些因素在全球范围…...

Laravel 12 基于 EMQX 实现 MQTT 消息发送与接收

Laravel 12 基于 EMQX 实现 MQTT 消息发送与接收 要在 Laravel 12 中实现基于 EMQX 的 MQTT 消息发送与接收&#xff0c;你可以按照以下步骤操作&#xff1a; 1. 安装必要的依赖包 首先安装 MQTT 客户端库&#xff1a; composer require php-mqtt/client2. 配置 EMQX 连接 …...

论广告系统对存算分离架构的应用

辅助论点 辅助论点一&#xff1a;存算分离架构起源于数据库领域&#xff0c;并不是在线系统。 存算分离的架构源于Google的Spanner数据库&#xff0c;这个数据库采用了KV做存储层&#xff0c;OLAP做计算层的分离式设计&#xff0c;其目的是能快速伸缩计算资源&#xff0c;且节…...

create-vue搭建Vue3项目(Vue3学习2)

一、认识create-vue image.png 二、create-vue搭建Vue3项目 image.png image.png 依次执行npm install 和npm run dev即可运行项目 image.png image.png © 著作权归作者所有,转载或内容合作请联系作者 喜欢的朋友记得点赞、收藏、关注哦&#xff01;&#xff01;&#xff…...

NHDEEP档案管理系统功能介绍

NHDEEP档案管理系统单机版专注于提高档案管理效率&#xff0c;无需网络连接即可独立运作&#xff0c;确保数据的安全与私密性。无论是机关单位的常规档案工作&#xff0c;还是工程、基建项目的特殊档案管理需求&#xff0c;系统都能提供全面的解决方案。系统支持信创环境。 核心…...

【C++】C++中的命名/名字/名称空间 namespace

C中的命名/名字/名称空间 namespace 1、问题引入2、概念3、作用4、格式5、使用命名空间中的成员5.1 using编译指令&#xff08; 引进整个命名空间&#xff09; ---将这个盒子全部打开5.2 using声明使特定的标识符可用(引进命名空间的某个成员) ---将这个盒子中某个成员的位置打…...

游戏引擎学习第260天:在性能分析器中实现钻取功能

昨天那个帧内存满之后触发段错误实在没找到什么原因导致的 继续研究一下为什么导致的 内存不够进来释放frame 释放frame 应该会给DebugState->FirstFreeStoredEvent 赋值吧 这段宏定义&#xff1a; #define FREELIST_DEALLOCATE(Pointer, FreeListPointer) \if(Pointer) {…...

人工智能100问☞第15问:人工智能的常见分类方式有哪些?

目录 一、通俗解释 二、专业解析 三、权威参考 人工智能的常见分类方式包括:​​按智能水平​​(弱人工智能、通用人工智能、超级人工智能)、​​按技术原理​​(生成式AI、判别式AI、强化学习)、​​按功能目标​​(生成内容、优化决策)、​​按应用领域​​(自然语…...

JavaSE核心知识点01基础语法01-04(数组)

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 JavaSE核心知识点01基础语法01-04&#xff0…...

抖音代播领航者——品融电商(PINKROON)的运营实力与服务解析

抖音代播领航者——品融电商&#xff08;PINKROON&#xff09;的运营实力与服务解析 在兴趣电商高速发展的背景下&#xff0c;杭州品融品牌管理有限公司&#xff08;PINKROON&#xff09;凭借其全域增长方法论与抖音生态的深度布局&#xff0c;成为众多品牌首选的抖音代播服务商…...

LeetCode 790 多米诺和托米诺平铺 题解

对于本题不去看LeetCode的评论区和题解很难想到如何去dp&#xff0c;毕竟就算再怎么枚举也很难找到适用于面向结果的规律。所以对于题解我建议大家还是去看一下灵神给的题解&#xff0c;以下是灵神汇总的图&#xff0c;如果能看懂的话&#xff0c;对于解决题目有很大的帮助。 根…...

力扣-hot100 (缺失的第一个正数)

41. 缺失的第一个正数 困难 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xff…...

Electrolink信息泄露(CVE-2025-28228)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…...

Leetcode Hot 100 三数之和

思路 对数组先排序&#xff0c;然后使用双指针法进行&#xff0c;并且整个过程需要把握去重的逻辑 代码 class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:if not nums:return []nums.sort() #去重都需要排序res[]for i in range(len(nums)):if i…...

5月6日日记

一点心得是 看通知要仔细认真&#xff0c;自己想问的问题要先看看通知或者文件中说了没有&#xff0c;如果没说再去问相关负责人。 上课的教室一定要看好&#xff0c;看准了再去。别像今天一样先去了科技楼又去了工学馆。 线代开课了。感觉总体还行&#xff0c;并不是很难。…...

巧记英语四级单词 Unit7-中【晓艳老师版】

collapse v.倒塌&#xff0c;坍塌 都(col)来扑(lap)噻immune a.不受影响的&#xff0c;免疫的 我im 木讷mune&#xff0c;人应该木讷一点yard n.院子 鸭的&#xff0c;在哪养&#xff1b;backyard 后院backward a.往后的 ward表示方向 profile n.外形&#xff0c;轮廓 从前面看…...

Windows系统修改Docker Desktop(WSL2)内存分配

# Windows查看docker信息 docker info 新增wsl全局配置文件(.wslconfig文件)&#xff1a;windows路径栏输入&#xff1a;%UserProfile%&#xff0c;找到目录C:\Users\Administrator&#xff0c;默认是没有这个配置文件的&#xff0c;可以自己新增 # 设置在wsl2上运行 [wsl2] # …...

Oracle02-安装

零、文章目录 Oracle02-安装 1、Windows Server2022安装Oracle11g &#xff08;1&#xff09;下载 百度网盘地址&#xff1a; https://pan.baidu.com/s/15MBkMt1ldbSFm4L74h7Myg?pwd8888下载完成两个压缩包解压放在一起 &#xff08;2&#xff09;安装 双击 setup 文件安…...

Linux[Makefile]

Makefile基础结构 规则语法 target: prerequisitescommandtarget&#xff1a;生成的目标&#xff08;如可执行文件、.o文件&#xff09; prerequisites&#xff1a;依赖项&#xff08;源码、头文件等&#xff09; command&#xff1a;构建命令&#xff08;必须用Tab缩进&am…...

相同的数(简单)

深度优先搜索 如果两个二叉树都为空&#xff0c;则两个二叉树相同。如果两个二叉树中有且只有一个为空&#xff0c;则两个二叉树一定不相同。 如果两个二叉树都不为空&#xff0c;那么首先判断它们的根节点的值是否相同&#xff0c;若不相同则两个二叉树一定不同&#xff0c;…...

「Mac畅玩AIGC与多模态22」开发篇18 - 多段输出拼接与格式化展现工作流示例

一、概述 本篇以已有多字段输出为基础&#xff0c;介绍如何通过执行 LLM 节点对多个上游字段进行统一拼接与格式化处理。开发人员将学习如何从多个节点输出中提取数据字段&#xff0c;并组合为结构清晰、风格统一的最终输出&#xff0c;提升用户阅读体验。 二、环境准备 mac…...

餐饮部绩效考核管理制度与综合评估方法

在竞争激烈的餐饮行业中&#xff0c;标准化与数据驱动的管理手段正成为提升服务质量与运营效率的关键。绩效考核不仅关乎员工奖惩&#xff0c;更直接影响顾客体验、成本控制与营收水平。构建一套科学有效的绩效体系&#xff0c;是餐饮部精细化运营的起点。 本文围绕餐饮部绩效…...

conda虚拟环境相关操作

查看当前存在哪些虚拟环境 conda env list conda info --env创建虚拟环境conda create -n env_name pythonX.X删除虚拟环境conda remove -n env_name --all查看安装了哪些包conda list下载/删除环境中的某个包conda install package_nameconda uninstall package_name删除所有未…...