matlab 模拟 闪烁体探测器全能峰

clc;clear;close all
%% 参数设置
num_events = 1e5;      % 模拟事件数
E = 662e3;             % γ射线能量(eV)
Y = 38000;             % 光产额(photon/MeV,NaI(Tl))
eta = 0.2;             % 量子效率
G = 1e6;               % PMT增益
F = 1.5;               % 法诺因子
C = 100e-12;           % 电容(F)
e = 1.6e-19;           % 电子电荷量(C)
sigma_noise_e = 5000;  % 电子学噪声(电子数RMS)%% 各环节模拟
% 1. 光子生成(泊松涨落)
mean_photon = Y * E / 1e6; % 转换为MeV计算
N_photon = poissrnd(mean_photon, [num_events, 1]);% 2. 光电子转换(二项涨落)
N_pe = arrayfun(@(n) binornd(n, eta), N_photon);% 3. PMT倍增(法诺涨落,高斯近似)
Q_pmt = normrnd(N_pe*G*e, sqrt(N_pe*G^2*F)*e);% 4. 电子学噪声(高斯噪声)
Q_noise = normrnd(0, sigma_noise_e*e, [num_events, 1]);
Q_total = Q_pmt + Q_noise;% 5. 电压转换
V = Q_total / C;%% 结果可视化
% 直方图与高斯拟合
figure
h = histogram(V, 100, 'Normalization', 'pdf');
hold on% 计算理论高斯参数
mu_V = mean(V);
sigma_V = std(V);
x = linspace(min(V), max(V), 500);
y = normpdf(x, mu_V, sigma_V);
plot(x, y, 'r', 'LineWidth', 2)% 图像标注
xlabel('Pulse Amplitude (V)')
ylabel('Probability Density')
title(['Simulated Spectrum @ ', num2str(E/1e3), ' keV'])
legend('Simulation', 'Gaussian Fit')
grid on% 显示能量分辨率
fwhm = 2.355 * sigma_V;
resolution = fwhm/mu_V;
text(0.05, 0.9, sprintf('Resolution: %.1f%%', resolution*100),...'Units', 'normalized', 'FontSize', 12)%% 关键参数输出
disp('===== 关键参数 =====')
fprintf('理论脉冲幅度: %.2e V\n', Y*eta*G*e*E/(1e6*C))
fprintf('实测脉冲幅度: %.2e V\n', mu_V)
fprintf('实测能量分辨率: %.1f%%\n', resolution*100)

运行结果如下
在这里插入图片描述
考虑康普顿沉积的话

