信号处理-消除趋势项

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()
相关推荐
匠行科技7 小时前
基于VPX架构的双VU13P信号处理板
信号处理
kidwjb1 天前
Linux内核-内核信号处理函数
linux·内核·信号处理
jz_ddk1 天前
[信号处理] 数学与工程之美:相邻差分共轭乘积
数学·算法·信号处理·差分·共轭
小此方3 天前
Re:Linux系统篇(四十六)信号篇·四:一文串联操作系统底层:时钟中断、内核态切换、系统调用与 Linux 信号处理全解析
linux·驱动开发·信号处理
搞科研的小刘选手6 天前
【桂林电子科技大学、湖南第一师范学院、长沙师范学院支持】第三届虚拟现实、图像和信号处理国际学术会议(VRISP 2026)
信号处理·图像·虚拟现实·学术会议·会议推荐
j7~7 天前
【Linux】二十二.《Linux 信号机制完全指南:表示、捕捉与处理》
linux·信号处理·volatile·可入重函数·保存信号
X7x57 天前
跨厂商路由引入(重发布)实战指南:华为、华三、思科的逻辑差异与配置避坑
网络协议·信息与通信·信号处理·实施路由引入
nnerddboy8 天前
脑电信号处理实战 07|被试级泛化评估:心算状态解码、交叉验证泄漏对照与置换检验
信号处理
TechEdu2026068 天前
[通信与计算]离散时间信号处理:理论、算法与工程实践
信号处理·通信系统·信息通信
nnerddboy10 天前
脑电信号处理实战 03 | 运动想象脑机接口入门:ERD/ERS、CSP 空间滤波与左右拳想象解码
算法·信号处理