为什么概率等于穿越次数

image



import numpy as np
import matplotlib.pyplot as plt

# 解决中文显示为方框(豆腐块)的问题:使用 Windows 自带中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei']  # 中文黑体
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号

# 1. 生成模拟的窄带高斯随机信号 (简化为低频滤波后的噪声)
np.random.seed(42)
t = np.linspace(0, 10, 1000)
# 生成白噪声并做平滑处理,模拟窄带过程
noise = np.random.randn(len(t))
# 简单的移动平均滤波
window_size = 15
smooth_noise = np.convolve(noise, np.ones(window_size)/window_size, mode='same')
# 归一化并调整幅度
signal = smooth_noise * 3

# 2. 定义阈值
a = 1.5  # 高电平 a
zero_level = 0  # 零电平

# 3. 计算向上穿越次数 (Positive Crossings)
# 找到信号从小于阈值到大于阈值的点
crossings_a = np.where((signal[:-1] < a) & (signal[1:] >= a))[0]
crossings_0 = np.where((signal[:-1] < zero_level) & (signal[1:] >= zero_level))[0]

N_a = len(crossings_a)  # 穿过 a 的次数
N_0 = len(crossings_0)  # 穿过 0 的次数

# 4. 绘图
plt.figure(figsize=(12, 5))
plt.plot(t, signal, label='随机信号 y(t)', color='blue', alpha=0.7)

# 画出阈值线
plt.axhline(y=a, color='red', linestyle='--', label=f'电平 y = a ({a})')
plt.axhline(y=zero_level, color='green', linestyle='-', label='电平 y = 0')

# 标记穿越点
plt.scatter(t[crossings_a], signal[crossings_a], color='red', zorder=5, s=50, marker='^', label=f'向上穿越 a (共 {N_a} 次)')
plt.scatter(t[crossings_0], signal[crossings_0], color='green', zorder=5, s=50, marker='^', label=f'向上穿越 0 (共 {N_0} 次)')

# 填充 y > a 的区域,直观展示概率
plt.fill_between(t, a, signal, where=(signal > a), color='red', alpha=0.2, label='信号大于 a 的区域')

plt.title('为什么概率等于穿越次数的比值?', fontsize=14)
plt.xlabel('时间 t')
plt.ylabel('幅值 y')
plt.legend(loc='upper right')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

# 打印结果验证
print(f"向上穿越 0 的次数 (N_0): {N_0}")
print(f"向上穿越 a 的次数 (N_a): {N_a}")
print(f"穿越次数比值 (N_a / N_0): {N_a / N_0:.4f}")
print(f"理论上 N_a/N_0 应该近似等于 信号大于a的时间占比")
posted @ 2026-10-13 00:43  redufa  阅读(5)  评论(0)    收藏  举报