简单的同步压缩变换脊线检测(Python&MATLAB)

由于 Heisenberg 测不准原理,线性时频变换方法无法同时在时间和频率方向达到最佳的时频分布,窗函数和小波函数的选择也降低了各方法的自适应性。同样,二次型变换方法难以在去除交叉干扰项的同时保证较高的能量集中度。为了解决该问题,一系列将时频系数重排到信号能量分布的重心,致力于提高能量集中度的后处理方法被提出。首先,通过分析相位信息来聚集分散的时频能量,在此基础上重排方法被提出以改进线性时频变换,其原理下所示。

图中绿色矩形指时频系数分布位置,红色实线为理论瞬时频率,红色箭头为重排方向。该方法通过重新分配时频系数来提高时频分辨率,对微弱故障特征的提取至关重要。然而,重排方法在时间和频率两个方向重排时频系数丢失了信号的相位信息,故该方法不具备重构能力。在实际应用中,信号分析算法的可逆性是分离干扰能量的关键特性,因此多贝西提出一种基于小波变换的同步压缩变换,该方法将连续小波变换各个模态分量附近的能量聚集到瞬时频率算子,在提高时频分布可读性的同时保留信号重构的所需的信息。在此基础上,可以将该方法引入短时傅里叶变换和 S 变换的框架中,这些方法都取得了良好的效果,其适用性也得到了验证。然而,这些方法在处理强调频信号时效果不够理想,这导致其在现实应用难以处理如引力波、心电图等信号的分析。

近年来,随着同步压缩变换和时间重排同步压缩变换在各领域的成功应用,越来越多的学者以同步压缩技术为框架提出了大量改进方法。如针对强调频信号提出的解调变换,该方法使用解调算子对信号进行前处理,降低信号的非平稳度,最终提升同步压缩变换的处理效果。值得一提的是,解调算子的计算主要有两种方法:匹配解调算法和脊估计算法,前者适应性好但计算量偏大,后者计算成本更低但非常依赖脊估计算法。该方法的优势是可以与同步压缩变换结合使用,进一步提升时频分布的时频分辨率。此外,还有以大幅度提升时频分辨率为目标的多重同步压缩变换和时间重排多重同步压缩变换,为降低噪声影响提出的同步提取变换和瞬态提取变换,以及致力于提升算法泛化能力的自适应同步压缩变换等。

复制代码
import numpy as np
from numpy import pi as pi
import seaborn as sns
import matplotlib.pyplot as plt
from src.utilities.utilstf import get_spectrogram
from mcsm_benchs.SignalBank import SignalBank
from mcsm_benchs.Benchmark import Benchmark
from src.methods.method_sstrd import NewMethod

# np.random.seed(0) 
# signal parameters
SNRin = 20
N = 2**10
# Nsub=N//2
sbank = SignalBank(N=N, return_signal=True)
tmin = sbank.tmin
tmax = sbank.tmax
s = sbank.signal_mc_multi_linear()
# s = sbank.signal_mc_crossing_chirps()
# s = sbank.signal_mc_synthetic_mixture()
s = sbank.signal_mc_synthetic_mixture_3()


noise = np.random.randn(N,)
signal = Benchmark.sigmerge(s,noise,SNRin)

Nfft = 2*N
S, F = get_spectrogram(s)
F = F[0:N+1]
methodml = NewMethod()
funa = methodml.method




# signal_output = funa(signal,[],True,Pnei,M,L)
signal_output = funa(signal,)


S_output, F_output = get_spectrogram(signal_output)
F_output = F_output[0:N+1]


print(10*np.log10((np.sum(s[tmin:tmax]**2))/(np.sum((s[tmin:tmax]-signal_output[tmin:tmax])**2))))


plt.figure()
plt.plot(s[tmin:tmax])
plt.plot(signal_output[tmin:tmax],'--')
复制代码
fig, ax = plt.subplots(1,3,figsize = (15,5))
ax[0].imshow(abs(F), origin='lower')#, cmap=cmocean.cm.deep)
ax[0].set_title('Input Signal')
ax[1].imshow(abs(F_output), origin='lower')#, cmap=cmocean.cm.deep)
ax[1].set_title('Output Signal')
ax[2].imshow(abs(F_output-F), origin='lower')#, cmap=cmocean.cm.deep)
ax[2].set_title('Difference')
plt.show()

知乎学术咨询:
https://www.zhihu.com/consult/people/792359672131756032?isMe=1

工学博士,担任《Mechanical System and Signal Processing》《中国电机工程学报》《控制与决策》等期刊审稿专家,擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

相关推荐
十八旬7 分钟前
苍穹外卖项目实战(day7-2)-购物车操作功能完善-记录实战教程、问题的解决方法以及完整代码
java·开发语言·windows·spring boot·mysql
武子康15 分钟前
AI-调查研究-74-具身智能 机器人学习新突破:元学习与仿真到现实迁移的挑战与机遇
人工智能·程序人生·ai·职场和发展·系统架构·机器人·具身智能
BIGSHU092317 分钟前
java多线程场景3-并发处理和异步请求
java·开发语言·python
索迪迈科技18 分钟前
算法题(203):矩阵最小路径和
线性代数·算法·矩阵
练习两年半的工程师20 分钟前
AWS TechFest 2025: 适合使用 Agentic AI 的场景、代理(Agents)应用的平衡之道、数据战略优先级矩阵、新治理模式
人工智能·云计算·aws
默默无名的大学生23 分钟前
数据结构——链表的基本操作
数据结构·算法
Source.Liu23 分钟前
【Python自动化】 21.3 Pandas Series 核心数据结构完全指南
python·自动化·pandas
Monkey的自我迭代24 分钟前
图像直方图
图像处理·人工智能·计算机视觉
_OP_CHEN26 分钟前
数据结构(C语言篇):(十一)二叉树概念介绍
c语言·开发语言·数据结构·二叉树·学习笔记··
Neverfadeaway27 分钟前
C语言————冒泡排序(例题2)
c语言·数据结构·算法·冒泡排序·升序排列·降序排列