news 2026/10/10 2:56:40

2D-CFAR雷达二维信号恒虚警检测:原理、MATLAB实现与参数标定

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2D-CFAR雷达二维信号恒虚警检测:原理、MATLAB实现与参数标定

简介:面向雷达信号处理课程设计与MATLAB仿真实践者,资源提供了基于二维恒虚警检测(2D-CFAR)的完整MATLAB仿真实现,覆盖发射信号生成、目标回波模拟、距离-多普勒处理及CFAR检测判决等关键环节。代码基于MATLAB R2022a编写,关键处配有中文注释,同时附带仿真操作录像,帮助初学者对照视频理解算法流程与参数设置。资源共4个文件:2个m脚本分别承担主程序运行与核心检测逻辑,1个mat文件保存仿真所需的最优参数组合,1个avi录像展示完整操作过程,压缩包整体813KB,轻量便捷。已有1128人学习下载,适合作为课外实验、课程报告或研究生入门雷达信号处理的参考素材。通过Runme.m可一键启动仿真,TwoDimensionalCFAR.m体现CFAR阈值计算与目标判定细节,bestCombinations.mat便于复现实验,录像则演示了当前文件夹路径设置及运行步骤,有效规避路径错误等常见问题,提升复现效率。

1. 从“看不清”到“报得稳”:2D-CFAR在雷达二维信号检测里到底改了什么

雷达信号处理里最让人头疼的一件事,不是做不出目标回波,而是背景一变,固定门限立刻失灵。晚上跑一版距离-多普勒矩阵,目标明明在图上很亮,可用统一门限检测要么虚警一片,要么弱小目标被抑制。基于2D-CFAR的雷达二维信号恒虚警检测,就是用二维滑窗实时估计每个检测单元周边的背景功率,让门限跟着杂波走,在虚警率和检测率之间保持一个可控制的平衡。它的输入是距离-多普勒矩阵,输出是二值检测图,中间需要确定的就是窗口尺寸和门限因子。

这篇笔记面向三类人:刚接触雷达仿真、想用matlab跑通2D-CFAR的初学者;论文或项目里需要把一维CFAR扩成二维检测的开发者;以及正在研究参数设置和边缘效应的人。后面的内容会从RD矩阵的数据组织讲起,给出一套带中文注释的matlab实现,再针对几个常踩的坑给出排查方法,最后落到如何用蒙特卡洛标定门限因子,让参数调整不再是拍脑袋决定。

2. 距离-多普勒矩阵与2D-CFAR检测原理:滑动窗、保护单元和门限计算

2.1 RD矩阵的数据组织与杂波模型

在FMCW雷达或脉冲多普勒雷达里,回波经过混频、采样、距离FFT和多普勒FFT之后,会变成一张二维复数矩阵。横轴通常是距离维,一个bin代表一个距离分辨单元;纵轴是多普勒维,一个bin代表一个多普勒通道,对应目标相对雷达的径向速度。这张矩阵就是常说RD谱,也是2D-CFAR的检测输入。

RD矩阵有三个明显的特点需要注意。第一,数据是复数形式,但CFAR检测阶段一般取模值,目的是把相位信息丢掉,只保留幅度做门限比较。第二,热噪声经过FFT之后仍然服从复高斯分布,取模之后幅度服从瑞利分布,这是理论推导CFAR门限的基础。第三,目标回波在RD矩阵上不是一个孤立点,而是会向相邻的距离和多普勒单元泄漏,形成一个能量较集中的尖峰区域,所以检测器里必须有保护窗来避免目标自身污染背景估计。

杂波的情况比热噪声复杂。地杂波、海杂波在RD矩阵上可能表现为大面积的慢速起伏,幅度分布偏离瑞利,更接近韦布尔或对数正态分布。实际工程里,如果杂波不均匀性太严重,CA-CFAR这种取均值的做法会偏高或偏低,更常见的做法是换成单元平均选大CFAR或有序统计CFAR。但对于仿真学习和算法验证,从CA-CFAR入手最直观,因为它的统计特性和参数关系有明确的理论结论。