clc; clear; close all;%% 参数设置
num_events = 1e5;      % 模拟事件数
E_MeV = 0.662;         % γ射线能量(MeV)
E = E_MeV * 1e6;       % 转换为eV
Y = 38000;             % 光产额(photon/MeV,NaI(Tl))
eta = 0.2;             % 量子效率
G = 1e6;               % PMT增益
F = 1.5;               % 法诺因子
C = 100e-12;           % 电容(F)
e = 1.6e-19;           % 电子电荷量(C)
sigma_noise_e = 5000;  % 电子学噪声(电子数RMS)% 相互作用概率(示例值,需根据实际能量计算)
mu_photo = 0.6;   % 光电效应占比
mu_compton = 0.3; % 康普顿散射占比
mu_pair = 0.0;    % 电子对效应(E < 1.022 MeV时为0)
total_mu = mu_photo + mu_compton + mu_pair;
prob = [mu_photo, mu_compton, mu_pair] / total_mu;%% 蒙特卡洛模拟能量沉积
deposited_energy = zeros(num_events, 1);
for i = 1:num_eventsE_remaining = E;while E_remaining > 0interaction = string(randsample({'photo', 'compton', 'pair'}, 1, true, prob));switch interactioncase 'photo'% 光电效应 + X射线逃逸if rand() < 0.2E_X = 30e3;  % 碘的X射线能量deposited_energy(i) = deposited_energy(i) + (E_remaining - E_X);elsedeposited_energy(i) = deposited_energy(i) + E_remaining;endE_remaining = 0;case 'compton'% 康普顿散射cos_theta = 2*rand() - 1;E_deposit = E_remaining * (1 - 1/(1 + (E_remaining/511e3)*(1 - cos_theta)));deposited_energy(i) = deposited_energy(i) + E_deposit;E_remaining = E_remaining - E_deposit;if rand() < 0.5  % 50%概率逃逸E_remaining = 0;endendend
end%% 探测过程模拟
% 1. 光子生成(基于实际沉积能量)
mean_photon = Y * deposited_energy / 1e6;  % deposited_energy单位为eV
N_photon = poissrnd(mean_photon);% 2-5. 后续步骤与原代码相同
N_pe = arrayfun(@(n) binornd(n, eta), N_photon);
Q_pmt = normrnd(N_pe*G*e, sqrt(N_pe*G^2*F)*e);
Q_noise = normrnd(0, sigma_noise_e*e, [num_events, 1]);
Q_total = Q_pmt + Q_noise;
V = Q_total / C;%% 结果可视化
figure;
histogram(V, 1024, 'BinLimits', [0, 1.2*max(V)], 'EdgeColor', 'none');
xlabel('Pulse Amplitude (V)');
ylabel('Counts');
title(sprintf('Simulated Spectrum with Compton Edge @ %.1f MeV', E_MeV));
grid on;% 标注特征峰
hold on;
% 光电峰
line([Y*eta*G*e*E/(1e6*C), Y*eta*G*e*E/(1e6*C)], ylim, 'Color', 'r', 'LineStyle', '--');
% 康普顿边缘
E_compton_edge = E_MeV * (1 - 1/(1 + 2*E_MeV/0.511));  % 康普顿最大能量沉积
V_compton = Y*eta*G*e*(E_compton_edge*1e6)/(1e6*C);
line([V_compton, V_compton], ylim, 'Color', 'g', 'LineStyle', '--');
legend('Simulated', 'Photopeak', 'Compton Edge');

在这里插入图片描述

模拟Co、Ba、Cs三种放射性核素的能谱,其活度比例为1:2:3,并包含各核素的特征γ射线能量:

