【TCN与LSTM例程】TCN(时间卷积网络)与LSTM(长短期记忆)训练单输入单输出,用于拟合一段信号,便于降噪。MATLAB

代码实现了基于TCN(时间卷积网络)和LSTM(长短期记忆网络)的信号降噪和拟合,并对两种方法的效果进行对比分析。

文章目录

程序详解

主要实现步骤

  1. 数据生成(第7-10行)
  • 生成2000个点的合成信号:sin(t) + 0.3*sin(3*t)
  • 添加高斯噪声(标准差0.15)模拟真实场景
  • signal_clean:无噪声的理想信号(作为标签)
  • signal_noise:含噪声的观测信号(作为输入)
  1. 数据预处理(第12-20行)
  • 采用滑窗方法构建监督学习样本
  • 窗口大小win=1(代码中较小,实际可调整)
  • 输入X:过去win个时刻的噪声观测值
  • 标签Y:当前时刻的真实无噪声值
  • 目的:训练模型通过历史噪声数据预测当前时刻的干净信号
  1. 训练集与验证集划分(第22-28行)
  • 80%数据用于训练
  • 20%数据用于验证和测试

TCN网络实现

网络架构

复制代码
输入层 → 卷积层1(32滤波器) → ReLU 
      → 卷积层2(32滤波器) → ReLU 
      → 卷积层3(1滤波器) → 展平 → 回归输出

关键特点

  • 使用Padding="causal"(因果填充):确保只使用过去信息,不泄露未来数据
  • 三层卷积逐步提取时序特征
  • 最后一层输出单一预测值

训练配置

  • 优化器:Adam
  • 学习率:0.001
  • 批量大小:32
  • 训练轮数:1000

LSTM网络实现

网络架构

复制代码
序列输入 → LSTM层1(12单元,输出序列) → Dropout(0.3)
        → LSTM层2(6单元,输出最后状态) → 全连接(32) 
        → ReLU → 全连接(1) → 回归输出

关键特点

  • 双层LSTM:第一层提取序列特征,第二层聚合信息
  • Dropout:防止过拟合(随机失活30%神经元)
  • 学习率调度:每40轮衰减到原来的0.3倍

效果评估

  1. 预测对比图
    展示四条曲线:
  • 理想值(无噪声真实信号)
  • 原始观测数据(含噪声)
  • TCN预测结果
  • LSTM预测结果
  1. 误差分析
    计算三种误差:
  • error_:原始噪声误差
  • error_TCN:TCN预测误差
  • error_LSTM:LSTM预测误差
  1. 统计特性
    输出六项指标:
  • 各方法的误差均值(反映系统偏差)
  • 各方法的误差标准差(反映波动性)
  1. CDF曲线(累积分布函数)
  • 通过直方图统计误差分布
  • 绘制累积概率曲线
  • 用于评估误差的概率分布特性

运行结果

两种方法的训练曲线:

信号曲线:

各方法的信号误差曲线:

MATLAB部分代码

部分代码如下:

matlab 复制代码
% TCN(时间卷积网络)与LSTM(长短期记忆)
% 单输入单输出,用于拟合一段信号,便于降噪
% 作者:matlabfilter
% 2025-11-17/Ver1 

clear; clc; close all;
rng(0);
%% 生成时间序列数据(带噪声)
N = 2000;
t = linspace(0, 20*pi, N);
signal_clean = sin(t) + 0.3*sin(3*t);
signal_noise = signal_clean + 0.15*randn(size(t));

% 根据过期的点信息来对当前点滤波
win = 1;

X = zeros(win, 1, 1, N-win);
Y = zeros(1, N-win);

for i = 1:N-win
    X(:,i) = signal_noise(i:i+win-1);
    Y(i) = signal_clean(i+win);   % 用无噪声信号作为标签,模拟"不确定标签"
end

%% 分割训练与验证集
numTrain = floor(0.8*(N-win));
XTrain = X(:,1:numTrain);
YTrain = Y(1:numTrain);

XVal   = X(:,numTrain+1:end);
YVal   = Y(numTrain+1:end);

%% 构建 TCN 网络
numFilters = 32;
filterSize = 3;

layers = [
    sequenceInputLayer(1, "Name","input")

    convolution1dLayer(filterSize, numFilters, "Padding","causal", "Name","conv1")
    reluLayer("Name","relu1")

    convolution1dLayer(filterSize, numFilters, "Padding","causal", "Name","conv2")
    reluLayer("Name","relu2")

    convolution1dLayer(filterSize, 1, "Padding","causal", "Name","conv3")
    flattenLayer("Name","flatten")
    regressionLayer("Name","output")
];

lgraph = layerGraph(layers);

完整代码

如需帮助,或有导航、定位滤波相关的代码定制需求,请点击联系作者:

相关推荐
久违 °4 小时前
【AI-Agent】TagMatrix 数据标注工具开发
人工智能·数据分析·go·agent·数据隐私
AI360labs_atyun4 小时前
腾讯推出电子牛马Marvis,好用吗?
人工智能·科技·ai
Dfreedom.4 小时前
Windows、虚拟机、开发板组网通信原理及调试通联步骤
人工智能·windows·部署·边缘计算·开发板·模型加速
3DVisionary4 小时前
蓝光三维扫描:医疗制造的精度焦虑怎么解
人工智能·算法·制造·蓝光三维扫描·医疗制造·三维检测·义齿检测
Are_You_Okkk_4 小时前
基于MonkeyCode解析AI研发新模式,根治开发低效痛点
大数据·人工智能·开源·ai编程
ylscode4 小时前
PureLogs 信息窃取恶意软件惊现高危变种:借道 MsBuild.exe 进程空心化实施无痕攻击
网络·安全·安全威胁分析
IPHWT 零软网络4 小时前
MX60E-A信创级智能语音网关技术实现与架构分析
网络·网络安全·国产自研·技术实现·智能语音网关·政企通信·信创技术
好评笔记4 小时前
机器学习面试八股——常用损失函数
人工智能·深度学习·算法·机器学习·校招
weixin_468466855 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
weixin_468466855 小时前
工业相机成像原理新手入门指南
人工智能·自动化·机器视觉·工业相机·光学·光学系统·成像原理