机器学习周报-文献阅读

发布于:2025-03-30 ⋅ 阅读:(19) ⋅ 点赞:(0)

摘要

本周阅读了一篇题目为A novel ultra-short-term wind power forecasting method based on TCN and Informer models的论文,该论文提出了一种基于TCN和Informer相结合的双通道风电功率预测网络结构。与以往的工作不同,该网络结构对VMD分解得到的不同复杂度的模态分量进行了分类。该方法利用Informer模型预测低复杂度模式,同时利用TCN提取高复杂度模式的风电功率序列的局部空间互相关和时间相关性。随后,使用所述信息器模型来处理所提取的特征以揭示较长时间范围上的相依性,借此增强所述模型的预测性能。

Abstract

This week, I read a paper titled A Novel Ultra-Short-Term Wind Power Forecasting Method Based on TCN and Informer Models. The paper proposes a dual-channel wind power forecasting network structure that combines TCN (Temporal Convolutional Network) and Informer models. Unlike previous work, this network structure classifies modal components of varying complexity obtained from VMD (Variational Mode Decomposition). The method employs the Informer model to predict low-complexity modes, while using TCN to extract local spatial cross-correlations and temporal dependencies from the wind power sequences of high-complexity modes. Subsequently, the Informer model is utilized to process the extracted features, uncovering dependencies over longer time ranges, thereby enhancing the predictive performance of the model.

1 文章内容

1.1 模型

1.1.1 变分模式分解(VMD)

变分模式分解(Variational Mode Decomposition, VMD)是一种用于信号处理的自适应信号分解方法特别适用于处理非平稳和非线性信号。VMD通过将信号分解为多个固有模态函数(Intrinsic Mode Functions, IMFs),每个IMF具有不同的中心频率和带宽,从而能够有效地提取信号中的多尺度特征。
VMD的核心思想是通过变分优化问题来寻找信号的最佳分解方式,确保每个IMF在频域上是紧凑的,并且能够很好地表示信号的局部特征。

VMD的基本原理
VMD的目标是将一个输入信号 f ( t ) f(t) f(t)分解为K个IMF,每个IMF u k ( t ) u_k(t) uk(t)都具有明确的中心频率 w k w_k wk。VMD通过求解一个约束变分问题来实现这一目标,具体步骤如下:

  1. 希尔伯特变换:首先对每个IMF u k ( t ) u_k(t) uk(t) 进行希尔伯特变换,得到其解析信号:
    ( δ ( t ) + j π t ) ∗ u k ( t ) \left(\delta(t) + \frac{j}{\pi t}\right) * u_k(t) (δ(t)+πtj)uk(t)
    其中, δ \delta δ是单位脉冲函数, j j j是虚数单位,*表示卷积运算。
  2. 频率调制:对每个IMF的解析信号进行频率调制,将其频谱移动到基带:
    [ ( δ ( t ) + j π t ) ∗ u k ( t ) ] e − j ω k t \left[ \left(\delta(t) + \frac{j}{\pi t}\right) * u_k(t) \right] e^{-j\omega_k t} [(δ(t)+πtj)uk(t)]ejωkt
    其中, w k w_k wk是第k个IMF的中心频率。
  3. 带宽约束:通过施加带宽约束,确保每个IMF在频域上是紧凑的。VMD的约束变分问题可以表示为:
    min ⁡ { u k } , { ω k } { ∑ k ∥ ∂ t [ ( δ ( t ) + j π t ) ∗ u k ( t ) ] e − j ω k t ∥ 2 2 } \min_{\{u_k\},\{\omega_k\}} \left\{ \sum_k \left\| \partial_t \left[ \left(\delta(t) + \frac{j}{\pi t}\right) * u_k(t) \right] e^{-j\omega_k t} \right\|_2^2 \right\} min{uk},{ωk}{k t[(δ(t)+πtj)uk(t)]ejωkt 22}
    约束条件为: ∑ k u k = f ( t ) \sum_k u_k = f(t) kuk=f(t)
    其中, ∂ t \partial_t t表示时间导数, ∣ ∣ 2 2 ||_2^2 22表示 L 2 L_2 L2范数
  4. 增广拉格朗日函数:为了求解上述约束变分问题,引入增广拉格朗日函数 L:
    L ( { u k } , { ω k } , λ ) = α ∑ k ∥ ∂ t [ ( δ ( t ) + j π t ) ∗ u k ( t ) ] e − j ω k t ∥ 2 2 + ∥ f ( t ) − ∑ k u k ( t ) ∥ 2 2 + ⟨ λ ( t ) , f ( t ) − ∑ k u k ( t ) ⟩ \begin{aligned} \mathcal{L}(\{u_k\},\{\omega_k\},\lambda) &= \alpha \sum_k \left\|\partial_t \left[ (\delta(t)+\frac{j}{\pi t})*u_k(t) \right] e^{-j\omega_k t}\right\|_2^2 \\ &\quad + \left\| f(t) - \sum_k u_k(t) \right\|_2^2 \\ &\quad + \langle \lambda(t), f(t) - \sum_k u_k(t) \rangle \end{aligned} L({uk},{ωk},λ)=αk t[(δ(t)+πtj)uk(t)]ejωkt 22+ f(t)kuk(t) 22+λ(t),f(t)kuk(t)⟩
    其中, α \alpha α是惩罚因子, λ ( t ) \lambda(t) λ(t)是拉格朗日乘子。

