信号处理-消除趋势项

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()
相关推荐
Pixlout14 小时前
《7元算子理论白皮书 v0.98.1》
信息与通信·信号处理
达不溜的日记16 小时前
AutoSAR通信概述-DBC文件
网络协议·信息与通信·信号处理
原来是猿18 小时前
Linux 信号处理:Core vs Term 解析
信号处理
电磁脑机19 小时前
和大脑正确交互的脑机接口研究推演理论
分布式·神经网络·架构·交互·信号处理
通信小呆呆2 天前
告别信道束缚:探究 Random Multiplexing 随机复用技术
信息与通信·信号处理·6g·随机复用
通信小呆呆2 天前
噪声体制近程雷达信号处理:从理论推导到SoC系统实现
信号处理·fpga·雷达·噪声雷达
再一次等风来2 天前
近场声全息(NAH)仿真实现:从阵列实值信号到波数域重建
算法·matlab·信号处理·近场声全息·nah
m0_555762903 天前
AD7768-4 ADC中的Sinc5是什么?
信号处理
MARIN_shen4 天前
Marin说PCB之FAKAR中心焊盘的孔径尺寸问题
硬件工程·信号处理·pcb工艺
FPGA-ADDA6 天前
第五篇(下):智能无线电与6G候选技术——从机器学习到通感一体化
人工智能·机器学习·信号处理·fpga·通信系统