uwb最详细的DS-TWR测距

article/2025/10/7 21:30:15

简介

•测距、定位和数据传输。

•利用双向测距(TOF)测量或单向到达时间差(TDOA)到达时间差,误差在10cm,经过一定的滤波可以达到更低。

•跨越 3.5 GHz 至 6.5 GHz 的 6 个 RF 频段。

•支持 110 kbps, 850 kbps 和 6.8 Mbps 的数据速率。

•高数据传输速率,可以保持播放时间短,从而节省电量并延长电池的使用寿命。

•它能够处理严重的多路径环境,因此非常适合高度反射的射频环境。

测距原理

以两个uwb设备测距为例
在这里插入图片描述

设备A在a时刻发送消息(消息内容包含a时间戳),设备B接收在c时刻接收到消息,设备B在接收和发送消息,都可以记录当前的时间戳。
那计算a-c是不是就是电磁波在空气中传输的时间?答案不是,时间有很大的时间误差。因为它们的时钟并不同步

a-b是本地时钟,那是不是电磁波往返的时间?答案不是,这里还需要考虑到Trely,设备A发送给设备B到设备B发送给设备A的时间(设备B接收到消息后,做消息处理和硬件天线延迟的问题),这个不能不计,1 ns(纳秒) 的误差相当于测量距离的 30 cm 误差(光速)。

什么是时钟同步?

在某一个时刻,设备A和设备B的节拍相同,假设从0计数到65536,设备从一上电就开始计数,但是你能保证所有设备上电都是同时从0开始计数吗?显然不行的。

那有什么办法可以计算电磁波在空气中飞行的时间?

单向双向测距(SS-TWR)涉及单个消息从一个节点到另一个节点的往返延迟的简单测量,以及将响应发送回原始节点。(a-b)-(c-d):表示电磁波在空气中飞行的往返时间。

如果不能理解,举个例子:

地球和火星的距离。来自地球的老王,打电话给在火星上的老马并看了现在的时间12:00:00(时分秒),老马接到电话,时间是18:00:00,多了一会,在18:05:00老马打了电话给老王,老王在12:13:00接到电话。
因为他们的频率是一致,都是以秒为单位(假设),通过这些数据可以计算信号在地球和火星间飞行的时间,往返的时间是13-5=8分钟;这里我们还要考虑到老马或者老王的表是否快几秒的误差可能。

在这里插入图片描述

可以看出,随着 Treply 增加,并且随着时钟偏移增加,飞行时间估计中的误差增加到误差使得估计非常不准确的程度。由于这个原因, SS-TWR 不常用。

在这里插入图片描述
DS-TWR 双向双向测距(DS-TWR)是基本的单向双向测距的延伸,其中使用了两个往返时间测量,并将其组合在一起,从而得到飞行时间结果 即使相当长的响应延迟也是错误的。极度降低Treply 的时间。因为一些障碍物或者噪声的干扰,测距变化较大,最好多次取平均值,DS-TWR就是这种。
测距公式:
在这里插入图片描述

代码讲解
uwb硬件实物开源

						uwb硬件实物开源

在这里插入图片描述

					 uwb硬件原理图

主控与uwb通信中,只使用了UWB_RST和SPI引脚。

