基于廣義高斯循環平穩性最大化的自適應盲反卷積脈沖提取算法(Python)
實現了一種基于最大廣義高斯循環平穩性的盲反卷積算法,主要用于從噪聲背景中提取周期性脈沖信號。核心功能包括:
1.盲反卷積處理:
通過估計的逆濾波器恢復原始脈沖信號
無需先驗知識即可分離混合信號中的周期性脈沖成分
2.關鍵算法特性:
自適應形狀參數估計:使用廣義高斯分布模型(β參數)描述信號統計特性
循環平穩性優化:最大化輸出信號的循環平穩性指標(IGGCSGGS)
循環頻率自適應:在指定帶寬內搜索最優循環頻率
3.主要處理流程:
信號預處理(去均值、白化)
迭代優化FIR濾波器:
計算當前輸出信號
估計廣義高斯形狀參數β
構建加權協方差矩陣
求解廣義特征值問題更新濾波器
收斂判斷(基于循環平穩性指標變化)
4.應用場景:
旋轉機械故障診斷(軸承/齒輪損傷檢測)
振動信號分析
周期性脈沖信號提取
強噪聲背景下的特征提取
詳細流程圖

流程圖說明:
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)
完整數據和詳細注釋代碼通過知乎學術咨詢獲得:
https://www.zhihu.com/consult/people/792359672131756032?isMe=1
贊
收藏
回復
分享
微博
QQ
微信
舉報
回復
相關推薦

















