摘要:该算法是一种先进的时频分析方法,专门设计用于处理具有多项式相位变化的非平稳信号。算法通过多项式核函数对信号进行参数化建模,然后通过重采样技术将非平稳信号转换为平稳信号,最后应用傅里叶变换获得高分辨率的时频表示。算法的核心思想是利用先验知识(信号的相位变化规律)
该算法是一种先进的时频分析方法,专门设计用于处理具有多项式相位变化的非平稳信号。算法通过多项式核函数对信号进行参数化建模,然后通过重采样技术将非平稳信号转换为平稳信号,最后应用傅里叶变换获得高分辨率的时频表示。算法的核心思想是利用先验知识(信号的相位变化规律)来指导时频分析过程,通过参数化重采样技术消除信号的非平稳性,从而获得比传统方法更高分辨率和更清晰的时频表示。算法首先根据信号的多项式相位模型计算重采样函数,然后对加窗信号进行重采样使其变得平稳,最后对重采样后的信号进行傅里叶变换得到时频表示。这种方法特别适用于处理相位变化遵循多项式规律的非平稳信号,能够有效克服传统时频分析方法在分辨率和交叉项之间的权衡问题。
开始│├─ 信号生成与参数设置│ ││ ├─ 设置采样频率和信号持续时间│ ├─ 计算信号的相位模型│ └─ 生成测试信号│├─ 短时傅里叶变换分析│ ││ ├─ 计算信号的解析信号│ ├─ 创建高斯窗函数│ ├─ 滑动窗口计算短时傅里叶变换│ └─ 生成时频表示│├─ 参数化重采样时频变换│ ││ ├─ 提取多项式系数│ ├─ 计算重采样函数│ ├─ 对信号进行零填充│ ├─ 加窗处理│ ├─ 计算重采样时间│ ├─ 幅度调制│ ├─ 重采样信号│ ├─ 离散傅里叶变换│ └─ 生成时频表示│├─ 结果可视化│ ││ ├─ 绘制信号波形│ ├─ 绘制短时傅里叶变换结果│ └─ 绘制参数化重采样时频变换结果│└─ 结束算法步骤
1. 信号生成与参数设置:设置采样频率、信号持续时间等参数,根据多项式相位模型生成测试信号。
2. 短时傅里叶变换分析:计算信号的解析信号,创建高斯窗函数,通过滑动窗口计算短时傅里叶变换,生成时频表示。
3. 参数提取:从输入的多项式系数中提取参数,计算重采样所需的系数。
4. 零填充处理:对信号进行零填充,为后续的重采样做准备。
5. 加窗处理:创建高斯窗函数并对信号进行加窗处理。
6. 重采样函数计算:根据多项式系数计算重采样函数,确定重采样时间。
7. 幅度调制:对加窗信号进行幅度调制,调整信号幅度。
8. 重采样信号:使用PCHIP插值方法对信号进行重采样,将非平稳信号转换为平稳信号。
9. 离散傅里叶变换:对重采样后的信号进行离散傅里叶变换,得到频域表示。
10. 时频表示生成:从傅里叶变换结果中提取有效部分,生成最终的时频表示。
11. 结果可视化:绘制信号波形、短时傅里叶变换结果和参数化重采样时频变换结果,进行对比分析。
"""计算基于多项式核的参数化重采样时频变换参数:Sig: 待分析信号SampFreq: 采样频率coef_f: 多项式系数WinLen: 窗口长度overlap: 重叠率返回:Spec: 频谱图结果f: 频率轴"""shift = int(np.ceil((1 - overlap) * WinLen)) # 计算移动步长Sig = Sig.flattenSigLen = len(Sig)Sig = np.real(Sig) # 确保信号是实信号t = np.arange(SigLen) / SampFreq # 时间向量# 计算重采样系数coef_r = coef_f.copyfor i in range(len(coef_f)):coef_r[i] = coef_f[i] / (i + 1)# 在系数前面添加0,并反转系数顺序coef_r = np.concatenate([[0], coef_r])coef_r = np.flip(coef_r)coef_f = np.flip(coef_f)# 计算重采样时间r_t = polyval(coef_r, t)f_t = polyval(coef_f, t)# 计算零填充长度t_tilde_tilde_len_max = r_t[-1] / np.min(f_t)padding_times = int(np.ceil(t_tilde_tilde_len_max / t[-1]))PLen = SigLen * padding_times# 零填充信号PSig = np.concatenate([Sig, np.zeros(PLen - SigLen)])# 零填充后的时间向量Pt = np.arange(PLen) / SampFreq# 创建高斯窗函数Win = gaussian(2 * PLen - 1, (2 * PLen - 1) / (WinLen / 2))# 初始化频谱矩阵Spec = np.zeros((SigLen, SigLen), dtype=complex)# 使用进度条显示计算进度for iLoop in tqdm(range(SigLen), desc="P-PRTF变换计算"):if iLoop % shift == 0:# 修复窗口切片问题 - 确保窗口长度与信号长度匹配start_idx = max(0, PLen - iLoop - 1)end_idx = min(len(Win), 2 * PLen - iLoop - 1)# 如果窗口长度不匹配,调整窗口win_segment = Win[start_idx:end_idx]if len(win_segment) PLen:# 如果窗口太长,截断win_segment = win_segment[:PLen]# 加窗SigWin = PSig * win_segment# 计算重采样函数r_d_t = polyval(coef_f, t[iLoop])tau_tilde = polyval(coef_r, Pt)# 扩展tau_tilde以匹配PLen长度if len(tau_tilde)完整代码通过知乎学术咨询获取:
https://www.zhihu.com/consult/people/792359672131756032?isMe=1
工学博士,担任《Mechanical System and Signal Processing》审稿专家,担任
《中国电机工程学报》《控制与决策》,《系统工程与电子技术》,《电力系统保护与控制》,《宇航学报》等EI期刊审稿专家,担任《计算机科学》,《电子器件》 ,《现代制造过程》 ,《电源学报》,《船舶工程》 ,《轴承》 ,《工矿自动化》 ,《重庆理工大学学报》 ,《噪声与振动控制》 ,《机械传动》 ,《机械强度》 ,《机械科学与技术》 ,《机床与液压》,《声学技术》,《应用声学》等中文核心审稿专家。
擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。
来源:明明科技论