弹道亏损 DBD_BDB 是用于衡量在 CR−(RC)mCR-(RC)^mCR−(RC)m 滤波成形电路中,由于信号脉冲与系统冲击响应特性等因素,导致信号幅度等信息发生畸变(亏损)的一个指标。对于矩形探测器电流脉冲,它反映了系统弹道特性对信号的影响程度。
在核电子学等相关领域,探测器输出的电流脉冲经过滤波成形电路处理时,由于电路的特性(如 CR−(RC)mCR-(RC)^mCR−(RC)m 电路的时间常数、冲击响应等),会使得最终用于幅度分析等的信号产生畸变,弹道亏损就是定量描述这种畸变在幅度方面表现的物理量。
对于矩形的探测器电流脉冲,系即先有基础的近似计算关系和冲击响应表达式作为推导依据。设峰值所在位置 tM=mτt_M = m\tautM=mτ,令 tM′=tM/τ=mt_M' = t_M / \tau = mtM′=tM/τ=m (这里是对时间变量进行归一化等处理,方便后续求导计算等 )。
对冲击响应相关函数 hΣ(t′)h_{\Sigma}(t')hΣ(t′) 求二阶导数在 t′=tM′t' = t_M't′=tM′ 处的值,即 d2hΣ(t′)dt′2∣t′=tM′=−1m\left. \frac{d^2 h_{\Sigma}(t')}{dt'^2} \right|_{t' = t_M'} = -\frac{1}{m}dt′2d2hΣ(t′) t′=tM′=−m1 。推导过程中,是基于冲击响应函数的具体形式(虽然文中未完整给出原始冲击响应函数全貌,但依据核电子学中 CR−(RC)mCR-(RC)^mCR−(RC)m 电路冲击响应的一般特性 ),通过求导运算得到该二阶导数结果,这一步是后续推导弹道亏损公式的关键。
将上述二阶导数结果代入到弹道亏损的近似计算初始式 DB≈124∣hΣ′′(tM′)∣(tDτ)2D_B \approx \frac{1}{24} \left| h_{\Sigma}'' (t_M') \right| \left ( \frac{t_D}{\tau} \right)^2DB≈241∣hΣ′′(tM′)∣(τtD)2 中(这里的初始式是基于电路特性和信号脉冲特性推导得到的近似关系 ),因为 ∣hΣ′′(tM′)∣=1m\left| h_{\Sigma}'' (t_M') \right| = \frac{1}{m}∣hΣ′′(tM′)∣=m1 ,所以可得 DB≈124m(tDτ)2D_B \approx \frac{1}{24m} \left ( \frac{t_D}{\tau} \right)^2DB≈24m1(τtD)2 。当处于最佳时间常数时, τopt=τc/2m−1\tau_{opt} = \tau_c / \sqrt{2m - 1}τopt=τc/2m−1 (这一最佳时间常数的推导是基于在特定条件下,如使弹道亏损等性能达到相对更优的情况,通过对相关性能指标函数求极值等方法得到 ),再将其代入弹道亏损公式,进一步得到 DB≈2m−124m(tDτc)2D_B \approx \frac{2m - 1}{24m} \left ( \frac{t_D}{\tau_c} \right)^2DB≈24m2m−1(τctD)2 。
当 m=1,2,3,4m = 1, 2, 3, 4m=1,2,3,4 和 ∞\infty∞ 时,以 (tD/τc)2(t_D / \tau_c)^2(tD/τc)2 为单位的 DBD_BDB 分别为 124\frac{1}{24}241 、116\frac{1}{16}161 、114.4\frac{1}{14.4}14.41 、113.7\frac{1}{13.7}13.71 和 112\frac{1}{12}121 。比如当 m=1m = 1m=1 时,代入 DB≈2m−124m(tDτc)2D_B \approx \frac{2m - 1}{24m} \left ( \frac{t_D}{\tau_c} \right)^2DB≈24m2m−1(τctD)2 ,就得到 DBD_BDB 以 (tD/τc)2(t_D / \tau_c)^2(tD/τc)2 为单位时是 2×1−124×1=124\frac{2\times1 - 1}{24\times1} = \frac{1}{24}24×12×1−1=241 ,这就具体呈现了不同 mmm 值下弹道亏损的数值情况,帮助理解 mmm 对弹道亏损的影响。
能准确量化在 CR−(RC)mCR-(RC)^mCR−(RC)m 滤波成形电路处理矩形探测器电流脉冲时,幅度等信息的亏损程度,让工程师和研究人员清楚知道信号经过电路后畸变的情况,以便后续对信号处理结果进行校正、分析等。例如在核探测器信号处理中,知道弹道亏损后,可在幅度分析时对结果进行补偿,提高能谱测量等的准确性。
基于弹道亏损与 mmm 、时间常数等的关系,可指导设计 CR−(RC)mCR-(RC)^mCR−(RC)m 电路的参数(如 mmm 的选取、时间常数 τ\tauτ 等的设置 ),以使得弹道亏损在实际应用需求中处于合理范围。比如对于对信号幅度准确性要求高的场合,可通过调整 mmm 和时间常数等,让弹道亏损尽可能小。
得到的弹道亏损公式也是近似的,在实际精确计算和应用中,要考虑这种近似带来的误差,必要时需采用更精确的分析方法或者对近似结果进行修正。比如在一些对信号精度要求极高的核物理实验信号处理中,不能完全依赖此近似公式,要结合实际电路和信号的更详细特性分析。
该推导是基于矩形探测器电流脉冲以及 CR−(RC)mCR-(RC)^mCR−(RC)m 电路的特定情况,当探测器电流脉冲形状不是严格矩形,或者电路结构有变化(如不是标准的 CR−(RC)mCR-(RC)^mCR−(RC)m 电路,存在元件参数偏差等 )时,公式不能直接套用,需要重新分析推导或者进行修正。例如如果探测器实际输出的电流脉冲是近似矩形但有一定的上升沿和下降沿的非理想矩形,就不能简单用上述公式计算弹道亏损。
在核探测器(如半导体探测器、闪烁探测器等)输出信号的处理电路中,广泛应用 CR−(RC)mCR-(RC)^mCR−(RC)m 滤波成形电路,弹道亏损的分析计算对于准确获取核信号的幅度信息(进而用于能谱分析等 )至关重要。比如在 gamma 能谱测量系统中,通过合理设计 CR−(RC)mCR-(RC)^mCR−(RC)m 电路并考虑弹道亏损,能提高能谱测量的精度,准确识别不同能量的 gamma 射线。
在一些需要对脉冲信号进行精确处理的电子学系统中,如高速脉冲信号采集与分析系统,当涉及到类似滤波成形电路时,弹道亏损的知识可用于优化系统性能,减少信号畸变对测量结果的影响。例如在高速数据采集系统中处理快速脉冲信号,通过控制弹道亏损,保证采集到的信号幅度等信息准确,从而提高整个系统的数据处理质量。
理解从初始近似计算式、冲击响应代入,到通过求导得到二阶导数,再代入推导得到弹道亏损公式的整个逻辑过程,这是掌握该知识点的核心,因为后续对弹道亏损的分析应用都是基于此公式。比如要明白每一步的物理意义和数学运算依据,才能灵活运用公式解决实际问题。
清楚 mmm 、tDt_DtD 、τ\tauτ 等参数对弹道亏损 DBD_BDB 的影响规律,像 mmm 不同取值对应的弹道亏损变化,时间常数与弹道亏损的关联等。这对于实际应用中设计电路、调整参数来控制弹道亏损非常关键。例如知道 mmm 增大时(在一定范围内 )弹道亏损的变化趋势,就能根据实际需求选择合适的 mmm 值。
后续将继续为你讲解“脉冲顶部宽度 tPWt_{PW}tPW 相关知识点”“ CR−(RC)mCR-(RC)^mCR−(RC)m 成形脉冲宽度等参数与性能关系知识点” ,若你对当前讲解内容有疑问,也可随时提出。
脉冲顶部宽度 tPWt_{PW}tPW 是指在脉冲波形上,各点和最大幅度相差不超过 ε\varepsilonε(ε≪1\varepsilon \ll 1ε≪1,例如 ε=1%\varepsilon = 1\%ε=1% )的范围内的时间宽度。它用于衡量脉冲顶部的平坦程度,是描述脉冲波形特性的一个重要参数。
在分析 CR−(RC)mCR-(RC)^mCR−(RC)m 滤波成形电路输出脉冲以及其他脉冲信号时,脉冲顶部的平坦程度会影响信号处理的精度,比如对幅度分析器测量精度的影响。通过定义 tPWt_{PW}tPW ,可以定量地比较不同脉冲或者同一脉冲在不同电路参数下顶部的平坦情况。
按照前文计算弹道亏损的方法,冲击响应的峰顶可用抛物线近似(这是一种简化分析的手段,基于在峰顶附近,冲击响应函数的曲线形状接近抛物线的特点 ),由此可得到 ε=18∣hΣ′′(tM)∣(tPW′)2\varepsilon = \frac{1}{8} \left| h_{\Sigma}'' (t_M) \right| (t_{PW}')^2ε=81∣hΣ′′(tM)∣(tPW′)2 ,其中 tPW′t_{PW}'tPW′ 是归一化后的脉冲顶部宽度相关量。
对 ε=18∣hΣ′′(tM)∣(tPW′)2\varepsilon = \frac{1}{8} \left| h_{\Sigma}'' (t_M) \right| (t_{PW}')^2ε=81∣hΣ′′(tM)∣(tPW′)2 进行变形求解 tPW′t_{PW}'tPW′ ,可得 tPW′=[8ε∣hΣ′′(tM)∣]1/2t_{PW}' = \left[ \frac{8\varepsilon}{\left| h_{\Sigma}'' (t_M) \right|} \right]^{1/2}tPW′=[∣hΣ′′(tM)∣8ε]1/2 。对于 CR−(RC)mCR-(RC)^mCR−(RC)m 成形,已知 hΣ′′(tM)=−1mh_{\Sigma}'' (t_M) = -\frac{1}{m}hΣ′′(tM)=−m1 ,将其代入上式,再结合时间常数 τ\tauτ 进行还原(因为之前有归一化处理,这里要恢复到实际时间量纲 ),最终得到 tPW=8mετt_{PW} = \sqrt{8m\varepsilon} \tautPW=8mετ 。
以 CR−(RC)mCR-(RC)^mCR−(RC)m 成形,m=4m = 4m=4,τ=1μs\tau = 1\mu sτ=1μs 为例,当 ε=1%\varepsilon = 1\%ε=1%(即 0.010.010.01 )时,代入 tPW=8mετt_{PW} = \sqrt{8m\varepsilon} \tautPW=8mετ ,可得 tPW=8×4×0.01×1μs≈0.57μst_{PW} = \sqrt{8\times4\times0.01} \times 1\mu s \approx 0.57\mu stPW=8×4×0.01×1μs≈0.57μs ;当 ε=0.1%\varepsilon = 0.1\%ε=0.1%(即 0.0010.0010.001 )时,tPW=8×4×0.001×1μs≈0.18μst_{PW} = \sqrt{8\times4\times0.001} \times 1\mu s \approx 0.18\mu stPW=8×4×0.001×1μs≈0.18μs 。通过具体的数值计算,能更直观地理解不同 ε\varepsilonε 、mmm 、τ\tauτ 下脉冲顶部宽度的大小情况,以及各参数对它的影响。
直观地反映脉冲顶部的平坦程度,tPWt_{PW}tPW 越小,说明在较小的时间范围内脉冲幅度就能降到与最大值相差 ε\varepsilonε 的程度,也就意味着脉冲顶部越不平坦;反之,tPWt_{PW}tPW 越大,脉冲顶部越平坦。这对于判断脉冲是否适合用于幅度分析等应用很关键,比如在幅度分析器中,脉冲顶部越平坦,测量精度受顶部变化的影响就越小。
将 CR−(RC)mCR-(RC)^mCR−(RC)m 电路的参数(如 mmm 、τ\tauτ )和脉冲信号的特性(ε\varepsilonε 、tPWt_{PW}tPW )联系起来,通过控制电路参数可以调整脉冲顶部宽度,进而优化信号处理效果。例如在设计电路时,根据对脉冲顶部平坦度的需求,选择合适的 mmm 和 τ\tauτ 值。
推导过程中采用了冲击响应峰顶抛物线近似的方法,这种近似在一定程度上简化了计算,但也会带来误差。实际的冲击响应曲线可能与抛物线存在偏差,尤其是在脉冲顶部边缘等位置,所以在精确分析时,需要考虑这种近似的影响,或者采用更精确的分析模型。比如对于一些特殊设计的 CR−(RC)mCR-(RC)^mCR−(RC)m 电路,其冲击响应可能与常规情况不同,抛物线近似可能就不太适用。
ε\varepsilonε 的取值(如 1%1\%1% 、0.1%0.1\%0.1% 等 )会直接影响 tPWt_{PW}tPW 的计算结果和对脉冲顶部平坦度的判断。不同的应用场景对 ε\varepsilonε 的要求不同,要根据实际需求合理选择 ε\varepsilonε 。例如在对幅度测量精度要求极高的场合,可能需要选择更小的 ε\varepsilonε 来严格衡量脉冲顶部平坦度,但这也会增加计算和分析的复杂度。
在设计脉冲幅度分析器时,需要输入脉冲具有一定的顶部平坦度,通过控制 CR−(RC)mCR-(RC)^mCR−(RC)m 电路参数得到合适 tPWt_{PW}tPW 的脉冲,以提高幅度测量的精度。比如在核物理实验中的多道脉冲幅度分析器,需要准确测量核信号的幅度来获取能谱信息,就依赖于输入脉冲合适的顶部宽度,通过调整 CR−(RC)mCR-(RC)^mCR−(RC)m 电路的 mmm 、τ\tauτ 等参数,使 tPWt_{PW}tPW 满足分析器的要求。
在各类涉及脉冲信号处理的电子系统中,如雷达信号处理、高速数据采集系统等,当需要对脉冲信号进行滤波成形处理时,利用 tPWt_{PW}tPW 的知识优化电路参数,使脉冲波形更适合后续处理。例如在雷达信号处理中,对回波脉冲进行滤波成形后,合适的 tPWt_{PW}tPW 能保证后续对脉冲幅度、到达时间等参数的准确提取。
掌握从冲击响应峰顶抛物线近似出发,推导得到 tPWt_{PW}tPW 公式的过程,以及理解 mmm 、ε\varepsilonε 、τ\tauτ 等参数与 tPWt_{PW}tPW 的定量关联关系,这是运用该知识点进行电路设计和信号分析的基础。比如清楚改变 mmm 值如何影响 tPWt_{PW}tPW ,才能根据实际需求选择合适的 mmm 。
重点关注在实际应用场景(如不同的信号处理系统、不同精度要求的测量等 )下,如何根据需求合理选择 mmm 、τ\tauτ 、ε\varepsilonε 等参数来控制 tPWt_{PW}tPW ,以达到优化信号处理效果的目的。这涉及到理论知识与实际工程应用的结合,是该知识点在实践中发挥作用的关键。
接下来会为你讲解“ CR−(RC)mCR-(RC)^mCR−(RC)m 成形脉冲宽度等参数与性能关系知识点” ,若你对当前脉冲顶部宽度的内容有疑问,欢迎随时提问。
这里涉及 CR−(RC)mCR-(RC)^mCR−(RC)m 成形脉冲的多种宽度参数(如 tW(1%)t_W (1\%)tW(1%) 、tW(0.1%)t_W (0.1\%)tW(0.1%) 、tP(1%)t_P (1\%)tP(1%) 、tP(0.1%)t_P (0.1\%)tP(0.1%) 、tˉW\bar{t}_WtˉW 等 )以及这些参数与电路性能(如峰堆积概率、基线偏移和涨落、信噪比等 )之间的关联特性。其中 tW(x%)t_W (x\%)tW(x%) 一般指脉冲幅度降到与最大值相差 x%x\%x% 时对应的宽度等相关脉冲宽度定义,tˉW\bar{t}_WtˉW 是平均宽度,用于综合衡量脉冲宽度特性。
在核电子学和电子信号处理领域,CR−(RC)mCR-(RC)^mCR−(RC)m 成形电路是常用的滤波成形电路,其输出脉冲的宽度等参数直接影响整个系统(如能谱测量系统、高速脉冲采集系统等 )的性能。研究这些参数与性能的关系,对于优化电路设计、提高系统性能至关重要。
文中提到平均宽度 tˉW=(em)m(m!)τ=(em)mm!2m−1τc\bar{t}_W = \left( \frac{e}{m} \right)^m (m!) \tau = \left( \frac{e}{m} \right)^m \frac{m!}{\sqrt{2m - 1}} \tau_ctˉW=(me)m(m!)τ=(me)m2m−1m!τc(这里结合了前文最佳时间常数等相关内容 )。该推导是基于对脉冲宽度的统计平均以及(CR−(RC))m(CR-(RC))^m(CR−(RC))m 滤波成形电路的传递函数特性,通过对大量脉冲信号进行时域分析,利用概率论中的均值计算方法,将脉冲宽度的概率分布函数与滤波成形电路的参数相结合。在推导过程中,考虑到电路中电容 CCC 和电阻 RRR 构成的积分 - 微分环节对脉冲信号的影响,将最佳时间常数 τ\tauτ 与特征时间常数 τc\tau_cτc 建立联系,通过数学变换和化简,最终得到该平均宽度的表达式,它准确反映了电路参数与脉冲顶部宽度之间的定量关系,为分析和优化滤波成形电路性能提供了重要的理论依据。
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import factorial
import scipy.signal as signal
class NuclearSignalProcessor:
"""核信号处理模拟器,用于分析CR-(RC)^m滤波成形电路对核探测器信号的处理"""
def __init__(self, detector_pulse_width=1.0, tau_c=2.0, m_values=None):
"""
初始化核信号处理器
参数:
detector_pulse_width: 探测器电流脉冲宽度(μs)
tau_c: 电荷收集时间常数(μs)
m_values: CR-(RC)^m电路中RC积分次数列表,默认为[1, 2, 3, 4]
"""
self.t_detector = detector_pulse_width # 探测器脉冲宽度(μs)
self.tau_c = tau_c # 电荷收集时间常数(μs)
self.m_values = m_values or [1, 2, 3, 4] # RC积分次数
self.time_points = np.linspace(0, 20, 1000) # 时间点(μs)
def generate_rectangular_pulse(self):
"""生成矩形探测器电流脉冲"""
pulse = np.zeros_like(self.time_points)
pulse[self.time_points <= self.t_detector] = 1.0
return pulse
def cr_rcm_impulse_response(self, m, tau_opt=None):
"""
计算CR-(RC)^m电路的冲击响应
参数:
m: RC积分次数
tau_opt: 最佳时间常数,默认为None,自动计算
返回:
冲击响应函数值
"""
if tau_opt is None:
tau_opt = self.calculate_optimal_time_constant(m)
# 计算归一化时间
t_prime = self.time_points / tau_opt
# 计算CR-(RC)^m电路的冲击响应
h = (t_prime**m) * np.exp(-t_prime) / factorial(m)
# 归一化处理,确保峰值为1
h = h / np.max(h)
return h
def calculate_optimal_time_constant(self, m):
"""计算CR-(RC)^m电路的最佳时间常数"""
return self.tau_c / np.sqrt(2 * m - 1)
def calculate_ballistic_deficit(self, m, tau_opt=None):
"""
计算弹道亏损
参数:
m: RC积分次数
tau_opt: 最佳时间常数,默认为None,自动计算
返回:
弹道亏损值
"""
if tau_opt is None:
tau_opt = self.calculate_optimal_time_constant(m)
# 使用公式 D_B ≈ (2m-1)/(24m) * (t_D/τ_c)^2
db = ((2 * m - 1) / (24 * m)) * (self.t_detector / self.tau_c)**2
return db
def calculate_pulse_width(self, m, epsilon=0.01, tau_opt=None):
"""
计算脉冲宽度(在epsilon范围内的宽度)
参数:
m: RC积分次数
epsilon: 幅度误差阈值,默认为0.01(1%)
tau_opt: 最佳时间常数,默认为None,自动计算
返回:
脉冲宽度值(μs)
"""
if tau_opt is None:
tau_opt = self.calculate_optimal_time_constant(m)
# 计算冲击响应
h = self.cr_rcm_impulse_response(m, tau_opt)
# 找到峰值位置
peak_idx = np.argmax(h)
# 找到幅度下降到(1-epsilon)的位置
left_idx = np.where(h[:peak_idx] >= (1 - epsilon))[0][0]
right_idx = np.where(h[peak_idx:] >= (1 - epsilon))[0][-1] + peak_idx
# 计算脉冲宽度
pulse_width = self.time_points[right_idx] - self.time_points[left_idx]
return pulse_width
def calculate_pulse_top_width(self, m, epsilon=0.01, tau_opt=None):
"""
计算脉冲顶部宽度(在epsilon范围内的顶部宽度)
参数:
m: RC积分次数
epsilon: 幅度误差阈值,默认为0.01(1%)
tau_opt: 最佳时间常数,默认为None,自动计算
返回:
脉冲顶部宽度值(μs)
"""
if tau_opt is None:
tau_opt = self.calculate_optimal_time_constant(m)
# 计算冲击响应
h = self.cr_rcm_impulse_response(m, tau_opt)
# 找到峰值位置
peak_idx = np.argmax(h)
# 找到顶部在(1±epsilon)范围内的左右边界
left_idx = np.where(h[:peak_idx] >= (1 - epsilon))[0][0]
right_idx = np.where(h[peak_idx:] >= (1 - epsilon))[0][-1] + peak_idx
# 计算顶部宽度
top_width = self.time_points[right_idx] - self.time_points[left_idx]
return top_width
def calculate_pileup_probability(self, m, count_rate=5000, epsilon=0.01, tau_opt=None):
"""
计算峰堆积概率
参数:
m: RC积分次数
count_rate: 计数率(events/s)
epsilon: 幅度误差阈值,默认为0.01(1%)
tau_opt: 最佳时间常数,默认为None,自动计算
返回:
峰堆积概率
"""
if tau_opt is None:
tau_opt = self.calculate_optimal_time_constant(m)
# 计算脉冲宽度(用于峰堆积计算)
pulse_width = self.calculate_pulse_width(m, epsilon, tau_opt) * 1e-6 # 转换为秒
# 计算在脉冲宽度内出现至少一个事件的概率
# 使用泊松分布: P(n>=1) = 1 - P(0) = 1 - exp(-λ)
# 其中λ = 计数率 * 脉冲宽度
lambda_val = count_rate * pulse_width
p0 = np.exp(-lambda_val) # 没有事件的概率
p_pileup = 1 - p0 # 至少有一个事件的概率
return p_pileup
def simulate_processing(self, count_rate=5000, epsilon=0.01):
"""
模拟整个信号处理过程并分析结果
参数:
count_rate: 计数率(events/s)
epsilon: 幅度误差阈值,默认为0.01(1%)
"""
results = []
# 生成矩形探测器脉冲
detector_pulse = self.generate_rectangular_pulse()
for m in self.m_values:
# 计算最佳时间常数
tau_opt = self.calculate_optimal_time_constant(m)
# 计算冲击响应
impulse_response = self.cr_rcm_impulse_response(m, tau_opt)
# 计算弹道亏损
db = self.calculate_ballistic_deficit(m, tau_opt)
# 计算脉冲宽度
pulse_width = self.calculate_pulse_width(m, epsilon, tau_opt)
# 计算脉冲顶部宽度
top_width = self.calculate_pulse_top_width(m, epsilon, tau_opt)
# 计算峰堆积概率
pileup_prob = self.calculate_pileup_probability(m, count_rate, epsilon, tau_opt)
results.append({
'm': m,
'tau_opt': tau_opt,
'ballistic_deficit': db,
'pulse_width': pulse_width,
'top_width': top_width,
'pileup_probability': pileup_prob,
'impulse_response': impulse_response
})
return results
def visualize_results(self, results, epsilon=0.01):
"""
可视化模拟结果
参数:
results: 模拟结果字典
epsilon: 幅度误差阈值,用于标记脉冲宽度
"""
plt.figure(figsize=(15, 10))
# 绘制不同m值的冲击响应
plt.subplot(2, 2, 1)
for res in results:
plt.plot(self.time_points, res['impulse_response'],
label=f'm={res["m"]}, τ_opt={res["tau_opt"]:.2f}μs')
plt.title('不同m值的CR-(RC)^m冲击响应')
plt.xlabel('时间 (μs)')
plt.ylabel('归一化幅度')
plt.grid(True)
plt.legend()
# 绘制弹道亏损与m的关系
plt.subplot(2, 2, 2)
m_values = [res['m'] for res in results]
ballistic_deficits = [res['ballistic_deficit'] for res in results]
plt.plot(m_values, ballistic_deficits, 'o-')
plt.title('弹道亏损与m的关系')
plt.xlabel('m (RC积分次数)')
plt.ylabel('弹道亏损 D_B')
plt.grid(True)
plt.xticks(m_values)
# 绘制脉冲宽度与m的关系
plt.subplot(2, 2, 3)
pulse_widths = [res['pulse_width'] for res in results]
plt.plot(m_values, pulse_widths, 's-')
plt.title(f'脉冲宽度与m的关系 (ε={epsilon*100}%)')
plt.xlabel('m (RC积分次数)')
plt.ylabel('脉冲宽度 (μs)')
plt.grid(True)
plt.xticks(m_values)
# 绘制峰堆积概率与m的关系
plt.subplot(2, 2, 4)
pileup_probs = [res['pileup_probability'] for res in results]
plt.plot(m_values, pileup_probs, 'd-')
plt.title(f'峰堆积概率与m的关系 (计数率={int(results[0]["pileup_probability"]*1e6)} events/s)')
plt.xlabel('m (RC积分次数)')
plt.ylabel('峰堆积概率')
plt.grid(True)
plt.xticks(m_values)
plt.tight_layout()
plt.show()
# 打印数值结果表格
print("\n=== 模拟结果汇总 ===")
print("{:<5} {:<12} {:<15} {:<15} {:<18} {:<18}".format(
"m", "最佳τ (μs)", "弹道亏损 D_B", f"脉冲宽度 (ε={epsilon*100}%)",
f"顶部宽度 (ε={epsilon*100}%)", "峰堆积概率"))
print("-" * 80)
for res in results:
print("{:<5} {:<12.4f} {:<15.6f} {:<15.4f} {:<18.4f} {:<18.6f}".format(
res['m'], res['tau_opt'], res['ballistic_deficit'],
res['pulse_width'], res['top_width'], res['pileup_probability']))
# 主函数,运行模拟并显示结果
def main():
# 创建信号处理器实例
processor = NuclearSignalProcessor(
detector_pulse_width=1.0, # 探测器脉冲宽度(μs)
tau_c=2.0, # 电荷收集时间常数(μs)
m_values=[1, 2, 3, 4] # RC积分次数
)
# 模拟信号处理过程
results = processor.simulate_processing(
count_rate=5000, # 计数率(events/s)
epsilon=0.01 # 幅度误差阈值(1%)
)
# 可视化结果
processor.visualize_results(results, epsilon=0.01)
# 额外示例:计算不同ε下的脉冲顶部宽度
print("\n=== 不同ε下的脉冲顶部宽度示例 (m=4) ===")
m = 4
epsilons = [0.01, 0.001] # 1%和0.1%
for eps in epsilons:
top_width = processor.calculate_pulse_top_width(
m, epsilon=eps, tau_opt=processor.calculate_optimal_time_constant(m)
)
print(f"ε={eps*100}% 时,脉冲顶部宽度 t_PW = {top_width:.4f}μs")
if __name__ == "__main__":
main()
1 2.0000 0.010417 0.5405 0.5405 0.002699
2 1.1547 0.015625 0.4404 0.4404 0.002200
3 0.8944 0.017361 0.4204 0.4204 0.002100
4 0.7559 0.018229 0.4004 0.4004 0.002000
=== 不同ε下的脉冲顶部宽度示例 (m=4) ===
ε=1.0% 时,脉冲顶部宽度 t_PW = 0.4004μs
ε=0.1% 时,脉冲顶部宽度 t_PW = 0.1201μs