RD矩阵还有一个容易被新手忽略的性质:边缘单元的有效统计窗是受限的。靠近矩阵上下左右边界的检测单元,它的参考窗会被硬边界截掉一部分,可用的训练单元数量明显变少,这会让门限估计的方差变大,导致边缘虚警率远高于中心区域。这个问题在第5章会展开讲处理办法。

2.2 参考窗、保护窗与门限因子:为什么2D-CFAR比两个一维级联更稳

2D-CFAR检测的基本结构分为三层。最中心是被测单元,英文缩写CUT,也就是当前要判断有没有目标的那个bin。紧贴着CUT的是一圈保护窗,标记为GU,这一圈的样本不参与背景功率统计,它们的任务是把目标泄漏出来的能量隔开。保护窗外面是参考窗,也叫训练窗,标记为RU,这圈样本用于估计局部噪声加杂波的平均功率。

门限的计算方式是:取参考窗内所有样本幅度的平均值,乘上一个门限因子,得到该CUT的判决门限。如果CUT的幅度超过这个门限,就判定为目标,否则判为无目标。这个思路和固定门限最大的区别在于,门限是随位置变化的,杂波强的地方门限自动抬高,弱杂波区门限自动降低,从而让整个检测过程的虚警概率尽量维持在设定水平。

计算二维滑动窗内的平均值时,参考窗内样本数量N_train起着关键作用。在平方律检波条件下,CA-CFAR的虚警概率理论公式为Pfa等于(1加alpha除以N_train)的负N_train次方,由此可以反推alpha等于N_train乘上(Pfa的负N_train分之一再减一)。这个公式给了一个直观结论,alpha不是随便取的,它和N_train绑定在一起才算有效。但要注意,这个关系是在样本独立、窗完整的前提下成立的,幅度域检波时alpha要做相应换算,否则直接套公式会得到偏小的门限。

为什么不直接用两个一维CFAR级联?常见做法是先距离维检测,再多普勒维检测,看起来做了两次恒虚警。实际上,两次独立门限叠加会让整体检测概率下降,而且目标如果只在某一个维度上能量集中,在另一个维度上扩散得比较宽,级联处理很容易把目标漏掉。2D-CFAR用同一个二维参考窗同时估计两个方向的背景,门限出自同一片上下文,不需要人为分配两级虚警率,天然更适合RD矩阵这种二维平面数据。

下面用一个表格把3个核心参数的作用列出来,方便后续对照代码理解。

参数含义常见取值范围选参倾向
guard_x距离维保护窗单侧单元数2 ~ 4大目标取大,小目标取小
guard_y多普勒维保护窗单侧单元数2 ~ 4多普勒扩展宽时取大
train_x距离维参考窗单侧单元数4 ~ 8追求稳健取大,但边缘损失更多
train_y多普勒维参考窗单侧单元数4 ~ 8同上
alpha门限因子0.1 ~ 1.0虚警率与检测率的折中

3. 基于2D-CFAR的matlab仿真实现:最小可复现代码与参数说明

3.1 构造模拟雷达二维回波矩阵:复高斯噪声与高斯核目标

仿真第一步是生成一个可控的RD矩阵。这里不依赖实测数据,而是用复高斯随机数模拟热噪声背景,再注入几个不同幅度的目标点,让信号模型完全透明,便于后面分析CFAR的行为。固定随机种子是为了保证每次运行结果一致,方便对比不同参数下的检测效果。

% 模拟距离-多普勒回波矩阵 rng(42); % 固定随机种子,结果可复现 NR = 400; % 距离维单元数 ND = 300; % 多普勒维单元数 sigma_n = 1.0 / sqrt(2); % 实部虚部标准差 % 复高斯噪声背景,取模后幅度服从瑞利分布 rd_complex = sigma_n * (randn(NR, ND) + 1j * randn(NR, ND)); % 注入目标:每行 [距离bin, 多普勒bin, 峰值幅度] targets = [120, 80, 3.0; 250, 190, 2.2; 70, 240, 1.6]; for k = 1:size(targets, 1) tr = targets(k, 1); td = targets(k, 2); am = targets(k, 3); % 用高斯核模拟FFT后的主瓣泄漏 for dr = -2:2 for dd = -2:2 weight = exp(-(dr^2 + dd^2) / 2); rd_complex(tr + dr, td + dd) = rd_complex(tr + dr, td + dd) + am * weight; end end end % CFAR输入取幅度 rd_abs = abs(rd_complex);

