You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

红外探测器直方图的噪声与信号分离及归一化问题咨询

红外探测器含噪信号幅值直方图归一化问题

我有一幅直方图,展示的是红外探测器输出的3000组含噪信号最大幅值,信号以光子数量表征。我希望基于光子数量对直方图做归一化,理想状态下0光子时仅保留噪声,但操作后得到的直方图形态一致仅标准差不同,且0光子时得到的是狄拉克函数而非噪声,不确定该从哪个方向调整(更换直方图、新增参数、补充数据?)。

可结合以下参数分析:

  • SNR = mean(Amax)/Std(信噪比)
  • QEFR = SNR/Nbph
  • F= QE/QEFR,其中QE为量子效率

问题根源与修正方向

  1. 归一化逻辑冗余
    原代码中存在无意义的归一化操作:
normalized_amplitudes_max_noise_with = amplitudes_max_noise_with / (mean_amplitude_with * 37)
normalized_amplitudes_max_noise_with = normalized_amplitudes_max_noise_with * 37

这两步相互抵消,后续的乘10、乘20只是单纯缩放幅值,没有实现基于光子数的归一化。正确逻辑应将幅值映射到单光子对应的幅值单位,需考虑量子效率(实际探测到的光子数是输入光子数×QE)。

  1. 0光子数据异常原因
    0光子时出现狄拉克函数,大概率是遮光状态下的暗噪声数据采集有问题:要么未捕捉到探测器暗噪声,要么数据采样精度不足,导致基线无波动。需确认遮光数据是否真实包含暗噪声。

  2. 参数分析缺失
    原代码未利用给定的SNR、QEFR、F参数验证归一化合理性,需补充这部分计算来验证结果。


修正后的代码

import numpy as np
import matplotlib.pyplot as plt

# 量子效率
QE = 0.72
k1 = 6

# 输入光子数与实际探测光子数
num_photons_input = 37
num_photons_detected = num_photons_input * QE

# 文件路径
file_amplitude_max_with = r'C:\***\amplitudes_max_signal_bruit_9V_C1.txt'
file_amplitude_max_without = r'C:\***\amplitudes_max_signal_bruit_9V_C1_sans.txt'

# 加载数据
amplitudes_with_signal = np.loadtxt(file_amplitude_max_with)  # 有光(信号+噪声)
amplitudes_only_noise = np.loadtxt(file_amplitude_max_without)  # 无光(仅噪声)

# 计算单光子幅值:总信号均值 / 实际探测光子数
mean_with_signal = np.mean(amplitudes_with_signal)
single_photon_amplitude = mean_with_signal / num_photons_detected

# 归一化到等效光子数:幅值 / 单光子幅值
normalized_with_signal = amplitudes_with_signal / single_photon_amplitude
normalized_only_noise = amplitudes_only_noise / single_photon_amplitude

# 计算核心参数
std_with_signal = np.std(normalized_with_signal)
std_only_noise = np.std(normalized_only_noise)

SNR = np.mean(normalized_with_signal) / std_with_signal
QEFR = SNR / num_photons_input
F = QE / QEFR

# 打印结果
print(f"实际探测光子数: {num_photons_detected:.2f}")
print(f"单光子幅值: {single_photon_amplitude:.4f}")
print(f"有信号时归一化标准差: {std_with_signal:.2f}")
print(f"仅噪声时归一化标准差: {std_only_noise:.2f}")
print(f"SNR: {SNR:.2f}")
print(f"QEFR: {QEFR:.4f}")
print(f"F: {F:.2f}")

# 绘制直方图
plt.figure(figsize=(10, 6))
plt.hist(normalized_with_signal, bins=50, alpha=0.7, label=f'含信号({num_photons_input}输入光子)')
plt.hist(normalized_only_noise, bins=50, alpha=0.7, color='red', label='仅噪声(0输入光子)')
plt.xlabel('等效光子数')
plt.ylabel('计数')
plt.title('归一化后的最大幅值分布(等效光子数)')
plt.legend()
plt.grid(axis='y', linestyle='--')
plt.show()

后续验证建议

  • 检查amplitudes_only_noise的标准差,若接近0,需重新采集遮光状态下的暗噪声数据
  • 归一化后的仅噪声分布均值应接近0,标准差代表噪声等效光子数
  • 调整直方图bins数量(如设为50),更清晰展示分布形态

内容的提问来源于stack exchange,提问作者Watizi not

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 02:29:57