【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);

完整代码

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

相关推荐
qq_316837757 小时前
IP网段冲突 配置指定ip使用指定的网络接口发送,而不经过默认网关
服务器·网络·tcp/ip
GISer_Jing7 小时前
AI Agent 人类参与HITL与知识检索RAG
人工智能·设计模式·aigc
布史7 小时前
Tailscale虚拟私有网络指南
linux·网络
智界前沿8 小时前
2026可落地商用数字人选型指南:TOP5产品深度测评与实战对比
人工智能·aigc·数字人
Coder_Boy_8 小时前
基于SpringAI的在线考试系统-企业级软件研发工程应用规范实现细节
大数据·开发语言·人工智能·spring boot
枷锁—sha8 小时前
彻底解决 Google Gemini 报错:异常流量与 IP 地址冲突排查指南
网络·网络协议·tcp/ip
Xの哲學8 小时前
深入剖析Linux文件系统数据结构实现机制
linux·运维·网络·数据结构·算法
GISer_Jing8 小时前
AI开发实战:从零搭建智能应用
人工智能·prompt·aigc
WZGL12309 小时前
智慧养老方兴未艾,“AI+养老”让银龄老人晚年更美好
大数据·人工智能·物联网·生活·智能家居
-To be number.wan9 小时前
经典真题精讲|2010年408统考第34题:文件传输最少需要多久?
网络·计算机网络