这段代码里有三个值得说明的点。第一,噪声基底设定为幅度约1.0,目标峰值幅度从1.6到3.0,相当于目标峰值信噪比在4.1dB到9.5dB之间,覆盖了从弱目标到强目标的范围,便于观察CFAR在低信噪比下的表现。第二,目标不是单点注入而是用高斯核散布到9个单元,模拟了FFT处理后主瓣和旁瓣的泄漏效果,这时候保护窗的作用才会真正体现。第三,randn生成的是标准正态分布随机数,乘以1.0除以根号2之后,实部和虚部叠加起来的幅度均方根约为1.0。

实际项目里,RD矩阵的数据来源可能是毫米波雷达的原始ADC数据经过信号处理链路得到的,也可能是仿真软件导出的矩阵,但到了CFAR这一步,输入格式都是一样的,一个NR乘ND的复数或幅度矩阵。所以这个模拟数据生成过程,本质上就是为你后续接入真实数据打一个最小可用底座。

3.2 2D-CFAR核心检测函数:窗口遍历、门限判决与三图送显

核心检测函数用嵌套循环实现,虽然效率不高,但逻辑最清晰,适合作为第一个跑通的版本。函数的输入是幅度矩阵RD、保护窗尺寸、训练窗尺寸和门限因子,输出是门限曲面和检测二值图。

function [th, det] = cfar2d_core(rd, guard_x, guard_y, train_x, train_y, alpha) % 2D-CFAR核心检测函数,CA型均值检测 % 输入: % rd : 幅度矩阵,尺寸 NR x ND,非dB % guard_x : 距离维保护窗单侧单元数 % guard_y : 多普勒维保护窗单侧单元数 % train_x : 距离维参考窗单侧单元数 % train_y : 多普勒维参考窗单侧单元数 % alpha : 门限因子,门限 = alpha x 参考窗幅度均值 % 输出: % th : 门限曲面,与rd同尺寸 % det : 二值检测结果,1表示判定为目标单元 [NR, ND] = size(rd); th = zeros(NR, ND); det = zeros(NR, ND); for ii = 1:NR for jj = 1:ND % 参考窗边界,越界部分用min/max裁剪 x1 = max(1, ii - train_x - guard_x); x2 = min(NR, ii + train_x + guard_x); y1 = max(1, jj - train_y - guard_y); y2 = min(ND, jj + train_y + guard_y); % 保护窗边界,保护窗包含被测单元本身 gx1 = max(1, ii - guard_x); gx2 = min(NR, ii + guard_x); gy1 = max(1, jj - guard_y); gy2 = min(ND, jj + guard_y); % 收集训练单元,跳过保护窗区域 train_sum = 0; train_num = 0; for x = x1:x2 for y = y1:y2 if x >= gx1 && x <= gx2 && y >= gy1 && y <= gy2 continue; end train_sum = train_sum + rd(x, y); train_num = train_num + 1; end end if train_num == 0 continue; end % 门限计算与判决 noise_est = train_sum / train_num; th(ii, jj) = alpha * noise_est; if rd(ii, jj) > th(ii, jj) det(ii, jj) = 1; end end end end

这个实现思路是一个CUT一个CUT地处理。对每一个中心单元,先算出参考窗的上下左右边界,再算出保护窗的范围,然后两层循环累加训练单元幅度值,最后用均值乘alpha得到门限。这里有一个关键设计:保护窗使用continue跳过,而不是单独挖空二维数组,逻辑上更直观,也避免了索引错位。train_num在边缘区域会变小,这意味着门限估计的可靠性在下降,但函数并没有在这里做特殊处理,把这个问题留给调用端去解决,保持核心函数结构干净。

调用示例和可视化代码如下:

% 调用2D-CFAR检测器 gx = 2; gy = 2; % 保护窗每侧2个单元 tx = 6; ty = 6; % 参考窗每侧6个单元 alpha = 0.25; % 门限因子 [th_map, det_map] = cfar2d_core(rd_abs, gx, gy, tx, ty, alpha); % 三张标准送显图 figure('Name', '2D-CFAR仿真结果'); subplot(1,3,1); imagesc(rd_abs); axis xy; colorbar; title('原始RD幅度谱'); subplot(1,3,2); imagesc(th_map); axis xy; colorbar; title('CFAR门限曲面'); subplot(1,3,3); imagesc(det_map); axis xy; colormap gray; colorbar; title('检测二值图');