//消息头
//设备B 基站
static uint8 rx_poll_msg[] = {0x00, 0x88, 0, 0xCA, 0xDE, 'H', 'A', 'V', 'E', 0x21, 0, 0, 0, 0};
static uint8 tx_resp_msg[] = {0x41, 0x88, 0, 0xCA, 0xDE, 'L', 'O', 'V', 'E', 0x10, 0x02, 0, 0, 0, 0};
static uint8 rx_final_msg[] = {0x41, 0x88, 0, 0xCA, 0xDE, 'O', 'P', 'E', 'N', 0x23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
//设备A 标签
static uint8 tx_poll_msg[] = {0x00, 0x88, 0, 0xCA, 0xDE, 'H', 'A', 'V', 'E', 0x21, 0, 0, 0, 0};
static uint8 rx_resp_msg[] = {0x41, 0x88, 0, 0xCA, 0xDE, 'L', 'O', 'V', 'E', 0x10, 0x02, 0, 0, 0, 0,0};
static uint8 tx_final_msg[] = {0x41, 0x88, 0, 0xCA, 0xDE, 'O', 'P', 'E', 'N', 0x23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
//只定义消息 数据通信
static uint8 tx_distance_msg[] = {0x41, 0x88, 0, 0xAA, 0xDE, 'W', 'A', 'V', 'E', 0xAA, 0, 0,0, 0, 0};
#define DISTAN_INDEX  9
#define TURE_LENGTH 5

通信流程

reset_DW1000();//重启DW1000 /* Target specific drive of RSTn line into DW1000 low for a period. */spi_set_rate_low();//降低SPI频率if(dwt_initialise(DWT_LOADUCODE) == -1)//初始化DW1000{while(1){GPIO_SetBits(GPIOA,GPIO_Pin_2);GPIO_SetBits(GPIOB,GPIO_Pin_14);deca_sleep(100);GPIO_ResetBits(GPIOA,GPIO_Pin_2);GPIO_ResetBits(GPIOB,GPIO_Pin_14);deca_sleep(100);}}spi_set_rate_high();//回复SPI频率/* Configure DW1000. See NOTE 6 below. */dwt_configure(&config);//配置DW1000/* Apply default antenna delay value. See NOTE 1 below. */dwt_setrxantennadelay(RX_ANT_DLY);    //设置接收天线延迟dwt_settxantennadelay(TX_ANT_DLY);    //设置发射天线延迟/* Set expected response's delay and timeout. See NOTE 4 and 5 below.* As this example only handles one incoming frame with always the same delay and timeout, those values can be set here once for all. */dwt_setrxaftertxdelay(POLL_TX_TO_RESP_RX_DLY_UUS);//设置发送后开启接收,并设定延迟时间dwt_setrxtimeout(RESP_RX_TIMEOUT_UUS);            //设置接收超时时间

设备A作为标签,主动发送消息(poll T1 时间戳)DS-TWR测距

tx_poll_msg[ALL_MSG_ANTHOR_IDX] = dest_anthor;  //UWB POLL 包数据
rx_resp_msg[ALL_MSG_ANTHOR_IDX] = dest_anthor;  //UWB RESPONSE 包数据
tx_final_msg[ALL_MSG_ANTHOR_IDX] = dest_anthor;//UWB Fianl 包数据        
/* Write frame data to DW1000 and prepare transmission. See NOTE 7 below. */
tx_poll_msg[ALL_MSG_SN_IDX] = frame_seq_nb;
dwt_writetxdata(sizeof(tx_poll_msg), tx_poll_msg, 0);//将Poll包数据传给DW1000,将在开启发送时传出去
dwt_writetxfctrl(sizeof(tx_poll_msg), 0);//设置超宽带发送数据长度/* Start transmission, indicating that a response is expected so that reception is enabled automatically after the frame is sent and the delay* set by dwt_setrxaftertxdelay() has elapsed. */
dwt_starttx(DWT_START_TX_IMMEDIATE | DWT_RESPONSE_EXPECTED);//开启发送,发送完成后等待一段时间开启接收,等待时间在dwt_setrxaftertxdelay中设置
//发送完 打开接收器 uwb寄存器会记录发射的时间戳
/* We assume that the transmission is achieved correctly, poll for reception of a frame or error/timeout. See NOTE 8 below. */
while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)))//不断查询芯片状态直到成功接收或者发生错误
{ };

设备B作为基站,接收poll消息 并发送resp (T2 T3时间戳)

dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间
/* Activate reception immediately. */
dwt_rxenable(0);//打开接收
/* Poll for reception of a frame or error/timeout. See NOTE 7 below. */
while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)))//不断查询芯片状态直到接收成功或者出现错误
{ };
if (status_reg & SYS_STATUS_RXFCG)//成功接收
{           /* Clear good RX frame event in the DW1000 status register. */dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG);//清楚标志位/* A frame has been received, read it into the local buffer. */frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFL_MASK_1023;//获得接收数据长度if (frame_len <= RX_BUFFER_LEN){dwt_readrxdata(rx_buffer, frame_len, 0);}  /*判断数据*/if(rx_buffer[ALL_MSG_ANTHOR_IDX]!=ANCHOR_ID)continue;/* Check that the frame is a poll sent by "DS TWR initiator" example.* As the sequence number field of the frame is not relevant, it is cleared to simplify the validation of the frame. */rx_buffer[ALL_MSG_SN_IDX] = 0;if (rx_buffer[Frame_type]==0x21)//判断是否是poll包数据{uint32 resp_tx_time;/* Retrieve poll reception timestamp. */poll_rx_ts = get_rx_timestamp_u64();//获得Poll包接收时间T2/* Set send time for response. See NOTE 8 below. */resp_tx_time = (poll_rx_ts + (POLL_RX_TO_RESP_TX_DLY_UUS * UUS_TO_DWT_TIME)) >> 8;//计算Response发送时间T3。dwt_setdelayedtrxtime(resp_tx_time);//设置Response发送时间T3/* Set expected delay and timeout for final message reception. */dwt_setrxaftertxdelay(RESP_TX_TO_FINAL_RX_DLY_UUS);//设置发送完成后开启接收延迟时间dwt_setrxtimeout(FINAL_RX_TIMEOUT_UUS);//接收超时时间/* Write and send the response message. See NOTE 9 below.*/memcpy(&tx_resp_msg[11],&dis,2);tx_resp_msg[ALL_MSG_TAG_IDX] = rx_buffer[ALL_MSG_TAG_IDX];tx_resp_msg[ALL_MSG_SN_IDX] = frame_seq_nb;dwt_writetxdata(sizeof(tx_resp_msg), tx_resp_msg, 0);//写入发送数据dwt_writetxfctrl(sizeof(tx_resp_msg), 0);//设定发送长度dwt_starttx(DWT_START_TX_DELAYED | DWT_RESPONSE_EXPECTED);//延迟发送,等待接收while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR)))///不断查询芯片状态直到接收成功或者出现错误{ };

设备A 接收resp 发送final()T4 T5

if (status_reg & SYS_STATUS_RXFCG)//如果成功接收
{          uint32 frame_len;/* Clear good RX frame event and TX frame sent in the DW1000 status register. */dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG | SYS_STATUS_TXFRS);//清楚寄存器标志位/* A frame has been received, read it into the local buffer. */frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFLEN_MASK;  //获得接收到的数据长度dwt_readrxdata(rx_buffer, frame_len, 0);   //读取接收数据/*数据帧类型判断*/if(rx_buffer[ALL_MSG_TAG_IDX] != TAG_ID)//检测TAG_IDcontinue;/* Check that the frame is the expected response from the companion "DS TWR responder" example.* As the sequence number field of the frame is not relevant, it is cleared to simplify the validation of the frame. */rx_buffer[ALL_MSG_SN_IDX] = 0;if (rx_buffer[Frame_type]==0x10)//判断接收到的数据是否是response数据{uint32 final_tx_time;/* Retrieve poll transmission and response reception timestamp. */poll_tx_ts = get_tx_timestamp_u64();                    //获得POLL发送时间T1resp_rx_ts = get_rx_timestamp_u64();                    //获得RESPONSE接收时间T4//距离发送memcpy(&dist[dest_anthor],&rx_buffer[11],2);/* Compute final message transmission time. See NOTE 9 below. */final_tx_time = (resp_rx_ts + (RESP_RX_TO_FINAL_TX_DLY_UUS * UUS_TO_DWT_TIME)) >> 8;//计算final包发送时间,T5=T4+Treply2dwt_setdelayedtrxtime(final_tx_time);//设置final包发送时间T5/* Final TX timestamp is the transmission time we programmed plus the TX antenna delay. */final_tx_ts = (((uint64)(final_tx_time & 0xFFFFFFFE)) << 8) + TX_ANT_DLY;//final包实际发送时间是计算时间加上发送天线delay/* Write all timestamps in the final message. See NOTE 10 below. */final_msg_set_ts(&tx_final_msg[FINAL_MSG_POLL_TX_TS_IDX], poll_tx_ts);//将T1,T4,T5写入发送数据final_msg_set_ts(&tx_final_msg[FINAL_MSG_RESP_RX_TS_IDX], resp_rx_ts);final_msg_set_ts(&tx_final_msg[FINAL_MSG_FINAL_TX_TS_IDX], final_tx_ts);tx_final_msg[ALL_MSG_SN_IDX] = frame_seq_nb;dwt_writetxdata(sizeof(tx_final_msg), tx_final_msg, 0);//将发送数据写入DW1000dwt_writetxfctrl(sizeof(tx_final_msg), 0);//设定发送数据长度dwt_starttx(DWT_START_TX_DELAYED);//设定为延迟发送

设备B接收final,final消息包(包含了设备A的T1 T4 T5),汇总后开始计算距离。

