信号检测理论(Signal Detection Theory, SDT)
信号检测理论(Signal Detection Theory, SDT)模拟是一种实验设计,用于研究和理解在存在噪声或不确定性的情况下如何做出决策。在心理学、认知科学、工程学和许多其他领域,信号检测理论都非常重要。
一、基础概念:
在信号检测理论的模拟中,通常会涉及以下几个关键概念:
信号(Signal):需要被检测或识别的刺激或信息。
噪声(Noise):干扰信号检测的背景或无关信息。
决策标准(Decision Criterion):用于判断信号是否存在的阈值或标准。
击中(Hit):当信号实际存在且被正确检测到时的情况。
漏报(Miss):当信号实际存在但未被检测到时的情况。
虚报(False Alarm):当信号实际上不存在但被错误地检测为存在时的情况。
正确否定(Correct Rejection):当信号实际上不存在且被正确地判断为不存在时的情况。

二、统计决策理论:
(1)两个分布的重叠程度决定了被试对信号和噪音的辨别力(感受性)

d ′ d' d′被称为辨别力指数(灵敏度)。可以有两个分布的均值差来决定。
重叠越多,辨别力指数越小,辨别力越弱。
重叠越少,辨别力指数越大,辨别力越强。
特别地, d ′ = 0 d'=0 d′=0,均值相同,完全重叠(不一定重合),无法辨别。
(2)被试的决策标准决定了其反应倾向:
定义 C C C:决策标准
C的右边判断为“有”,左边判断为“无”
定义 β β β:似然比,可由 Y (击中) Y (虚报) \frac{Y(击中)}{Y(虚报)} Y(虚报)Y(击中)得到,一般给出β后,即可通过计算来确定C的位置(大小)。
β > 1 β>1 β>1 :严格——被试的判断倾向于“无”
β = 1 β=1 β=1 :中等——被试的判断“均等”
β < 1 β<1 β<1 :宽松——被试的判断倾向于“有”

(3)ROC曲线
一般也叫等感受曲线,有以下几个特点:
[1]击中率和虚报率呈正相关关系,C增大,二者同时减小;C减小,标准变松,二者同时增大。
[2]击中率不等于虚报率
- 存在3中极端情况:
(1)击中率=0:C趋近于正无穷
(2)击中率=1,C趋近于负无穷
(3) d ′ = 0 d'=0 d′=0:曲线完全重叠,均值相同
这三种情况意义不大
[3]越往左下,反应标准越严, β β β越大,C越大
[4] d ′ d' d′越大,曲线区分度越大

三、示例:
下面是一个示例(Julia文件):
1)
Let’s simulate 2 signal distributions, plot them, and compute d’ and the probabilities of the four outcomes with a specific criterion
using Distributions
using PlotlyJS# --- Signal Detection Theory Simulation --- 信号检测理论(Signal Detection Theory, SDT)# 1. Parameters
dPrime = 1.5 # Sensitivity (d'),灵敏度(判别力指数)
criterion = 0.8 # Response criterion,判断标准# 2. Distributions
dist_noise = Normal(0, 1) # Noise distribution 噪声分布
dist_signal = Normal(dPrime, 1) # Signal + noise distribution 信号+噪声分布# 3. Generate trials
nTrials = 1000
signalPresent = rand(Bernoulli(0.5), nTrials) # 生成一个布尔数组,每个元素表示一次试验中信号是否出现,50% signal presence
stimuli = signalPresent .* rand(dist_signal, nTrials) + (1 .- signalPresent) .* rand(dist_noise, nTrials)# 4. Apply criterion
responses = stimuli .> criterion # 生成一个布尔值数组responses,大于criterion的为true,否则为false
# 5. Calculate outcomes
hits = sum(responses[signalPresent]) # 击中
misses = sum(.!responses[signalPresent]) # 漏报
falseAlarms = sum(responses[.!signalPresent]) # 虚报
correctRejections = sum(.!responses[.!signalPresent]) # 正确否定# --- Visualization with PlotlyJS ---# Generate data for histograms
noise_data = rand(dist_noise, 10000)
signal_data = rand(dist_signal, 10000)
y = max
# Create the histogram traces
noise_trace = PlotlyJS.histogram(x=noise_data, name="Noise", opacity=0.5)
signal_trace = PlotlyJS.histogram(x=signal_data, name="Signal + Noise", opacity=0.5)# Create the criterion line trace,画判断标准线
criterion_trace = PlotlyJS.scatter(x=[criterion, criterion], y=[0, 600],mode="lines",name="Criterion",line=attr(color="red", dash="dash")
)# Create the plot
plt = PlotlyJS.plot([noise_trace, signal_trace, criterion_trace],Layout(xaxis_title="Internal Response",yaxis_title="Frequency",title="Signal Detection Theory Demonstration",barmode="overlay")
)# Display the plot
display(plt)# Display results
println("d': ", dPrime)
println("Criterion: ", criterion)
println("Hits: ", hits, " (", round(hits / sum(signalPresent) * 100, digits=2), "%)")
println("Misses: ", misses, " (", round(misses / sum(signalPresent) * 100, digits=2), "%)")
println("False Alarms: ", falseAlarms, " (", round(falseAlarms / sum(.!signalPresent) * 100, digits=2), "%)")
println("Correct Rejections: ", correctRejections, " (", round(correctRejections / sum(.!signalPresent) * 100, digits=2), "%)")
画出分布图像:

上图红色虚线就是C,蓝色分布是噪声,红色是信号。
输出:
d': 1.5
Criterion: 0.8
Hits: 369 (73.95%)
Misses: 130 (26.05%)
False Alarms: 89 (17.76%)
Correct Rejections: 412 (82.24%)
ROC曲线相关:
using Distributions
using PlotlyJS# --- Signal Detection Theory Simulation (Multiple d') --- 多个d'的信号检测理论模拟# 1. Parameters
dPrimes = [0.5, 1.0, 1.5, 2.0] # Range of sensitivities
criteria = range(-3, 3, length=100) # Range of criteria for ROC ,C变化范围# 2. Distributions
dist_noise = Normal(0, 1) # Noise distribution 噪声分布# --- ROC Analysis and Visualization ---
# 准备一个ROC曲线图的布局,为后续添加具体的ROC曲线数据做准备。
plt = PlotlyJS.plot(Layout(xaxis_title="False Alarm Rate",yaxis_title="Hit Rate",title="ROC Curves for Different d'",xaxis_range=[0, 1],yaxis_range=[0, 1],xaxis_constrain="domain", # Ensure the x-axis stays within the plot areayaxis=attr(scaleanchor="x", # Link y-axis scaling to x-axisscaleratio=1), # Maintain 1:1 aspect ratio))# Add diagonal reference line
PlotlyJS.add_trace!(plt, PlotlyJS.scatter(x=[0, 1], y=[0, 1], mode="lines", line=attr(color="gray", dash="dash"), name="Chance Level"))for dPrime in dPrimes# 根据不同的d'生成不同的信号分布。因为噪声分布固定,所以d'的大小决定了信号分布的位置。dist_signal = Normal(dPrime, 1) # Signal + noise distribution 信号+噪声分布# 3. Generate trials (for each d')nTrials = 1000signalPresent = rand(Bernoulli(0.5), nTrials)stimuli = signalPresent .* rand(dist_signal, nTrials) + (1 .- signalPresent) .* rand(dist_noise, nTrials)# 4. ROC CalculationhitRates = zeros(length(criteria))falseAlarmRates = zeros(length(criteria))for (i, criterion) in enumerate(criteria)responses = stimuli .> criterionhits = sum(responses[signalPresent])falseAlarms = sum(responses[.!signalPresent])hitRates[i] = hits / sum(signalPresent)falseAlarmRates[i] = falseAlarms / sum(.!signalPresent)end# 5. Add ROC Curve to PlotPlotlyJS.add_trace!(plt, PlotlyJS.scatter(x=falseAlarmRates, y=hitRates, mode="lines", name="d' = $dPrime"))
end# Display the plot
display(plt)
画出ROC曲线:

可以发现随 d ′ d' d′增大图像越往上
思考:
上面四个率和机器学习中的性能评估指标有相似之处:

相关文章:
信号检测理论(Signal Detection Theory, SDT)
信号检测理论(Signal Detection Theory, SDT)模拟是一种实验设计,用于研究和理解在存在噪声或不确定性的情况下如何做出决策。在心理学、认知科学、工程学和许多其他领域,信号检测理论都非常重要。 一、基础概念: 在信…...
Flink源码剖析
写在前面 最近一段时间都没有更新博客了,原因有点离谱,在实现flink的两阶段提交的时候,每次执行自定义的notifyCheckpointComplete时候,好像就会停止消费数据,完成notifyComplete后再消费数据;基于上述原因…...
[Python学习日记-39] 闭包是个什么东西?
[Python学习日记-39] 闭包是个什么东西? 简介 闭包现象 闭包意义与作用 简介 在前面讲函数和作用域的时候应该提到过,当函数运行结束后会由 Python 解释器自带的垃圾回收机制回收函数内作用域已经废弃掉的变量,但是在 Python 当中还有一种…...
XSLT 实例:掌握 XML 转换的艺术
XSLT 实例:掌握 XML 转换的艺术 引言 XSLT(可扩展样式表语言转换)是一种强大的工具,用于将 XML(可扩展标记语言)文档转换为其他格式,如 HTML、PDF 或纯文本。在本文中,我们将通过一…...
【C++】第一节:C++入门
1、C关键字 2、命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染&am…...
CSP-S 2021 T1廊桥分配
CSP-S 2021 T1廊桥分配 枚举分配给国内航班和国外航班的廊桥数量,若分配给国内机场 i i i个廊桥,则国外机场就有 n − i n-i n−i个廊桥,在此基础上分别判断两边各能通过多少飞机。用一个小根堆存储飞机离开的时间,枚举到一个飞机…...
项目配置说明
文章目录 一、下载 vscode 并安装相应扩展1.1 下载 vscode1.2 安装扩展 二、git 项目三、git 提交流程3.1 确定要提交的代码 四、git 拉新流程 一、下载 vscode 并安装相应扩展 1.1 下载 vscode vscode 我已经发群里了,或者自己去官网下载也行 1.2 安装扩展 打开…...
linux网络编程实战
前言 之前找工作的之后写了一些网络编程的笔记和代码,然后现在放到csdn上保存一下。有几个版本的,看看就好。就是简单的实现一下服务端和客户端之间的交互的,还没有我之前上linux编程课写的代码复杂。 哦对了,这个网络编程的代码对…...
网络基础 【HTTP】
💓博主CSDN主页:麻辣韭菜💓 ⏩专栏分类:Linux初窥门径⏪ 🚚代码仓库:Linux代码练习🚚 💻操作环境: CentOS 7.6 华为云远程服务器 🌹关注我🫵带你学习更多Linux知识…...
[Linux#61][UDP] port | netstat | udp缓冲区 | stm32
目录 0. 预备知识 1. 端口号的划分范围 2. 认识知名端口号 3. netstat 命令 4. pidof 命令 二.UDP 0.协议的学习思路 1. UDP 协议报文格式 报头与端口映射: 2. UDP 的特点 面向数据报: 3. UDP 的缓冲区 4. UDP 使用注意事项 5. 基于 UDP 的…...
定义类方法的错误总结
struct Renderer {vector<function<void(vector<string>)>> fileDropListeners;// 定义一个方法,它是将一个函数作为输入,callback是形参void print(function<void(float)> callback_func);void onFileDrop(function<void(ve…...
Redis --- 第三讲 --- 通用命令
一、get和set命令 Redis中最核心的两个命令 get 根据key来取value set 把key和value存储进去 redis是按照键值对的方式存储数据的。必须要先进入到redis客户端。 语法 set key value : key和value都是字符串。 对于上述这里的key value 不需要加上引号&#…...
【Linux】进程间关系与守护进程
超出能力之外的事, 如果永远不去做, 那你就永远无法进步。 --- 乌龟大师 《功夫熊猫》--- 进程间关系与守护进程 1 进程组2 会话3 控制终端4 作业控制5 守护进程 1 进程组 之前我们提到了进程的概念, 其实每一个进程除了有一个进程 ID(P…...
【可视化大屏】将柱状图引入到html页面中
到这里还是用的死数据,先将柱状图引入html页面测试一下 根据上一步echarts的使用步骤,引入echarts.js后需要初始化一个实例对象,所以新建一个index.js文件来进行创建实例化对象和配置数据信息等。 //在index.html引入<script src"j…...
gm/ID设计方法学习笔记(一)
前言:为什么需要gm/id (一)主流设计方法往往侧重于强反型区(过驱>0.2V),低功耗设计则侧重于弱反型区(<0),但现在缺乏对中反型区的简单和准确的手算模型。 1.对于…...
高度细化的SAGA模式实现:基于Spring Boot与RabbitMQ的跨服务事务
场景与技术栈 场景:电商系统中的订单创建流程,涉及订单服务(Order Service)、库存服务(Inventory Service)、支付服务(Payment Service)。 技术栈: Java 11 Spring Bo…...
Vue工程化开发
Vue工程化开发 一、工程化开发和脚手架 1.开发Vue的两种方式 核心包传统开发模式:基于html / css / js 文件,直接引入核心包,开发 Vue。工程化开发模式:基于构建工具(例如:webpack)的环境中开…...
Ray_Tracing_The_Next_Week下
5image Texture Mapping 图像纹理映射 我们之前虽然在交点信息新增了uv属性,但其实并没有使用,而是通过p交点笛卡尔坐标确定瓷砖纹理或者大理石噪声纹理的值 现在通过uv坐标读取图片,通过std_image库stbi_load(path)…...
ES索引生命周期管理
基于如何 定时删除ES索引过期数据 而引发的一系列关于ES索引生命周期管理ILM(Index Lifecycle Management)的学习 快速上手 :定时删除ES索引中的过期数据 1. ILM解决什么问题? ES从6.7版本引入ILM,通过ILM可以解决哪些问题呢? 自动新建…...
Oracle数据库体系结构基础
关于Oracle体系结构 基于Oracle11g体系结构 目标: 了解Oracle体系结构掌握逻辑存储结构掌握物理存储结构熟悉Oracle服务器结构熟悉常用的数据字典 Oracle数据库管理中的重要的三个概念 实例(instance):实例是指一组Oracle后台进程以及在服务器中分配…...
保姆级教程:在Ubuntu 24.04上配置Ollama服务并开机自启(附systemctl管理命令)
在Ubuntu 24.04上构建企业级Ollama服务:从零到生产环境部署指南 当大型语言模型(LLM)从开发环境走向生产部署时,稳定性与可维护性成为首要考量。本文将带您完成Ollama服务在Ubuntu 24.04上的全生命周期配置,涵盖服务架…...
HC32F4A0 SysTick定时器实战:从240MHz主频到1ms精准延时的完整配置流程
HC32F4A0 SysTick定时器深度实战:240MHz主频下的毫秒级精准延时实现 在嵌入式系统开发中,精准的时间控制往往是项目成败的关键。想象一下,当你需要实现一个精确的电机控制算法,或者构建一个实时数据采集系统时,毫秒甚至…...
GORM实战避坑指南:从‘小白’到‘老鸟’必须知道的10个细节(含MySQL连接配置)
GORM实战避坑指南:从‘小白’到‘老鸟’必须知道的10个细节(含MySQL连接配置) 1. MySQL连接配置的隐藏陷阱 charsetutf8mb4的必要性 MySQL默认的utf8编码只支持最多3字节的字符,而emoji表情等特殊字符需要4字节存储。若不指定utf8…...
AI-AGENT概念解析 - LLM任务训练
**问题:LLM大模型是否针对写作,做PPT,编写程序,拆解任务这些输入参数,用同一个大模型需要训练为不同的模型结构或参数化的权重矩阵去适应那些不同的提示词输入参数? 对于不同的任务类型(写作、做…...
SDL2项目实战:用Conan一键集成SDL_image库(附CMake配置避坑指南)
SDL2项目实战:用Conan一键集成SDL_image库(附CMake配置避坑指南) 在开发跨平台C游戏或多媒体应用时,处理多种图片格式是刚需。SDL2原生仅支持BMP格式,而现代项目往往需要JPEG、PNG甚至WebP等更高效的格式。SDL_image库…...
为Jetson AGX添加自定义硬件:手把手编写设备树节点驱动LED与PPS
Jetson AGX硬件扩展实战:从设备树节点到LED与PPS驱动开发 在嵌入式开发领域,Jetson AGX Xavier凭借其强大的计算能力和丰富的接口资源,成为工业控制、机器人视觉等高性能场景的首选平台。但要让这块开发板真正发挥潜力,掌握自定义…...
Docker容器中运行Windows系统的突破性企业级解决方案:架构解析与部署实践
Docker容器中运行Windows系统的突破性企业级解决方案:架构解析与部署实践 【免费下载链接】windows Windows inside a Docker container. 项目地址: https://gitcode.com/GitHub_Trending/wi/windows 在当今云原生和容器化技术快速发展的背景下,如…...
Gauge常见问题解决:10个典型错误及修复方法
Gauge常见问题解决:10个典型错误及修复方法 【免费下载链接】gauge Light weight cross-platform test automation 项目地址: https://gitcode.com/gh_mirrors/ga/gauge Gauge作为一款轻量级跨平台测试自动化工具,在使用过程中可能会遇到各种错误…...
ESP32高精度低延迟ADC自定义库:寄存器级模拟读取优化
1. 项目概述ESP32AnalogRead Custom是由嵌入式开发者 Khrisna Ijlal Bachri 针对 ESP32 系列微控制器定制优化的模拟输入读取库。该库并非官方 ESP-IDF ADC 驱动的简单封装,而是聚焦于解决实际工程中高频采样、多通道同步、噪声抑制与低功耗场景下的典型痛点。其核心…...
OpenHarmony 5.0.2 音频驱动适配实战:从ADM配置到耳机/扬声器切换
1. OpenHarmony音频驱动适配背景与问题定位 最近在RK3568平台上适配OpenHarmony 5.0.2的音频功能时,遇到了一个典型问题:使用RK809音频芯片时,耳机可以正常发声,但内置扬声器完全没声音,而且插入耳机后扬声器也不会自动…...