clc; clear; close all;%% 参数设置
num_events_total = 6e4;        % 总事件数(1+2+3=6份)
e = 1.6e-19;                   % 电子电荷量(C)% 定义探测器参数(与闪烁体相关)
Y = 38000;                     % 光产额(photon/MeV,NaI(Tl))
eta = 0.2;                     % 量子效率
G = 1e6;                       % PMT增益
F = 1.5;                       % 法诺因子
C = 100e-12;                   % 电容(F)
sigma_noise_e = 5000;          % 电子学噪声(电子数RMS)% 定义放射源特性(核素名称、能量[MeV]、分支比、活度权重)
sources = struct(...'name', {'Co60', 'Ba133', 'Cs137'},...'energy', {[1.173, 1.332], 0.356, 0.662},...  % γ射线能量(MeV)'branch', {[0.5, 0.5], 1.0, 1.0},...          % 分支比(概率和=1)'activity', {1, 2, 3}...                      % 活度比例
);%% 生成各核素事件
all_E = [];  % 存储所有事件的能量% 遍历每个放射源
for i = 1:length(sources)% 计算该核素的事件数 (按活度比例分配)num_events = round(num_events_total * sources(i).activity / sum([sources.activity]));% 生成该核素的γ射线能量抽样if length(sources(i).energy) > 1% 多能峰:按分支比随机选择能量E_choices = sources(i).energy;probs = sources(i).branch;% 累积概率法cum_probs = cumsum(probs) / sum(probs);  % 确保分支比总和为1rand_vals = rand(num_events, 1);         % 生成随机数selected_E = zeros(num_events, 1);for k = 1:length(E_choices)if k == 1selected_E(rand_vals <= cum_probs(k)) = E_choices(k);elseselected_E((rand_vals > cum_probs(k-1)) & (rand_vals <= cum_probs(k))) = E_choices(k);endendelse% 单能峰:直接重复能量selected_E = repmat(sources(i).energy, num_events, 1);end% 转换为eV并存储all_E = [all_E; selected_E * 1e6];  % 转换为eV
end% 定义本底参数
background_intensity = 0.1; % 本底强度(相对于总事件数的比例)
num_background_events = round(num_events_total * background_intensity); % 本底事件数% 生成本底能量分布(假设为均匀分布,范围覆盖所有核素能量)
E_min = min([sources.energy]); % 最小能量 (MeV)
E_max = max([sources.energy]); % 最大能量 (MeV)
background_E = E_min + (E_max - E_min) * rand(num_background_events, 1); % 本底能量 (MeV)
background_E = background_E * 1e6; % 转换为 eV% 合并本底事件与核素事件
all_E = [all_E; background_E]; % 将本底能量添加到总事件中
%% 模拟探测过程(向量化计算)
% 1. 光子生成(泊松涨落)
N_photon = poissrnd(Y * all_E / 1e6);  % 输入能量已为eV,/1e6转换为MeV% % 2. 光电子转换(二项涨落)
% N_pe = binornd(N_photon, eta);% 使用正态分布近似二项分布
mu = N_photon * eta;                     % 均值
sigma = sqrt(N_photon * eta * (1 - eta)); % 标准差
N_pe = normrnd(mu, sigma);% 3. PMT倍增(法诺涨落,高斯近似)
Q_pmt = normrnd(N_pe*G*e, sqrt(N_pe*G^2*F)*e);% 4. 电子学噪声(高斯噪声)
Q_noise = normrnd(0, sigma_noise_e*e, size(Q_pmt));
Q_total = Q_pmt + Q_noise;% 5. 电压转换
V = Q_total / C;%% 模拟本底探测过程
% 1. 光子生成(泊松涨落)
N_photon_background = poissrnd(Y * background_E / 1e6); % 计算本底光子数% 使用正态分布近似二项分布
mu_background = N_photon_background * eta;                     % 均值
sigma_background = sqrt(N_photon_background * eta * (1 - eta)); % 标准差
N_pe_background = normrnd(mu_background, sigma_background);% 2. PMT倍增(法诺涨落,高斯近似)
Q_pmt_background = normrnd(N_pe_background * G * e, sqrt(N_pe_background * G^2 * F) * e);% 3. 电子学噪声(高斯噪声)
Q_noise_background = normrnd(0, sigma_noise_e * e, size(Q_pmt_background));
Q_total_background = Q_pmt_background + Q_noise_background;% 4. 电压转换
V_background = Q_total_background / C;% 合并本底信号与核素信号
V = [V; V_background];%% 结果可视化
figure;
hold on;% 绘制总谱线
histogram(V, 2048, 'DisplayName', 'Total Spectrum', 'EdgeColor', 'none');% 绘制本底谱线
histogram(V_background, 2048, 'FaceColor', [0.8, 0.8, 0.8], 'FaceAlpha', 0.5,...'DisplayName', 'Background Spectrum');% % 单独绘制各核素谱线(透明叠加)
colors = lines(length(sources));
% for i = 1:length(sources)
%     % 提取该核素对应的事件范围
%     start_idx = sum([sources(1:i-1).activity])/sum([sources.activity]) * num_events_total + 1;
%     end_idx = sum([sources(1:i).activity])/sum([sources.activity]) * num_events_total;
%     range = round(start_idx):round(end_idx);
%     
%     histogram(V(range), 500,...
%         'FaceColor', colors(i,:), 'FaceAlpha', 0.5,...
%         'DisplayName', sources(i).name);
% end% 理论峰位标注
for i = 1:length(sources)for j = 1:length(sources(i).energy)E_MeV = sources(i).energy(j);mu_V = Y * eta * G * e * (E_MeV*1e6) / (1e6 * C);line([mu_V, mu_V], ylim, 'Color', colors(i,:),...'LineStyle', '--', 'LineWidth', 1.5,...'DisplayName', sprintf('%s %.3f MeV', sources(i).name, E_MeV));end
end% 图形修饰
xlabel('Pulse Amplitude (V)');
ylabel('Counts');
title('Simulated Gamma Spectrum (Co:Ba:Cs = 1:2:3)');
legend('show', 'Location', 'northwest');
grid on;
% set(gca, 'YScale', 'log');  % 对数坐标更好展示低计数区域%% 关键参数输出
disp('===== 模拟参数 =====');
fprintf('总事件数: %d\n', num_events_total);
fprintf('本底事件数: %d\n', num_background_events);
disp('各核素理论峰位:');
for i = 1:length(sources)for j = 1:length(sources(i).energy)E_MeV = sources(i).energy(j);mu_V = Y * eta * G * e * (E_MeV * 1e6) / (1e6 * C);fprintf('%s %.3f MeV → %.2e V\n',...sources(i).name, E_MeV, mu_V);end
end