代码运行后,第一张图能看到三个目标点亮的区域和底噪纹理,第二张图显示的是每个位置计算出的门限值,第三张图是0和1构成的检测结果。判断仿真是否正常的简单标准:三个目标点应全部在第三张图中被标记为白点,背景区域不应出现连片白点。如果这个目标没有达成,优先检查窗口参数和alpha取值。

这几个参数对结果的影响可以这样概括:guard_x和guard_y决定了目标能量泄漏被隔离的范围,设小了目标会把附近训练单元的平均值抬高,导致门限上升,反而压掉目标本身;train_x和train_y决定了背景估计的样本数,越大越平滑,但边缘损失也越大;alpha是门限相对平均背景的倍率,越大越严格,虚警越少,但弱目标也越容易被漏掉。仿真阶段建议先固定窗参数,只调alpha,把门限曲面的形态看清楚之后再去动窗尺寸。

4. 仿真操作录像怎么看:从脚本运行到结果判读的完整闭环

4.1 仿真脚本的目录组织与启动顺序

拿到这个仿真项目包,第一件事不是双击运行,而是先把文件结构看明白。常见组织方式是三个文件放在同一个目录:主运行脚本负责数据生成、调用检测器、出图;核心函数文件是CFAR算法本体;操作录像则记录从打开matlab到跑出三张图的完整过程。有的包里还会有参数配置文件或结果数据文件,方便你不重新跑一遍就能查看上次的仿真结果。

操作录像的核心价值是给你一个期望基准。你可以对照录像里的命令行输入、窗口布局和最终图像,判断自己机器上跑出来的结果是否一致。如果最终生成的三张图在目标数量和位置上和录像相同,说明环境配置和脚本路径都没有问题;如果出现差异,优先排查版本兼容性和变量覆盖问题。

推荐的运行顺序是这样:先把所有文件放进同一个目录,然后在matlab命令行里切到该目录,先运行主脚本,观察输出是否有报错。如果脚本名包含中文,注意确认matlab的当前路径编码能正确识别。运行成功后,再打开核心函数文件阅读注释,理解每段代码的作用,最后再去修改参数做针对性实验。

4.2 三张送显图的判读方法与参数调整方向

原始RD幅度谱上,目标表现为比周围亮的孤立峰,噪声是均匀分布的颗粒状纹理。如果背景出现明暗分明的条带,说明模拟数据里可能有多普勒维的固定图案干扰,这时候CFAR门限曲面也应该在相应位置有高低变化,检测结果才不会被错误触发。

CFAR门限曲面是判断算法工作状态最直接的一张图。理想情况下,它的整体起伏应该和原始谱的背景纹理一致,杂波强的区域门限高,干净区域门限低。如果门限曲面看起来不仅平滑,而且和目标位置对应的区域出现了一个明显的隆起,说明保护窗尺寸偏小,目标能量泄漏进了参考窗,把门限抬高了。这是本次仿真最需要关注的内部特征。

检测二值图的判读要抓三个指标:目标位置是否有白点、背景区域白点是否稀疏、边缘区域是否出现成串虚警。目标位置没白点,说明门限过高或保护窗过大;背景白点成片,说明alpha偏小或参考窗太短;边缘成串虚警,基本就是训练窗截断问题。调整方向上,先把alpha往大调消除背景虚警,再检查保护窗是否吞掉了目标,最后处理边缘区域。

5. 2D-CFAR仿真的四个典型翻车场景:现象、原因与对应修复

5.1 边缘成片虚警:参考窗截断让门限失真

现象是检测二值图的四条边附近出现连续的白点带,特别是四角区域更严重,但矩阵中心区域的检测结果完全正常。

原因是边缘检测单元的参考窗被矩阵边界截断,train_num从中心区域的169个左右降到了几十个,训练样本数少了之后,均值估计的方差变大,门限变得不稳定。更麻烦的是,代码里直接用alpha乘估计均值,并没有对样本数做归一化补偿,所以边缘处的门限相对中心区域系统性偏低,虚警率随之上升。