if (status_reg & SYS_STATUS_RXFCG)//接收成功{/* Clear good RX frame event and TX frame sent in the DW1000 status register. */dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG | SYS_STATUS_TXFRS);//清楚标志位/* A frame has been received, read it into the local buffer. */frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFLEN_MASK;//数据长度dwt_readrxdata(rx_buffer, frame_len, 0);//读取接收数据/* Check that the frame is a final message sent by "DS TWR initiator" example.* As the sequence number field of the frame is not used in this example, it can be zeroed to ease the validation of the frame. */rx_buffer[ALL_MSG_SN_IDX] = 0;if (rx_buffer[Frame_type]==0x23)//判断是否为Fianl包{uint32 poll_tx_ts, resp_rx_ts, final_tx_ts;uint32 poll_rx_ts_32, resp_tx_ts_32, final_rx_ts_32;double Ra, Rb, Da, Db;int64 tof_dtu;/* Retrieve response transmission and final reception timestamps. */resp_tx_ts = get_tx_timestamp_u64();//获得response发送时间T3final_rx_ts = get_rx_timestamp_u64();//获得final接收时间T6/* Get timestamps embedded in the final message. */final_msg_get_ts(&rx_buffer[FINAL_MSG_POLL_TX_TS_IDX], &poll_tx_ts);//从接收数据中读取T1,T4,T5final_msg_get_ts(&rx_buffer[FINAL_MSG_RESP_RX_TS_IDX], &resp_rx_ts);final_msg_get_ts(&rx_buffer[FINAL_MSG_FINAL_TX_TS_IDX], &final_tx_ts);/* Compute time of flight. 32-bit subtractions give correct answers even if clock has wrapped. See NOTE 10 below. */poll_rx_ts_32 = (uint32)poll_rx_ts;//使用32位数据计算resp_tx_ts_32 = (uint32)resp_tx_ts;final_rx_ts_32 = (uint32)final_rx_ts;Ra = (double)(resp_rx_ts - poll_tx_ts);//Tround1 = T4 - T1  Rb = (double)(final_rx_ts_32 - resp_tx_ts_32);//Tround2 = T6 - T3 Da = (double)(final_tx_ts - resp_rx_ts);//Treply2 = T5 - T4  Db = (double)(resp_tx_ts_32 - poll_rx_ts_32);//Treply1 = T3 - T2  tof_dtu = (int64)((Ra * Rb - Da * Db) / (Ra + Rb + Da + Db));//计算公式tof = tof_dtu * DWT_TIME_UNITS;distance = tof * SPEED_OF_LIGHT;//距离=光速*飞行时间dist2 = distance - dwt_getrangebias(config.chan,(float)distance, config.prf);//距离减去矫正系数dis = dist2*1000;//dis 为单位为mm的距离

自定义数据包

//发送
tx_distance_msg[ALL_MSG_ANTHOR_IDX] = 2;
tx_distance_msg[DISTAN_INDEX] = dist[0]/100;
tx_distance_msg[DISTAN_INDEX+1] = dist[0]%100;
tx_distance_msg[DISTAN_INDEX+2] = dist[1]/100;
tx_distance_msg[DISTAN_INDEX+3] = dist[1]%100;dwt_writetxdata(sizeof(tx_distance_msg), tx_distance_msg, 0);
dwt_writetxfctrl(sizeof(tx_distance_msg), 0);dwt_starttx(DWT_START_TX_IMMEDIATE);
while (!(dwt_read32bitreg(SYS_STATUS_ID) & SYS_STATUS_TXFRS))
{ };
//接收判断 接收用户数据
if(rx_buffer[ALL_MSG_ANTHOR_IDX]!=ANCHOR_ID)continue;
else if (memcmp(rx_buffer, tx_distance_msg, TURE_LENGTH) == 0)
{                                             dist[0] = rx_buffer[DISTAN_INDEX]*100+rx_buffer[DISTAN_INDEX+1];dist[1] = rx_buffer[DISTAN_INDEX+2]*100+rx_buffer[DISTAN_INDEX+3];}

如果是多基站,标签做个轮询每个基站测距,就可以完成。

​这种遍历方式,不是最优的,可以采用中断的方式,检测UWB_IRQ引脚电平,判断接收消息类型,做对应的数据处理和数据回复。

 //中断设置/* Register RX call-back. *///接收消息的回调函数dwt_setcallbacks(&tx_conf_cb, &rx_ok_cb, &rx_to_cb, &rx_err_cb);/* Enable wanted interrupts (TX confirmation, RX good frames, RX timeouts and RX errors). *///设置对应的中断标志dwt_setinterrupt(DWT_INT_TFRS | DWT_INT_RFCG | DWT_INT_RFTO | DWT_INT_RXPTO | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFSL | DWT_INT_SFDT, 1);