运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/41940.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

启扬RK3568开发板已成功适配OpenHarmony4.0版本

启扬智能IAC-RK3568-Kit开发板支持Debian、Android等常见开源操作系统&#xff0c;目前已完成OpenHarmony4.0开源国产操作系统的适配工作&#xff0c;满足国产化开源操作系统客户的需求。 启扬智能IAC-RK3568-Kit开发板基于瑞芯微RK3568处理器设计&#xff0c;主频最高可达2.0G…

蓝桥与力扣刷题(蓝桥 山)

题目&#xff1a;这天小明正在学数数。 他突然发现有些止整数的形状像一挫 “山”, 比㓚 123565321、145541123565321、145541, 它 们左右对称 (回文) 且数位上的数字先单调不减, 后单调不增。 小朋数了衣久也没有数完, 他惒让你告诉他在区间 [2022,2022222022] 中有 多少个数…

WinDbg. From A to Z! 笔记(一)

原文链接: WinDbg. From A to Z! 文章目录 为什么使用WinDbg为什么通过本书学习底层原理简述Windows的调试工具一览dbghelp.dll -- Windows 调试助手dbgeng.dll -- 调试引擎接口 调试符号 (Debug Symbols)有哪些调试信息生成调试信息匹配调试信息调用堆栈 侵入式与非侵入式异常…

Axure RP 9.0教程: 基于动态面板的元件跟随来实现【音量滑块】

文章目录 引言I 音量滑块的实现步骤添加底层边框添加覆盖层基于覆盖层创建动态面板添加滑块按钮设置滑块拖动效果引言 音量滑块在播放器类APP应用场景相对较广,例如调节视频的亮度、声音等等。 I 音量滑块的实现步骤 添加底层边框 在画布中添加一个矩形框:500 x 32,圆…

Eclipse IDE for ModusToolbox™ 3.4环境通过JLINK调试CYT4BB

使用JLINK在Eclipse IDE for ModusToolbox™ 3.4环境下调试CYT4BB&#xff0c;配置是难点。总结一下在IDE中配置JLINK调试中遇到的坑&#xff0c;以及如何一步一步解决遇到的问题。 1. JFLASH能够正常下载程序 首先要保证通过JFLASH(我使用的J-Flash V7.88c版本)能够通过JLIN…

黑马点评项目

遇到问题&#xff1a; 登录流程 session->JWT->SpringSession->tokenRedis &#xff08;不需要改进为SpringSession&#xff0c;token更广泛&#xff0c;移动端或者前后端分离都可以用&#xff09; SpringSession配置为redis模式后&#xff0c;redis相当于分布式se…

wgcloud怎么实现服务器或者主机的远程关机、重启操作吗

可以&#xff0c;WGCLOUD的指令下发模块可以实现远程关机和重启 使用指令下发模块&#xff0c;重启主机&#xff0c;远程关机&#xff0c;重启agent程序- WGCLOUD

深度解析Spring Boot可执行JAR的构建与启动机制

一、Spring Boot应用打包架构演进 1.1 传统JAR包与Fat JAR对比 传统Java应用的JAR包在依赖管理上存在明显短板&#xff0c;依赖项需要单独配置classpath。Spring Boot创新的Fat JAR&#xff08;又称Uber JAR&#xff09;解决方案通过spring-boot-maven-plugin插件实现了"…

deepseek(2)——deepseek 关键技术

1 Multi-Head Latent Attention (MLA) MLA的核心在于通过低秩联合压缩来减少注意力键&#xff08;keys&#xff09;和值&#xff08;values&#xff09;在推理过程中的缓存&#xff0c;从而提高推理效率&#xff1a; c t K V W D K V h t c_t^{KV} W^{DKV}h_t ctKV​WDKVht​…

突破反爬困境:SDK架构设计,为什么选择独立服务模式(四)