1.1.2 Informer

Informer模型利用ProbSparse自注意机制,取代了传统方法,从而降低了时间复杂度并提高了内存效率。它进一步集成了自注意蒸馏技术,以有效地处理输入序列。此外,Informer使用生成解码器,可以同时生成多个预测,从而大大加快了序列预测的速度。下图显示了Informer的架构设计。

在这里插入图片描述

1.1.2.1 ProbSparse自注意机制:

传统Transformer的自注意力计算复杂度为O(L²)(L为序列长度),成为处理长序列的瓶颈。ProbSparse通过利用注意力矩阵的长尾分布特性(少量点积对注意力权重起主导作用),提出选择性计算关键Query-Key对的策略,将复杂度降至O(L ln L)。

  1. 标准自注意力计算:
    Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V
    计算所有Query和Key的点积,复杂度O(L²)。
  2. 注意力分布稀疏性度量:
    通过KL散度衡量Query注意力分布与均匀分布的差异:
    M ( q i , K ) = ln ⁡ ∑ j = 1 L K e q i k j T d − 1 L K ∑ j = 1 L K q i k j T d M(q_i, K) = \ln \sum_{j=1}^{L_K} e^{\frac{q_i k_j^T}{\sqrt{d}}} - \frac{1}{L_K} \sum_{j=1}^{L_K} \frac{q_i k_j^T}{\sqrt{d}} M(qi,K)=lnj=1LKed qikjTLK1j=1LKd qikjT
    第一项:Log-Sum-Exp,反映分布峰值
    第二项:算术平均,反映分布均匀性
    物理意义:若M(q_i,K)较大,说明该Query的注意力集中于少数Key(稀疏性强)。
    A ( q i , K , V ) = ∑ j k ( q i , k j ) ∑ l k ( q i , k l ) v j = E p ( k j ∣ q i ) [ v j ] A(q_i, K, V) = \sum_{j} \frac{k(q_i, k_j)}{\sum_l k(q_i, k_l)} v_j = \mathbb{E}_{p(k_j|q_i)}[v_j] A(qi,K,V)=jlk(qi,kl)k(qi,kj)vj=Ep(kjqi)[vj]
    k ( q i , k j ) = exp ⁡ ( q i k j T d ) k(q_i, k_j) = \exp\left(\frac{q_i k_j^T}{\sqrt{d}}\right) k(qi,kj)=exp(d qikjT)
  3. 近似稀疏性度量(Max-Mean)
    为降低计算成本,改用更高效的Max-Mean近似:
    M ‾ ( q i , K ) = max ⁡ j { q i k j T d } − 1 L K ∑ j = 1 L K q i k j T d \overline{M}(q_i, K) = \max_j \left\{ \frac{q_i k_j^T}{\sqrt{d}} \right\} - \frac{1}{L_K} \sum_{j=1}^{L_K} \frac{q_i k_j^T}{\sqrt{d}} M(qi,K)=maxj{d qikjT}LK1j=1LKd qikjT
    优势:仅需计算最大值和均值,复杂度O(L)。
  4. ProbSparse注意力实现
    a. Query筛选:对每个Query计算 M ‾ ( q i , K ) \overline{M}(q_i, K) M(qi,K),仅保留Top-u个稀疏性最强的Query u = c ln ⁡ L Q \quad u = c \ln L_Q u=clnLQ
    b.稀疏矩阵构造: Q ‾ = Top-u ( Q , M ‾ ) , u = c ln ⁡ L Q \overline{Q} = \text{Top-u}(Q, \overline{M}), \quad u = c \ln L_Q Q=Top-u(Q,M),u=clnLQ
    c. 简化计算: Attention ( Q , K , V ) = softmax ( Q ‾ K T d k ) V \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{\overline{Q}K^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V
1.1.2.2 Encoder:

编码器:编码器的主要作用是从长数据序列中提取依赖关系。为了节省内存占用并减少计算时间,Informer在Encoder的自我关注层中添加了一个蒸馏层。蒸馏层由卷积层和池化层组成。每次Attention操作后经过蒸馏层的序列长度减半,减少了内存占用,提高了计算速度。从阶段j至阶段j+1的蒸馏工艺如下
X j + 1 i = MaxPool ( ELU ( Conv1D ( [ X j i ] A B ) ) ) X_{j+1}^i = \text{MaxPool}\left( \text{ELU}\left( \text{Conv1D}\left( \left[ X_j^i \right]_{AB} \right) \right) \right) Xj+1i=MaxPool(ELU(Conv1D([Xji]AB)))
输入:第j层的注意力输出 [ X j i ] A B [ X_j^i ]_{AB} [Xji]AB
处理流程:
- 1D卷积:沿时间维度滤波(Conv1D + ELU激活)
- 最大池化:步长=2,序列长度减半

其中, [ ∗ ] A B [*]_{AB} []AB表示经过多次ProbSparse自注意操作的注意力块,使用ProbSparse激活函数在时间维度上进行一维卷积滤波,然后使用步长为2的最大池化层,然后在每层之后将Xt下采样到一半长度,这大大减少了内存的使用。𝐴𝐵为了提高蒸馏操作的鲁棒性,编码器结构被堆叠和组合,然后它们的输出被拼接以获得完整的编码器输出。因此,该模型的自注意蒸馏机制可以使解码器各层的输入序列长度减半。这大大减少了编码器的计算时间和内存开销,使其能够处理更长的时间序列输入。

1.1.2.3 Decoder:

解码器:解码器由两个相同的多头注意层组成。它使用生成预测方法来解决长序列数据预测的高时间复杂度问题。解码器的输入向量表示如下:

X f e e d . d e t = C o n c a t ( X t o k e n t , X 0 t ) ∈ R ( L t o k e n + L y ) × d X_{\mathrm{feed.de}}^{t} = \mathrm{Concat}(X_{\mathrm{token}}^{t}, X_{0}^{t}) \in \mathbb{R}^{(L_{\mathrm{token}} + L_{y}) \times d} Xfeed.det=Concat(Xtokent,X0t)R(Ltoken+Ly)×d
其中, X t X_t Xt表示起始token,从输入序列中选择Ltoken的长度的序列作为token,即预测序列前面的序列。 X 0 t X_0^t X0t代表靶序列的占位符,其被设置为0。 C o n c a t ( X t o k e n t , X 0 t ) ∈ R ( L t o k e n + L y ) × d \mathrm{Concat}(X_{\mathrm{token}}^{t}, X_{0}^{t}) \in \mathbb{R}^{(L_{\mathrm{token}} + L_{y}) \times d} Concat(Xtokent,X0t)R(Ltoken+Ly)×d表示多个注意力计算,而Concat是一个连接注意力的函数

解码器在解码阶段采用生成式推理策略。它首先对编码器生成的中间输出应用多头注意力。接下来,它通过完全连接的层转换输出数据的维度,最终产生预测结果。同时,解码器采用掩蔽的多头注意力来保证每个位置专门集中在与当前位置相关的信息上,从而防止自回归的可能性。

1.1.3 TCN

TCN在处理时间序列任务时,将传统CNN的强大特征提取能力与RNN的强大性能相结合。此外,TCN避免了RNN中常见的梯度消失和梯度爆炸的挑战。TCN由三个主要元素组成:因果卷积,扩张卷积和剩余连接

1.1.3.1 因果卷积

与标准卷积架构不同,因果卷积表现出单向设计,以确保模型的预测仅取决于先前数据,从而防止未来数据点的任何影响。这意味着它的输出只与当前和过去的输入有关,而与未来的输入无关。下图显示了因果卷积的结构。

在这里插入图片描述

1.1.3.2 扩张卷积

TCN使用扩张卷积以捕获更长的依赖关系。扩张卷积是一种向标准卷积中注入空穴以扩大感受野的卷积。这种方法的优点在于,**通过避免使用池操作,在保留信息的同时扩大了感受域。这使得卷积层的每个输出能够捕获更大范围的信息。**扩张卷积的公式:

F ( s ) = ( x ∗ d f ) ( s ) = ∑ i = 1 k − 1 f ( i ) ⋅ x s − d ⋅ i F(s) = (x *_d f)(s) = \sum_{i=1}^{k-1} f(i) \cdot x_{s - d \cdot i} F(s)=(xdf)(s)=i=1k1f(i)xsdi

其中,k是卷积核大小;d是膨胀因子;s-d×i是过去方向;x是输入;s是序列元素。下图为扩张的卷积的结构。

在这里插入图片描述

1.1.3.3 残差连接

残差结构允许信息通过跨层的直接连接传递,便于学习和捕获时间序列数据中的模式。该结构在缓解网络退化问题和提高模型的训练效率方面起着至关重要的作用。残差块的公式可以表示为:

o = A c t i v a t i o n ( x + F ( x ) ) o=Activation(x+F(x)) o=Activation(x+F(x))

其中,o表示输出,Activation是激活函数; F(x)表示卷积层的输出。下图表示出了残差连接的结构。

在这里插入图片描述

所有这些特点使得TCN非常适合于复杂的时间序列问题。
TCN的主要优点是它可以有效地捕获局部模式,同时具有灵活的感受野。此外,由于其共享的卷积架构,TCN与递归网络相比具有更高的效率。这种效率使TCN能够同时处理冗长的序列。

1.2 模型框架

研究框架示意图。在这里插入图片描述

  1. 首先,风电场在数据采集过程中面临各种突发事件,导致异常和缺失值。为了减轻该数据对模型性能的影响,我们首先排除离群值,并使用上一个时间点的值填充缺失值。将处理后的功率数据以9:1的比例划分为训练集和测试集。在训练集中,分配80%用于模型训练,20%用于验证集。最后,分别对训练集和测试集进行VMD分解。
  2. 第二步:计算每个分解模式的样本熵,并将样本熵的大小用作分析的基础。IMF被分类为低复杂度模态组和高复杂度模态组。然后,将这些组分别输入到通知者和TCN通知者信道。对每个分量进行预测以获得其预测值,随后对所有分量的这些预测值进行求和以获得最终的功率预测值。
  3. 第三步:为了评估该模型的性能,采用了6个评价指标,即平均绝对误差(MAE)、均方根误差(RMSE)、平均绝对百分比误差(MAPE)、决定系数( R 2 R^2 R2)、标准差(SD)和归一化平均绝对误差(NMAE),从多个角度对模型的性能进行了评价。随后,为清晰起见,对预测和评价结果进行了可视化。

1.2.1 基于样本熵的VMD分解

首先利用VMD演算法分析风电功率资料,以减轻其对预测准确度的影响。VMD分解的使用通过减少噪声提高了处理后的功率数据的稳定性和规律性。VMD技术有助于隔离不同时间尺度下数据信号的变化,从而生成多维分解数据。Informer等深度学习模型利用了这些特征,从而提高了训练效率和预测准确性。

本文旨在通过建立基于预测内在特征的预测模型,更好地反映风电的随机性、波动性和不确定性目标。为了更好地反映风电功率的随机性、波动性和不确定性,预测模型应从预测对象的特点出发。
样本熵是用来评估时间序列的复杂性和规律性的度量。当样本熵较小时,表明时间序列具有较强的自相似性,表现出更有规律性和可预测性的特征。相反,样本熵值越大,说明时间序列越复杂,随机值越多,缺乏明显的规律性。

文首先对风电数据进行VMD分解,然后计算VMD分解后各IMF的样本熵,并求和平均。该方法涉及使用多个Informer模型对样本熵低于平均值的IMF进行训练和预测,同时对其余IMF采用多个TCN-Informer模型。利用TCN的特点,充分提取了样本熵较高的复杂序列特征,从而提高了模型的预测精度。利用样本熵的VMD分解过程如下图所示。
在这里插入图片描述

1.2.2 TCN与Informer相结合的双通道网络结构

基于TCN和Informer的双通道架构如下图所示,左侧为TCN-Informer模型,右侧为Informer模型。该模型通过将不同复杂度的IMF组输入到模型的两个不同通道中来训练和预测。所提出的模型通过将不同复杂性的IMF馈送到模型的两个独立通道中来训练和预测。Informer利用概率稀疏自注意机制来关注并提取低复杂度模态组数据中的基本长期依赖关系,从而为每个IMF产生预测值。与TCN相结合,Informer模型利用TCN来捕获高复杂性模态组内的短期局部交叉特征。随后,Informer模型集中并提取这些特征中存在的重要长期依赖关系,从而为每个IMF提供预测值。

在这里插入图片描述

风电数据通过VMD进行分解,从而计算每个IMF分量的样本熵,然后将其聚合以获得平均值。对于样本熵大于平均值的IMF分量,TCN用于提取风电功率序列在时间尺度上的局部空间交叉特征和关系。然后将这些提取的特征输入Informer模型,以捕获长期依赖关系。通过这样做,该模型提取了不同时间和空间尺度的依赖关系,从而产生更丰富和更多样化的特征,从而提高了更复杂IMF分量的预测精度。

1.3 实验与讨论

1.3.1 数据集介绍及评价指标

原始数据集包括气象数据以及2020年全年的风电数据包括温度、湿度、30米风速、70米风速、风向、风速、有功功率。每15分钟记录一次,每天记录96个点,共计35,048条数据。

使用了六个指标来评估模型预测的精度和一致性:MAE、RMSE、MAPE、R2、SD和NMAE。采用归一化平均绝对误差来评估所提出模型在不同数据集上的有效性。各评价指标的计算公式如下:

  1. MAE = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ \text{MAE} = \frac{1}{n}\sum_{i=1}^{n} |y_i - \hat{y}_i| MAE=n1i=1nyiy^i
  2. RMSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{RMSE} = \sqrt{\frac{1}{n}\sum_{i=1}^{n} (y_i - \hat{y}_i)^2} RMSE=n1i=1n(yiy^i)2
  3. MAPE = 1 n ∑ i = 1 n ∣ y i − y ^ i y i ∣ × 100 % \text{MAPE} = \frac{1}{n}\sum_{i=1}^{n} \left| \frac{y_i - \hat{y}_i}{y_i} \right| \times 100\% MAPE=n1i=1n yiyiy^i ×100%
  4. R 2 = 1 − ∑ i = 1 n ( y i − y ^ i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2 = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2} R2=1i=1n(yiyˉ)2i=1n(yiy^i)2
  5. σ = 1 n ∑ i = 1 n ( y i − μ ) 2 \sigma = \sqrt{\frac{1}{n}\sum_{i=1}^{n} (y_i - \mu)^2} σ=n1i=1n(yiμ)2
  6. NMAE = MAE P \text{NMAE} = \frac{\text{MAE}}{P} NMAE=PMAE

其中,n表示风电数据样本的合计计数; 𝑦 𝑖 𝑦_𝑖 yi是风电功率真值; y ^ i \hat y_i y^i是风电功率预测值; y ˉ \bar y yˉ真实的风电功率平均值; σ \sigma σ表示标准差; μ \mu μ是预测风功率的平均值;P为风电场站的额定容量。

1.3.2 实验一

  1. 提前15min风电功率预测
    VMD分解的K值选择:通过ADF检验和中心频率分析,确定最佳K值为7。消融实验:比较了提出的双通道模型与单通道模型(VMD-Informer和VMD-TCN-Informer),结果显示双通道模型的MAE比单通道模型分别降低了11.78%和24.52%。
    基线模型对比:与12种基线模型(如VMD-LSTM、DWT-Informer、Transformer等)对比,提出的模型在MAE、RMSE等指标上表现最优,MAE为0.674,显著优于其他模型。
    在这里插入图片描述
    在这里插入图片描述

  2. 提前1小时风电功率预测
    提出的模型在1小时预测中仍表现最优,MAE为1.12,比单通道模型(VMD-Informer)降低了11.39%,验证了模型的泛化能力。
    在这里插入图片描述
    在1小时前预测中,所提出的双通道结构仍然能够有效地提取数据中的潜在特征,从而提高预测精度。对于短期非平稳序列,该模型的预测性能优于其他同类模型。该方法具有较强的泛化能力和鲁棒性。

1.3.4 实验二

为了提高所提出的模型的有效性,论文中利用数据来自一个额外的真实的风电场位于中国南方。该风电场的额定容量为96 MW,并且经历的气象条件与实验1中的数据集显著不同。该数据集的分辨率为15分钟。

两个数据集中全年风速、湿度和温度的比较如下图所示,其中浅色箱形图表示数据集1,深色箱形图表示数据集2。图中显示,数据集1具有更集中的风速分布和更低的风速,而数据集2显示全年更集中的温度和湿度。此外,数据集1经历四个不同的季节。
在这里插入图片描述

下表显示了所提出的模型在两个气象条件差异很大的数据集上的每个评估指标。从表中可以看出,两个数据集之间的MAE差异为34.48%,并且所提出的模型在两个数据集上都表现出优异的性能,并且具有很强的适用性。
在这里插入图片描述

2 相关知识

2.1 变分模式分解(VMD)

变分模式分解(Variational Mode Decomposition, VMD)是一种用于信号处理的自适应信号分解方法特别适用于处理非平稳和非线性信号。VMD通过将信号分解为多个固有模态函数(Intrinsic Mode Functions, IMFs),每个IMF具有不同的中心频率和带宽,从而能够有效地提取信号中的多尺度特征。
VMD的核心思想是通过变分优化问题来寻找信号的最佳分解方式,确保每个IMF在频域上是紧凑的,并且能够很好地表示信号的局部特征。

VMD的基本原理
VMD的目标是将一个输入信号 f ( t ) f(t) f(t)分解为K个IMF,每个IMF u k ( t ) u_k(t) uk(t)都具有明确的中心频率 w k w_k wk。VMD通过求解一个约束变分问题来实现这一目标,具体步骤如下:

  1. 希尔伯特变换:首先对每个IMF u k ( t ) u_k(t) uk(t) 进行希尔伯特变换,得到其解析信号:
    ( δ ( t ) + j π t ) ∗ u k ( t ) \left(\delta(t) + \frac{j}{\pi t}\right) * u_k(t) (δ(t)+πtj)uk(t)
    其中, δ \delta δ是单位脉冲函数, j j j是虚数单位,*表示卷积运算。
  2. 频率调制:对每个IMF的解析信号进行频率调制,将其频谱移动到基带:
    [ ( δ ( t ) + j π t ) ∗ u k ( t ) ] e − j ω k t \left[ \left(\delta(t) + \frac{j}{\pi t}\right) * u_k(t) \right] e^{-j\omega_k t} [(δ(t)+πtj)uk(t)]ejωkt
    其中, w k w_k wk是第k个IMF的中心频率。
  3. 带宽约束:通过施加带宽约束,确保每个IMF在频域上是紧凑的。VMD的约束变分问题可以表示为:
    min ⁡ { u k } , { ω k } { ∑ k ∥ ∂ t [ ( δ ( t ) + j π t ) ∗ u k ( t ) ] e − j ω k t ∥ 2 2 } \min_{\{u_k\},\{\omega_k\}} \left\{ \sum_k \left\| \partial_t \left[ \left(\delta(t) + \frac{j}{\pi t}\right) * u_k(t) \right] e^{-j\omega_k t} \right\|_2^2 \right\} min{uk},{ωk}{k t[(δ(t)+πtj)uk(t)]ejωkt 22}
    约束条件为: ∑ k u k = f ( t ) \sum_k u_k = f(t) kuk=f(t)
    其中, ∂ t \partial_t t表示时间导数, ∣ ∣ 2 2 ||_2^2 22表示 L 2 L_2 L2范数
  4. 增广拉格朗日函数:为了求解上述约束变分问题,引入增广拉格朗日函数 L:
    L ( { u k } , { ω k } , λ ) = α ∑ k ∥ ∂ t [ ( δ ( t ) + j π t ) ∗ u k ( t ) ] e − j ω k t ∥ 2 2 + ∥ f ( t ) − ∑ k u k ( t ) ∥ 2 2 + ⟨ λ ( t ) , f ( t ) − ∑ k u k ( t ) ⟩ \begin{aligned} \mathcal{L}(\{u_k\},\{\omega_k\},\lambda) &= \alpha \sum_k \left\|\partial_t \left[ (\delta(t)+\frac{j}{\pi t})*u_k(t) \right] e^{-j\omega_k t}\right\|_2^2 \\ &\quad + \left\| f(t) - \sum_k u_k(t) \right\|_2^2 \\ &\quad + \langle \lambda(t), f(t) - \sum_k u_k(t) \rangle \end{aligned} L({uk},{ωk},λ)=αk t[(δ(t)+πtj)uk(t)]ejωkt 22+ f(t)kuk(t) 22+λ(t),f(t)kuk(t)⟩
    其中, α \alpha α是惩罚因子, λ ( t ) \lambda(t) λ(t)是拉格朗日乘子。

VMD的优点

  1. 自适应性强:VMD不需要预先设定基函数,能够根据信号的特征自适应地分解出多个IMF,每个IMF都具有明确的物理意义。
  2. 抗噪能力强:VMD通过带宽约束和频率调制,能够有效抑制噪声,提取信号中的有用信息。
  3. 避免模态混叠:与经验模态分解(EMD)相比,VMD能够有效避免模态混叠问题,确保每个IMF在频域上是紧凑的。

变分模式分解(VMD)是一种强大的信号分解方法,能够有效处理非平稳和非线性信号。通过将信号分解为多个IMF,VMD能够提取信号中的多尺度特征,降低信号的复杂性和非平稳性。在风电功率预测中,VMD能够显著提高预测模型的精度和稳定性。尽管VMD存在参数选择和计算复杂度较高的局限性,但其在信号处理领域的应用前景广阔,特别是在处理复杂信号和噪声抑制方面表现出色。

相关代码

import torch
import torch.fft
import numpy as np
import matplotlib
matplotlib.use('TkAgg')  # 切换到 TkAgg 后端
import matplotlib.pyplot as plt

def vmd(signal, num_modes=3, alpha=2000, tau=0, max_iter=500, tol=1e-7):
    """
    Variational Mode Decomposition (VMD) using PyTorch.

    参数:
        signal (torch.Tensor): 输入信号 (1D tensor)
        num_modes (int): 分解的模态数量 K
        alpha (float): 带宽惩罚参数
        tau (float): 时间步长参数 (通常设为 0)
        max_iter (int): 最大迭代次数
        tol (float): 收敛容差

    返回:
        u (torch.Tensor): 分解得到的模态分量 (num_modes x signal_length)
        omega (torch.Tensor): 每个模态的中心频率
    """
    # 确保输入信号是 PyTorch 张量
    if not torch.is_tensor(signal):
        signal = torch.tensor(signal, dtype=torch.float32)

    signal = signal.to(torch.float32)
    N = signal.shape[0]  # 信号长度

    # 初始化模态分量和中心频率
    u = torch.zeros((num_modes, N), dtype=torch.float32)  # 模态分量
    omega = torch.linspace(0, 0.5, num_modes, dtype=torch.float32)  # 初始中心频率
    lambda_ = torch.zeros(N, dtype=torch.float32)  # 拉格朗日乘子

    # 计算单边频谱
    f = torch.fft.rfft(signal)
    freqs = torch.fft.rfftfreq(N)

    # 迭代优化
    for _ in range(max_iter):
        u_old = u.clone()

        for k in range(num_modes):
            # 更新每个模态分量
            # 计算残差
            residual = signal - torch.sum(u, dim=0) + u[k]
            # 傅里叶变换
            u_hat = torch.fft.rfft(residual)
            lambda_hat = torch.fft.rfft(lambda_)  # 对 lambda_ 进行傅里叶变换
            # 频域更新公式
            denominator = 1 + 2 * alpha * (freqs - omega[k]) ** 2
            u_hat_k = (u_hat - lambda_hat / 2) / denominator
            # 逆傅里叶变换回到时域
            u[k] = torch.fft.irfft(u_hat_k, n=N)

        # 更新中心频率
        for k in range(num_modes):
            u_hat_k = torch.fft.rfft(u[k])
            power_spectrum = torch.abs(u_hat_k) ** 2
            omega[k] = torch.sum(freqs * power_spectrum) / torch.sum(power_spectrum)

        # 更新拉格朗日乘子(时域)
        lambda_ = lambda_ + tau * (torch.sum(u, dim=0) - signal)

        # 检查收敛
        if torch.norm(u - u_old) / torch.norm(u_old) < tol:
            break

    return u, omega


# 示例使用
# 示例使用
if __name__ == "__main__":
    # 生成一个测试信号
    t = torch.linspace(0, 1, 1000)
    signal = (torch.sin(2 * np.pi * 5 * t) +
              0.5 * torch.sin(2 * np.pi * 15 * t) +
              0.2 * torch.randn(1000))

    # 运行 VMD
    num_modes = 2
    u, omega = vmd(signal, num_modes=num_modes, alpha=2000, tau=0)

    # 打印结果
    print("模态分量形状:", u.shape)
    print("中心频率:", omega)

    # 可视化
    plt.figure(figsize=(10, 6))
    plt.subplot(num_modes + 1, 1, 1)
    plt.plot(signal.numpy(), label="Original Signal")
    plt.legend()
    for k in range(num_modes):
        plt.subplot(num_modes + 1, 1, k + 2)
        plt.plot(u[k].numpy(), label=f"Mode {k + 1}")
        plt.legend()
    plt.tight_layout()
    plt.show()

在这里插入图片描述

其中,对于模态分量形状,2表示指定的模态数量,1000为输入信号的长度。中心频率是每个模态分量在频域中的主要振荡频率。VMD 通过优化算法调整这些频率,使每个模态的带宽最小化,同时保持分解的有效性。
在这里插入图片描述

原始信号(第一张子图):显示输入信号的波形,例如一个包含 5 Hz 和 15 Hz 正弦波以及噪声的混合信号。
分解后的模态分量(后续子图),每个模态单独绘制,展示它们各自的波形。

总结

提出了一种基于TCN和Informer相结合的双通道风电功率预测网络结构。在不同的数据集和时间尺度上对结果进行了比较。与以往的工作不同,该网络结构对VMD分解得到的不同复杂度的模态分量进行了分类。该方法利用Informer模型预测低复杂度模式,同时利用TCN提取高复杂度模式的风电功率序列的局部空间互相关和时间相关性。随后,使用所述信息器模型来处理所提取的特征以揭示较长时间范围上的相依性,借此增强所述模型的预测性能。


网站公告

今日签到

点亮在社区的每一天
去签到