信号处理-消除趋势项

matlab 版本

python 版本

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams

# 设置中文字体
rcParams['font.sans-serif'] = ['SimHei']  # 设置默认字体为黑体
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

def compute_time(n, fs):
    """生成时间序列"""
    return np.arange(n) / fs

def trend_remove(s, fs, m=2):
    """去除信号中的趋势项"""
    x = compute_time(len(s), fs)
    param = np.polyfit(x, s, m)  # 用m次多项式拟合
    s_poly_func = np.poly1d(param)  # 生成多项式函数
    s_poly = s_poly_func(x)  # 计算多项式值
    return s - s_poly  # 去除趋势项

# 创建一个带二次趋势的信号
fs = 100  # 采样频率
t = compute_time(1000, fs)  # 时间序列
quadratic_trend = 0.01 * t**2 + 0.5 * t  # 二次趋势
signal = np.sin(2 * np.pi * 5 * t) + quadratic_trend  # 信号 = 正弦波 + 二次趋势

# 去除趋势项
signal_detrended = trend_remove(signal, fs, m=2)  # 使用二次多项式去除趋势

# 可视化结果
plt.figure(figsize=(10, 6))
plt.plot(t, signal, label="原始信号 (带趋势)")
plt.plot(t, signal_detrended, label="去除趋势后的信号", linestyle="--")
plt.legend()
plt.xlabel("时间 (s)")
plt.ylabel("幅值")
plt.title("信号去趋势验证 (m=2)")
plt.grid()
plt.show()
相关推荐
kissgoodbye20126 天前
信号处理文献阅读总结:型号识别
信号处理
1560820721912 天前
JFMZQ28DR、JFMZQ68DR、RFsoc XCZU47DR、XCZU48DR 信号处理板
fpga开发·信号处理
联丰迅声13 天前
城市生命线的“听觉”缺口:声振感知如何补上监测闭环
信号处理·故障诊断·传感器·城市生命线
花月mmc14 天前
FPGA数字信号处理与深度学习
嵌入式硬件·深度学习·fpga开发·信号处理
进击的荆棘15 天前
Linux系统——进程信号之保存和捕捉信号
linux·运维·服务器·信号处理·信号
阿尔泰科技官方17 天前
多机箱异地采集—如何实现数据对齐?阿尔泰科技授时同步实战方案!
科技·数据采集·信号处理·工业自动化·仪器仪表·工控机·机箱
这张生成的图像能检测吗18 天前
(论文速读)ClassBD:让盲反卷积与故障分类器协同学习的抗噪轴承诊断方法
分类·信号处理·故障诊断·去噪
福芯微电子有限公司nfc22 天前
国产收音芯片 FSV4755:多波段调谐与高集成设计,赋能多种音频终端
网络协议·网络安全·音视频·信息与通信·信号处理
搞科研的小刘选手23 天前
【见刊检索快 | 重庆线上线下同步】第五届信号处理、计算机网络与通信国际学术会议(SPCNC 2026)
计算机网络·信号处理·通信·学术会议·会议推荐·重庆
星夜离尘5624 天前
MATLAB 采样混叠实验 20 Hz 和 80 Hz 为什么会得到相同数据
matlab·数据采集·信号处理·采样定理·混叠