声明 本文所讨论的内容及技术均纯属学术交流与技术研究目的&#xff0c;旨在探讨和总结互联网数据流动、前后端技术架构及安全防御中的技术演进。文中提及的各类技术手段和策略均仅供技术人员在合法与合规的前提下进行研究、学习与防御测试之用。 作者不支持亦不鼓励任何未经授…

自然语言处理,能否成为人工智能与人类语言完美交互的答案?

自然语言处理&#xff08;NLP&#xff09;作为人工智能关键领域&#xff0c;正深刻改变着人机交互模式。其发展历经从早期基于规则与统计&#xff0c;到如今借深度学习实现飞跃的历程。NLP 涵盖分词、词性标注、语义理解等多元基础任务&#xff0c;运用传统机器学习与前沿深度学…

蓝桥杯备考:八皇后问题

八皇后的意思是&#xff0c;每行只能有一个&#xff0c;每个对角线只能有一个&#xff0c;每一列只能有一个&#xff0c;我们可以dfs遍历每种情况&#xff0c;每行填一个&#xff0c;通过对角线和列的限制来进行剪枝 话不多说&#xff0c;我们来实现一下代码 #include <ios…

HDR(HDR10/ HLG),SDR

以下是HDR&#xff08;HDR10/HLG&#xff09;和SDR的详细解释&#xff1a; 1. SDR&#xff08;Standard Dynamic Range&#xff0c;标准动态范围&#xff09; • 定义&#xff1a;SDR是传统的动态范围标准&#xff0c;主要用于8位色深的视频显示&#xff0c;动态范围较窄&…

【MySQL】验证账户权限

在用户进行验证之后&#xff0c;MySQL将提出以下问题验证账户权限&#xff1a; 1.谁是当前用户&#xff1f; 2.该用户有何权限&#xff1f; 管理权限比如&#xff1a;shutdown、replication slave、load data infile。数据权限比如&#xff1a;select、insert、update、dele…

通过TIM+DMA Burst 实现STM32输出变频且不同脉冲数量的PWM波形

Burst介绍&#xff1a; DMA控制器可以生成单次传输或增量突发传输&#xff0c;传输的节拍数为4、8或16。 为了确保数据一致性&#xff0c;构成突发传输的每组传输都是不可分割的&#xff1a;AHB传输被锁定&#xff0c;AHB总线矩阵的仲裁器在突发传输序列期间不会撤销DMA主设备…

GaussDB数据库表设计与性能优化实践

GaussDB分布式数据库表设计与性能优化实践 引言 在金融、电信、物联网等大数据场景下&#xff0c;GaussDB作为华为推出的高性能分布式数据库&#xff0c;凭借其创新的架构设计和智能优化能力&#xff0c;已成为企业核心业务系统的重要选择。本文深入探讨GaussDB分布式架构下的…

npm install 卡在创建项目:sill idealTree buildDeps

参考&#xff1a; https://blog.csdn.net/PengXing_Huang/article/details/136460133 或者再执行 npm install -g cnpm --registryhttps://registry.npm.taobao.org 或者换梯子

【MySQL】从零开始:掌握MySQL数据库的核心概念(五)

由于我的无知&#xff0c;我对生存方式只有一个非常普通的信条&#xff1a;不许后悔。 前言 这是我自己学习mysql数据库的第五篇博客总结。后期我会继续把mysql数据库学习笔记开源至博客上。 上一期笔记是关于mysql数据库的增删查改&#xff0c;没看的同学可以过去看看&#xf…

抖音矩阵系统源码开发与部署技巧!短视频矩阵源码搭建部署

在短视频蓬勃发展的时代&#xff0c;短视频矩阵已成为内容创作者和企业扩大影响力、提升传播效果的重要策略。而一个高效、易用的前端系统对于短视频矩阵的成功运营至关重要。本文将深入探讨短视频矩阵前端源码搭建的技术细节&#xff0c;为开发者提供全面的技术指导。 一、技…

ESP32S3 WIFI 实现TCP服务器和静态IP

一、 TCP服务器代码 代码由station_example_main的官方例程修改 /* WiFi station ExampleThis example code is in the Public Domain (or CC0 licensed, at your option.)Unless required by applicable law or agreed to in writing, thissoftware is distributed on an &q…