红外探测器直方图的噪声与信号分离及归一化问题咨询
红外探测器含噪信号幅值直方图归一化问题
我有一幅直方图,展示的是红外探测器输出的3000组含噪信号最大幅值,信号以光子数量表征。我希望基于光子数量对直方图做归一化,理想状态下0光子时仅保留噪声,但操作后得到的直方图形态一致仅标准差不同,且0光子时得到的是狄拉克函数而非噪声,不确定该从哪个方向调整(更换直方图、新增参数、补充数据?)。
可结合以下参数分析:
- SNR = mean(Amax)/Std(信噪比)
- QEFR = SNR/Nbph
- F= QE/QEFR,其中QE为量子效率
问题根源与修正方向
- 归一化逻辑冗余
原代码中存在无意义的归一化操作:
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)。
0光子数据异常原因
0光子时出现狄拉克函数,大概率是遮光状态下的暗噪声数据采集有问题:要么未捕捉到探测器暗噪声,要么数据采样精度不足,导致基线无波动。需确认遮光数据是否真实包含暗噪声。参数分析缺失
原代码未利用给定的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
相关产品推荐
相关产品推荐