如果是采用这种方式做定位,也不是最优,还有更优的操作,TDOA定位,TDOA不需要UWB定位标签与定位基站之间进行往复通信,只需要定位标签发射一次UWB信号,工作时长缩短了,功耗也就大大降低了,故能做到更高的定位动态和定位容量。。

TDOA定位方案,这部分资料可以通过公众号 小昭debug的自救历程 干货资料 获得。

在这里插入图片描述

DS-TWR代码和PCB,我已经开源到gitee上,下面是链接。
UWB_DS-TWR/hardware


http://chatgpt.dhexx.cn/article/pgxDNS8m.shtml

相关文章

DRAM知识整理系列(三):部分时序参数整理

目录 一、时序参数整理 第一时序&#xff1a; 1、tCL - CAS Lantency Control 2、tRCD - RAS to CAS Delay 3、tRP - Row Precharge Timing 4、tRAS - RAS Active Time 第二时序&#xff1a; 5、CWL - CAS Write Latency 6、tRC - Row Cycle Time 7、tRFC - Row Refr…

超宽带(UWB)学习笔记——TWR测距

文章目录 前言1. 单边双向测距&#xff08;SS-TWR, Single Side - Two Way Ranging&#xff09;1.1 测距方式1.2 误差分析 2 双边双向测距&#xff08;DS-TWR, Double Side - Two Way Ranging&#xff09;2.1 测距方式2.2 误差分析 参考文献 前言 TOF&#xff08;Time Of Figh…

UWB定位的3种算法:TWR、TOA和TDOA算法

UWB定位的3种算法&#xff1a;TWR、TOA和TDOA算法 文章目录 UWB定位的3种算法&#xff1a;TWR、TOA和TDOA算法UWB定位技术一、TER定位算法二、 TOA定位算法三、 TDOA定位算法相关链接 UWB定位技术 UWB 定位原理和卫星导航定位原理相类似&#xff0c;由多个定位基站和定位标签组…

【提高准确率方法总结】

文章目录 1.数据集扩增2.增大数据集差异性&#xff0c;随机性3.使用tensor transform对数据进行预处理4.调节batch_size大小5.设置shuffleTrue6.调节学习率&#xff08;learning rate&#xff09;7.权重衰减 &#xff08;weight_decay&#xff09;8.适当增加训练轮次&#xff0…

准确率、召回率和mAP、AP50/75

1、准确率和召回率 真实值与预测值之间的关系如下左图所示&#xff0c;右图是二者之间的一个直观表示&#xff0c;同时也能清晰的看出准确率和召回率的具体含义。准确率 P P P 给出了“预测为真值的样本中确实有多少比例为真值”&#xff0c;召回率 R R R 则给出了“本来就是…

如何区分精确率(precision)、准确率(accuracy)和召回率(recall)

理解精确率(precision)、准确率(accuracy)和召回率&#xff08;recall&#xff09; 正样本 负样本 预测正例 TP FP 预测反例 FN TN TN&#xff0c;预测是负样本&#xff0c;预测对了 FP&#xff0c;预测是正样本&#xff0c;预测错了 FN&#xff0c;预测是负样本&am…

pytorch_cifar10 学习记录(91%准确率)

目录 一、首次尝试深度学习 1.1训练参数 网络结构&#xff1a; 1.2训练结果 1.3 总结 二、修改网络和学习率&#xff0c;初次使用GPU炼丹&#xff08;kaggle线上炼丹&#xff09; 2.1训练参数 三、cifar10数据增强后进行炼丹 3.1 参数设置 3.2训练记录 3.2.1 0-100轮…

精度评定中的准确率(Precision)和召回率(Recall)

在模式识别中&#xff0c;我们经常会使用到一些指标对目标识别或者影像分类的结果进行评价。 假设我们需要将一个样本集分类为苹果和非苹果两类&#xff0c;那么分类结果有四种情况&#xff1a; 第一种情况&#xff1a;True Positive&#xff0c;本来就是苹果被分类成苹果&…

机器学习:什么是召回率、准确率和精确率?

在机器学习中&#xff0c;经常会听到准确率、召回率及精确率三个专业评价指标&#xff0c;刚开始接触时&#xff0c;总是会傻傻的分不清&#xff0c;今天之后&#xff0c;就能准确区分了&#xff01; —准确率&#xff1a;就是在预测的所有样本中预测正确的比率&#xff08;包…

