基于广义高斯循环平稳性最大化的自适应盲反卷积脉冲提取算法(Python)

发布于 2025-8-6 07:53
浏览
0收藏

实现了一种基于最大广义高斯循环平稳性的盲反卷积算法,主要用于从噪声背景中提取周期性脉冲信号。核心功能包括:

1.盲反卷积处理:

通过估计的逆滤波器恢复原始脉冲信号

无需先验知识即可分离混合信号中的周期性脉冲成分

2.关键算法特性:

自适应形状参数估计:使用广义高斯分布模型(β参数)描述信号统计特性

循环平稳性优化:最大化输出信号的循环平稳性指标(IGGCSGGS)

循环频率自适应:在指定带宽内搜索最优循环频率

3.主要处理流程:

信号预处理(去均值、白化)

迭代优化FIR滤波器:

计算当前输出信号

估计广义高斯形状参数β

构建加权协方差矩阵

求解广义特征值问题更新滤波器

收敛判断(基于循环平稳性指标变化)

4.应用场景:

旋转机械故障诊断(轴承/齿轮损伤检测)

振动信号分析

周期性脉冲信号提取

强噪声背景下的特征提取

详细流程图

基于广义高斯循环平稳性最大化的自适应盲反卷积脉冲提取算法(Python)-AI.x社区

流程图说明:

1.初始化阶段:

输入观测信号和算法参数

信号去均值、白化预处理

初始化单位向量作为FIR滤波器起点

2.迭代优化核心:

信号处理:计算当前滤波器输出

参数估计:自适应估计广义高斯形状参数β

循环分量提取:在指定带宽内搜索最优循环频率

矩阵构建:形成加权协方差矩阵

滤波器更新:通过广义特征值问题求解新滤波器

3.收敛判断:

基于循环平稳性指标(IGGCSGGS)的相对变化

满足误差阈值或达到最大迭代次数时停止

4.结果输出:

最优逆滤波器

提取的脉冲信号

自适应确定的循环频率

性能指标值

估计的形状参数β

def Periodic(x, alpha, fs, bd):
    """
    提取信号中的循环分量


    参数:
    x: 输入信号
    alpha: 目标循环频率
    fs: 采样率
    bd: 带宽


    返回:
    p: 循环分量
    alpha1: 调整后的循环频率
    """
    L = len(x)
    f = np.fft.fftfreq(L, 1/fs)
    f = f[:L//2]  # 只取正频率部分


    X = np.fft.fft(x) / L
    AX = np.abs(X[:L//2])


    t = np.arange(L) / fs
    p = np.zeros(L)
    alpha1 = []


    # 对每个目标频率进行搜索
    for k in range(len(alpha)):
        # 确定要搜索的目标频率
        target_freq = alpha[k] if k == 0 else alpha1[0] * (k + 1)


        # 在带宽范围内搜索
        idx_start = np.argmin(np.abs(f - (target_freq - bd/2)))
        idx_end = np.argmin(np.abs(f - (target_freq + bd/2)))
        if idx_end < idx_start:
            idx_start, idx_end = idx_end, idx_start
        search_range = np.arange(idx_start, min(idx_end + 1, len(f)))


        if len(search_range) == 0:
            # 如果没有找到合适的频率,使用原始alpha
            alpha1.append(alpha[k])
            continue


        # 寻找最大幅值对应的频率
        max_idx = search_range[np.argmax(AX[search_range])]
        alpha1.append(f[max_idx])


        # 重建循环分量
        comp = 2 * np.real(X[max_idx] * np.exp(1j * 2 * np.pi * alpha1[k] * t))
        p += comp


    # 阈值处理
    th = np.percentile(p, 75)  # 上四分位数作为阈值
    p[p < th] = 0
    # 确保没有NaN或inf
    p = np.nan_to_num(p, nan=0.0, posinf=0.0, neginf=0.0)
    return p, np.array(alpha1)

基于广义高斯循环平稳性最大化的自适应盲反卷积脉冲提取算法(Python)-AI.x社区

完整数据和详细注释代码通过知乎学术咨询获得:

https://www.zhihu.com/consult/people/792359672131756032?isMe=1


收藏
回复
举报
回复
相关推荐