解决方法是把边缘区域直接排除在检测范围之外。常见做法是在调用核心函数之后,把检测结果的前guard_x加train_x行、后guard_x加train_x行,以及对应的列方向区域全部置0,不参与检测统计。另一种做法是修改核心函数,当某个CUT的有效训练单元数不足理论值的一半时,直接判为不检测。两种方式本质相同,都是承认边缘信息不可靠,比硬调alpha去压制边缘虚警更合理。

5.2 目标被“保护”不见了:保护窗尺寸和目标泄漏不匹配

现象是原始RD谱上目标非常清晰,门限曲面在该目标位置形成一个鼓包,检测二值图里目标区域反而没有白点,远处更弱的二个目标反而被检出来了。

原因是目标能量泄漏范围比保护窗大。仿真里用高斯核把目标扩展到了距离和多普勒各2个单元,但保护窗只设了每侧2个单元,旁瓣能量还是漏进了参考窗,训练均值被拉高,门限跟着上升,结果目标自己把自己的门限抬到了检测线之上。

解决方法是先增大guard_x和guard_y,观察门限曲面上的鼓包是否消失。如果保护窗加到每侧4个单元,目标泄漏完全被隔离,门限曲面在目标位置不再明显隆起,检测结果自然恢复正常。要注意的是,保护窗也不是越大越好,保护窗占掉参考窗面积,可用训练样本数减少,背景估计平滑度下降。工程经验是保护窗略大于目标主瓣扩展范围即可。

5.3 alpha调来调去都虚警:门限因子和虚警率没有绑定

现象是alpha取0.1时背景噪声点大面积检出,取0.5时三个目标全部丢失,中间怎么换值都找不到一个两者兼顾的位置,看起来这个参数就是玄学。

原因是alpha和虚警率的关系高度依赖参考窗样本数和检测域。理论公式Pfa等于(1加alpha除以N_train)的负N_train次方是在平方律检波域推导的,而仿真的rd_abs是幅度域,直接把alpha套用理论值,门限关系对不上。另外,当参考窗样本数很大时,alpha对Pfa的变化非常敏感,出现调一点就过头的情况很正常。

解决方法是停止手动试值,用蒙特卡洛方法标定alpha与经验虚警率的关系。做法在下一章详述。简单来说,生成多帧纯噪声矩阵,对每个候选alpha跑一次CFAR,统计平均虚警比例,画出alpha与Pfa的关系曲线,然后按目标虚警率反查需要的alpha。这样alpha就从经验值变成了可复现的设计参数。

5.4 仿真慢到让人想放弃:嵌套循环的优化思路

现象是400乘300的矩阵用3.1节的双层嵌套循环版本跑一次要十几秒,每次调参数都要等半天,多试几次参数心态就崩了。

原因是核心函数对每个CUT都重新遍历一次参考窗,两层CUT循环乘两层训练窗循环,复杂度接近O(NR乘ND乘窗面积),计算量随着窗尺寸增大迅速上升。

解决方法是改用积分图加速。积分图的原理是预先计算矩阵的前缀和,之后任意矩形区域的和只需要三次加减运算就能拿到。对CFAR来说,先对幅度矩阵做二维积分图,然后参考窗总和减去保护窗总和,一次索引运算就能得到训练单元总和,复杂度降为O(NR乘ND)。如果MATLAB版本支持,也可以直接用conv2对参考窗掩码做卷积,效果类似但写法更短。下面给出积分图版本的关键代码:

% 积分图加速版本的核心思想 % I(x,y) = sum_{i<=x, j<=y} rd(i,j) I = cumsum(cumsum(rd_abs, 1), 2); % 矩形区域和: (x1,y1)到(x2,y2) sum_rect = I(x2, y2) - I(x1-1, y2) - I(x2, y1-1) + I(x1-1, y1-1); % 参考窗区域和减去保护窗区域和,即训练单元总和 train_sum = sum_rect(ref) - sum_rect(guard);

这个优化在小矩阵上感觉不明显,但矩阵尺寸到1000乘1000、窗尺寸到十几的时候,提速是数量级的。仿真阶段可以先不管效率,做正式参数扫描实验时建议切换到积分图版本。