准确率、精度和召回率

原文链接 精度&#xff08;查准率&#xff09;和召回率&#xff08;查全率&#xff09;是衡量机器学习模型性能的重要指标&#xff0c;特别是数据集分布不平衡的案例中。 什么是分布不平衡的数据集&#xff1f; 倘若某人声称创建一个能够识别登上飞机的恐怖分子的模型&#…

深度学习提高模型准确率方法

这里写目录标题 深度学习数据使用更多数据更改图像大小减少颜色通道 算法模型改进增加训练轮次迁移学习添加更多层调整超参数 总结 深度学习 我们已经收集好了一个数据集&#xff0c;建立了一个神经网络&#xff0c;并训练了模型&#xff0c;在测试和验证阶段最后得到的准确率…

准确率、精准率和召回率的理解

我们在在分类任务时&#xff0c;经常会对模型结果进行评估。评估模型好坏的指标有AUC、KS值等等。这些指标是通过预测概率进行计算的。而准确率、精准率和召回率也通过混淆矩阵计算出来的。下图是对混淆矩阵的介绍&#xff1a; 其中&#xff0c; TP&#xff1a;样本为正&#…

准确率召回率

http://blog.sina.com.cn/s/blog_4b59de070100ehl7.html 最近一直在做相关推荐方面的研究与应用工作&#xff0c;召回率与准确率这两个概念偶尔会遇到&#xff0c; 知道意思&#xff0c;但是有时候要很清晰地向同学介绍则有点转不过弯来。 召回率和准确率是数据挖掘中预测、互…

准确度(accuracy)、精确率(precision)、召回率(recall)、F1值 谈谈我的看法

目录 前言 基本概念 准确率 Accuracy 精确度 Precision 召回率 Recall F1 值 sklearn 的评估函数 pyspark 的评估函数 tensorflow 的评估函数 多分类下的评估 前言 准确度、精确率、召回率、F1值作为评估指标&#xff0c;经常用到分类效果的评测上。比较好理解的二分…

准确率,精确率,召回率和F1值

机器学习(ML),自然语言处理(NLP),信息检索(IR)等领域,评估(Evaluation)是一个必要的 工作,而其评价指标往往有如下几点:准确率(Accuracy),精确率(Precision),召回率(Recall)和F1-Measure。 (注&#xff1a; 相对来说&#xff0c;IR 的 ground truth 很多时候是一个 Ordered Lis…

准确率与召回率

在信息检索、分类体系中&#xff0c;有一系列的指标&#xff0c;搞清楚这些指标对于评价检索和分类性能非常重要&#xff0c;因此最近根据网友的博客做了一个汇总。 准确率、召回率、F1 信息检索、分类、识别、翻译等领域两个最基本指标是召回率(Recall Rate)和准确率(Precisio…

【机器学习】召回率、精确率、准确率的区别

1. 作用语言定义 作用&#xff1a;提升****精确率是为了不错报、提升召回率是为了不漏报 分不清准确率和精确率&#xff0c;在这里先正确区分一下精确率和准确率&#xff0c;以及他们的别称这里[HashArt]给出了一个通俗易懂的解释&#xff1a;(https://zhuanlan.zhihu.com/p/9…

准确率、精确率、召回率、F值

准确率&#xff1a;正确的数量除以总数量 准确率&#xff08;accuracy&#xff09;&#xff0c;是一个用来衡量分类器预测结果与真实结果差异的一个指标&#xff0c;越接近于1说明分类结果越准确。举个例子&#xff0c;比如现在有一个猫狗图片分类器对100张图片进行分类&#…

准确率、精确率、召回率和F-score

文章目录 一、TP、FP、FN和TN二、 准确率(accuracy)、精确率&#xff08;precision&#xff09;、召回率&#xff08;Recall&#xff09;、F-score三、各个指标意义和优缺点 一、TP、FP、FN和TN 举例来说&#xff0c;用血压值来检测一个人是否有高血压&#xff0c;测出的血压值…

准确率(Accuracy) | 查准率(Precision) | 查全率(Recall)

目录 样本 识别结果 指标计算 Accuracy&#xff08;准确率&#xff09; Precision&#xff08;精确率、查准率&#xff09; Recall &#xff08;召回率、查全率&#xff09; 为什么要不同的指标&#xff1f; 综合评价 (F-Score) 在机器学习中&#xff0c;对于一个模型…