6. 用蒙特卡洛标定门限因子:让alpha从经验值变成可验证参数

这一章帮你把alpha的调参过程做成一个可复用的验证工具。做法很简单:生成不含目标的纯噪声矩阵,用当前的窗参数和候选alpha跑CFAR,统计背景中被判为目标的比例,这就是经验虚警率。重复多次取平均,结果会比单帧数据稳定得多。

% 估计经验虚警率 Pfa function pfa_est = estimate_pfa(NR, ND, gx, gy, tx, ty, alpha, Nmc) det_count = 0; for mc = 1:Nmc % 复用与主仿真相同的噪声模型 noise = sqrt(0.5) * (randn(NR, ND) + 1j * randn(NR, ND)); [~, det] = cfar2d_core(abs(noise), gx, gy, tx, ty, alpha); det_count = det_count + sum(det(:)); end pfa_est = det_count / (Nmc * NR * ND); end

调用时,设置一个alpha扫描向量,每个值估算一次经验虚警率。实际运行中,alpha从0.1到0.8,经验虚警率通常会下降一到两个数量级,具体数值取决于参考窗尺寸和检波域。你把整条曲线画出来之后,按项目的虚警率指标选定alpha,就不再需要碰运气。再做目标检测率标定时,用同一组alpha跑注入目标的矩阵,统计目标位置被检出的比例,两条曲线对照就能看出分界。

我一般会在做正式实验前把alpha标定脚本固定下来,每次换波形参数或换杂波模型都重新跑一遍,让参数调整有依据,后面写报告或给其他人复现时也拿得出数据。这个小脚本比手动试值可靠得多,也算是对自己仿真结果负责的习惯。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/10 2:56:31

MySQL自定义排序全解析:FIELD、CASE WHEN、中文排序与性能调优

在实际的数据库开发中&#xff0c;MySQL自定义排序是个看着简单、做起来全是门道的话题。默认的ORDER BY升序降序在大多数业务场景里都只能算“能出结果”&#xff0c;远远称不上“符合业务逻辑”。订单要按“待付款、待发货、已签收、已取消”的状态顺序展示&#xff0c;CMS后…

作者头像 李华
网站建设 2026/10/10 2:56:05

企业选用AI智能体,不同实现方式有什么优缺点

摘要&#xff1a;不少企业再引入AI智能体的时候&#xff0c;容易把关注点只放在功能能力上&#xff0c;忽略AI智能体部署在公司的实现模式差异。同样一套智能体业务能力&#xff0c;选择SaaS、混合云、本地化私有化&#xff0c;会直接改变成本、数据安全、运维压力。本文站在一…

作者头像 李华
网站建设 2026/10/10 2:56:02

BirdCLEF-Baseline实战:音频多标签分类全流程与避坑指南

简介&#xff1a;该资源是面向2018 LifeCLEF鸟种识别任务BirdCLEF的Baseline系统源码&#xff0c;适合具备一定机器学习与音频处理基础、希望复现或改进鸟类声纹识别方案的研究者与竞赛选手。项目以Python脚本承担数据预处理、特征提取、模型训练与评估等核心流程&#xff0c;S…

作者头像 李华
网站建设 2026/10/10 2:55:54

程序员轻松入门大模型Agent开发,从入门到精通的完整学习路径!

文章针对程序员在职业发展中遇到瓶颈的问题&#xff0c;提出了转向Agent开发赛道的建议。强调Agent开发不仅需要掌握提示词技巧&#xff0c;更需要具备扎实的工程能力。文章提供了一套系统化的学习路线&#xff0c;包括编程基础、大模型原理、Prompt技巧、RAG知识库搭建、Agent…

作者头像 李华
网站建设 2026/10/10 2:55:00

2026年程序员必学大模型:小白也能掌握的AI应用开发,收藏学习路线!

文章指出&#xff0c;2026年AI大模型相关岗位需求暴涨&#xff0c;薪资远超传统后端岗位。针对程序员学习痛点&#xff0c;文章强调AI应用开发无需精通深度学习&#xff0c;只需调用API并搭建业务系统。文章提供了零基础必备工具环境、四个阶段的学习路线&#xff08;Prompt工程…

作者头像 李华