音频进阶学习二十——DFT离散傅里叶变换

news2025/4/16 17:33:42

文章目录

  • 前言
  • 一、FT、FS、DTFT、DFS
    • 1.FT和FS
    • 2.DTFT和DFS
  • 二、DFT定义
    • 1.对于DFT的理解
      • 1)DTFT和DFT
      • 2)DFS和DFT
      • 3)有限长序列和周期序列
    • 2.圆周卷积
      • 1)线性卷积
      • 2)圆周卷积
  • 三、频率采样和插值恢复
    • 1.频率采样的影响
    • 2.频率采样和时域序列的关系
      • 1)从频率采样看时域的关系
      • 2)从时域截取看频域的关系
      • 3)序列长度L与周期N
    • 3.插值恢复
  • 四、DFT的性质和定理
  • 总结


前言

在之前的文章中,我们介绍了对于系统频域上的分析,主要集中在傅里叶变换和Z变换后对于频率响应的分析,包括幅频响应,相位响应和群延迟,并介绍了LTI系统中的幅频响应相同系统、全通系统、最小相位系统等系统。

在接下来的文章中,将会真正的学习在计算机中如何实现傅里叶变换,以及通过傅里叶变换实现之前所介绍的系统。

本篇文章将会介绍新的傅里叶变换——DFT,即离散傅里叶变换的分析和解释,这是一种可以通过数字系统实现的傅里叶变换。然后对于DFT的性质将会做一个归纳。

|版本声明:山河君,未经博主允许,禁止转载


一、FT、FS、DTFT、DFS

在以前的文章中,我们介绍过总的傅里叶变换,以及对于DTFT、DFS的详细介绍。而一些傅里叶变换是无法在数字系统中进行实现的。

1.FT和FS

  • 傅里叶变换(FT):用于连续时间信号的频谱分析,通常适用于无限长的信号。由于时域信号是连续的,频域也是连续的,计算机无法直接处理连续的频域,因此我们无法直接应用传统的傅里叶变换进行数值计算。
  • 傅里叶级数(FS):用于分析周期信号,也适用于连续时间的信号,频域由一系列离散的频率分量组成。频谱是离散的,但由于时域信号是连续的,所以计算机处理起来仍然存在困难。

对于FT和FS如同下图,总的来说因为时域是连续的,所以无法在数字系统中进行结算。
在这里插入图片描述

2.DTFT和DFS

对于时域连续导致无法在数字系统上计算的问题,在这一系列最开始的文章中音频进阶学习二——模数和数模转换中的采样、量化和编码中就有说过,将模拟信号通过模数转换为离散的数字信号,此时就可以在数字系统上进行计算。

  • 离散时间傅里叶变换(DTFT):是对离散时间信号(无限长)进行傅里叶变换,产生一个连续频域,就像传统的傅里叶变换一样。由于时域是离散的,但频域是连续的,所以仍然不能直接在计算机上进行处理。
  • 离散傅里叶级数(DFS):是对周期离散信号进行傅里叶级数展开,结果是离散频率的频谱。由于信号是周期的,频域也是离散的,但由于序列无限长,因此只能说是计算上是可能的。

在这里插入图片描述
对于DTFT和DFS的解析在这系列音频进阶学习九——离散时间傅里叶变换DTFT和音频进阶学习十一——离散傅里叶级数DFS中。

二、DFT定义

1.对于DFT的理解

很明显,数字系统处理的需要是在时域和频域上是离散的,且是有限长的。为了达成这样的条件,延申出了DFT也就是离散傅里叶变换

那么下面对于DTFT的理解可以从下文的三种角度上来分析:

1)DTFT和DFT

由于DTFT在时域上是离散的,在频域上是在 [ − π , π ] [-\pi,\pi] [π,π]上连续,那么如果我们对于频域上再进行采样,那么就可以得到时域离散信号对应的离散的频域。
对于DTFT进行周期采样有:
X ( e j ω ) = ∑ n = − ∞ ∞ x [ n ] e − j ω n = > X ( k ) = X ( e j ω ) ∣ ω = 2 π k N = ∑ n = − ∞ ∞ x [ n ] e − j 2 π k n N X(e^{j\omega})=\sum_{n=-\infty}^{\infty}x[n]e^{-j\omega n}=>X(k)=X(e^{j\omega})|_{\omega=\frac{2\pi k}{N}}=\sum_{n=-\infty}^{\infty}x[n]e^{-j\frac{2\pi kn}{N}} X(e)=n=x[n]ejωn=>X(k)=X(e)ω=N2πk=n=x[n]ejN2πkn
其中

  • X ( k ) X(k) X(k):是序列的DFT
  • N N N:是序列周期
  • k k k:表示频率索引,范围是 [ 0 , N − 1 ] [0,N-1] [0,N1]
  • e j ( − 2 π k n N ) e^{j(\frac{-2\pi kn}{N})} ej(N2πkn):复指数,表示信号的频率分量

2)DFS和DFT

对于周期信号而言,我们可以只取一个周期进行分析,这样就避免了无限长序列在数字系统中无法计算的问题。而对于DFT实际上就是周期序列一个周期等间隔取样的频谱。
如下图:

在这里插入图片描述
而在表达式上,实际上就是把~去掉
X ~ [ k ] = ∑ n = 0 N − 1 e j ( − 2 π k n N ) x ~ [ n ] = > X [ k ] = ∑ n = 0 N − 1 e j ( − 2 π k n N ) x [ n ] \tilde{X}[k]=\sum_{n=0}^{N-1}e^{j(\frac{-2\pi kn}{N})}\tilde{x}[n]=>X[k]=\sum_{n=0}^{N-1}e^{j(\frac{-2\pi kn}{N})}x[n] X~[k]=n=0N1ej(N2πkn)x~[n]=>X[k]=n=0N1ej(N2πkn)x[n]
x ~ [ n ] = 1 N ∑ k = 0 N − 1 e j ( 2 π k n N ) X ~ [ k ] = > x [ n ] = 1 N ∑ k = 0 N − 1 e j ( 2 π k n N ) X [ k ] \tilde{x}[n]=\frac{1}{N}\sum_{k=0}^{N-1}e^{j(\frac{2\pi kn}{N})}\tilde{X}[k]=>x[n]=\frac{1}{N}\sum_{k=0}^{N-1}e^{j(\frac{2\pi kn}{N})}X[k] x~[n]=N1k=0N1ej(N2πkn)X~[k]=>x[n]=N1k=0N1ej(N2πkn)X[k]
所以对于DFT,和DFS存在一样的性质

3)有限长序列和周期序列

真实采样的信号通常是非周期且无限长的,所以针对于非周期的信号,在时域上进行截断,此时就变成了有限长序列,同时对于截断的时域信号认为它是周期信号来进行分析。
如同下图:
在这里插入图片描述

此时非周期序列和周期的序列关系如:
x [ n ] = x ~ [ n ] R N [ n ] ; R N [ n ] = { 1 , 0 ≤ n ≤ N − 1 0 , n > N − 1 ∣ ∣ n < 0 x ~ [ n ] = x [ ( ( n ) ) N ] x[n]=\tilde{x}[n]R_N[n];\quad R_N[n]=\begin{cases}1,\quad 0 \leq n \leq N-1 \\ 0, \quad n > N-1||n<0\end{cases}\\ \tilde{x}[n]=x[\big((n)\big)_N] x[n]=x~[n]RN[n];RN[n]={1,0nN10,n>N1∣∣n<0x~[n]=x[((n))N]
其中 N N N是序列周期, x [ ( ( n ) ) N ] x[\big((n)\big)_N] x[((n))N]表示 n n n对于 N N N进行取模运算。

但值得注意的是设信号在截断的两端突然变为零,这相当于信号发生了突变,会发生频谱泄露。这个会在以后讲解加窗的文章中进行详细介绍。

2.圆周卷积

1)线性卷积

回顾一下,在音频进阶学习五——求线性时不变系统卷积和的解时,对于系统的输出线性卷积的长度有做过理解:
y [ n ] = ∑ m = 0 M − 1 x [ m ] h [ n − m ] y[n]=\sum_{m=0}^{M-1}x[m]h[n-m] y[n]=m=0M1x[m]h[nm]
如果系统的输入是有限的 N N N,并且系统响应也有有限的为 L L L,那么系统的输出长度为 N + L − 1 N+L-1 N+L1

2)圆周卷积

圆周卷积是针对于 DFT 计算中出现的一种特殊卷积,它的本质是在有限长度的序列上执行周期性卷积,而不像普通的线性卷积那样在无限长度序列上进行计算。

对于周期序列,当一个信号滑动超过长度 N N N 时,它会绕回到起点,并与最开始的部分重新进行卷积计算。即系统的输入长度为 N N N,那么系统的输出长度也是 N N N,此时用圆周卷积表示
y [ n ] = ∑ m = 0 N − 1 x [ m ] h ( ( n − m ) m o d    N ) y[n]=\sum_{m=0}^{N-1}x[m]h\big((n-m) \mod N\big) y[n]=m=0N1x[m]h((nm)modN)
其中 ( n − m ) m o d    N (n-m) \mod N (nm)modN让索引 n − m n-m nm始终保持在 [ 0 , N − 1 ] [0,N-1] [0,N1]之内,而不会越过序列长度。

三、频率采样和插值恢复

上文中分析了DTFT与DFT,DFS与DFT的关系。我们知道对于DFT可以看作对于DTFT进行频率采样,又可以看作是DFS的一个周期的分析。接下来我们进一步了解如何进行频率采样,并且如何将采样恢复到DTFT。

1.频率采样的影响

对于序列 x [ n ] x[n] x[n],如果它是周期为 N N N的,那么 X ( e j ω ) = X ~ [ k ] X(e^{j\omega})=\tilde{X}[k] X(e)=X~[k],但如果 x [ n ] x[n] x[n]是非周期, X ( e j ω ) X(e^{j\omega}) X(e)会包含所有的频率分量,而对其进行采样,可能会丢失掉一部分频率分量,如同下图:
在这里插入图片描述

但是可以从上图看出,如果采样越密,那么得到的DFS就越平滑,而对于DFT也就越接近原始序列的DTFT。

2.频率采样和时域序列的关系

1)从频率采样看时域的关系

我们知道DTFT的频域范围是在 [ − π , π ] [-\pi,\pi] [π,π]或者说是在 [ 0 , 2 π ] [0,2\pi] [0,2π]之间的。在上文中对于DTFT进行采样,采样点数为 N N N
X ( e j ω ) ∣ ω = 2 π k N = ∑ n = − ∞ ∞ x [ n ] e − j 2 π k n N X(e^{j\omega})|_{\omega=\frac{2\pi k}{N}}=\sum_{n=-\infty}^{\infty}x[n]e^{-j\frac{2\pi kn}{N}} X(e)ω=N2πk=n=x[n]ejN2πkn
那么实际上是将 2 π 2\pi 2π分为了 N N N个等份, k ∈ [ 0 , N − 1 ] k \in [0,N-1] k[0,N1],此时认为该序列是一个周期序列,与此对应的时域上序列的周期应该是N,对应的输入序列 x [ n ] x[n] x[n]的长度应该看作是周期信号。

2)从时域截取看频域的关系

如果对于非周期无限长序列 x a [ n ] x_a[n] xa[n]进行截取 L L L(有限长且认为是频域带限),并以 L L L为周期进行延拓,那么得到一个周期序列 x [ n ] x[n] x[n],那么此时通过DTFT得到的是一个在 [ 0 , 2 π ] [0,2\pi] [0,2π]之间连续的频域,而DFS是一个无限长离散的离散频域,对于DFT则是有限长且离散的频域,如下图:
在这里插入图片描述

3)序列长度L与周期N

从上文可知,此时非周期序列截断后成为长度为 L L L的序列 x [ n ] x[n] x[n],可以表示为:
x [ n ] = x ~ [ n ] R N [ n ] ; R N [ n ] = { 1 , 0 ≤ n ≤ L − 1 0 , n > L − 1 ∣ ∣ n < 0 x[n]=\tilde{x}[n]R_N[n];\quad R_N[n]=\begin{cases}1,\quad 0 \leq n \leq L-1 \\ 0, \quad n > L-1||n<0\end{cases}\\ x[n]=x~[n]RN[n];RN[n]={1,0nL10,n>L1∣∣n<0
那么再进行周期延拓可以表示为:
x ~ [ n ] = x [ ( ( n ) ) N ] \tilde{x}[n]=x[\big((n)\big)_N] x~[n]=x[((n))N]
其中 N N N是序列周期, x [ ( ( n ) ) N ] x[\big((n)\big)_N] x[((n))N]表示 n n n对于 N N N进行取模运算。

如果此时对于周期 N N N和序列长度 L L L不一致会发生什么呢?

  • N ≥ L N \geq L NL时:假设频率采样 N = 10 N=10 N=10,而时域截取为 L = 5 L=5 L=5,那么系统输出不会有叠加
    在这里插入图片描述

  • N < L N < L N<L时:假设频率采样 N = 10 N=10 N=10,而时域截取为 L = 11 L=11 L=11,那么系统输出会有叠加
    在这里插入图片描述

也就是说,当 N ≥ L N \geq L NL时,频域采样不会造成时域混叠。

3.插值恢复

从上文可知,当 N ≥ L N \geq L NL时,从DTFT采样到DFT,频域采样不会造成时域混叠。那么此时就可以利用DFT通过插值恢复为DTFT。所以之前为什么可以利用计算机显示DTFT,实际上就是用DFT计算再进行恢复。下面就是通过 X [ k ] X[k] X[k]通过插值核 sin ⁡ ( N ω − 2 π k 2 ) sin ⁡ ( N ω − 2 π k 2 N ) \frac{\sin\Big(\frac{N\omega - 2\pi k}{2}\Big)}{\sin\Big(\frac{N\omega - 2\pi k}{2N}\Big)} sin(2NNω2πk)sin(2Nω2πk)进行插值,最后再进行相位调整对齐 e − j ( ω − 2 π k N ) N − 1 2 e^{-j\Big(\omega-\frac{2\pi k}{N}\Big)\frac{N-1}{2}} ej(ωN2πk)2N1的推导:

我们知道DTFT和DFT为:
X ( e j ω ) = ∑ n = − ∞ ∞ x [ n ] e − j ω n x [ n ] = 1 N ∑ k = 0 N − 1 e j ( 2 π k n N ) X [ k ] X(e^{j\omega})=\sum_{n=-\infty}^{\infty}x[n]e^{-j\omega n}\\ x[n]=\frac{1}{N}\sum_{k=0}^{N-1}e^{j(\frac{2\pi kn}{N})}X[k] X(e)=n=x[n]ejωnx[n]=N1k=0N1ej(N2πkn)X[k]
那么当序列周期周期为 N N N,也就是时域截断为 N N N时,对于DTFT:
X ( e j ω ) = ∑ n = − ∞ ∞ x [ n ] e − j ω n = ∑ n = − 0 N − 1 x [ n ] e − j ω n X(e^{j\omega })=\sum_{n=-\infty}^{\infty}x[n]e^{-j\omega n}=\sum_{n=-0}^{N-1}x[n]e^{-j\omega n} X(e)=n=x[n]ejωn=n=0N1x[n]ejωn
将DFT时域表示代入
X ( e j ω ) = ∑ n = − 0 N − 1 ( 1 N ∑ k = 0 N − 1 e j ( 2 π k n N ) X [ k ] ) e − j ω n = 1 N ∑ n = − 0 N − 1 ∑ k = 0 N − 1 X [ k ] e j ( 2 π k n N ) e − j ω n = 1 N ∑ k = 0 N − 1 X [ k ] ∑ n = − 0 N − 1 ( e j ( 2 π k n N ) e − j ω n ) = 1 N ∑ k = 0 N − 1 X [ k ] ∑ n = − 0 N − 1 e − j ( ω − 2 π k N ) n X(e^{j\omega})=\sum_{n=-0}^{N-1}\bigg(\frac{1}{N}\sum_{k=0}^{N-1}e^{j(\frac{2\pi kn}{N})}X[k]\bigg)e^{-j\omega n}\\=\frac{1}{N}\sum_{n=-0}^{N-1}\sum_{k=0}^{N-1}X[k]e^{j(\frac{2\pi kn}{N})}e^{-j\omega n}\\ =\frac{1}{N}\sum_{k=0}^{N-1}X[k]\sum_{n=-0}^{N-1}\bigg(e^{j(\frac{2\pi kn}{N})}e^{-j\omega n}\bigg)\\ =\frac{1}{N}\sum_{k=0}^{N-1}X[k]\sum_{n=-0}^{N-1}e^{-j(\omega-\frac{2\pi k}{N})n} X(e)=n=0N1(N1k=0N1ej(N2πkn)X[k])ejωn=N1n=0N1k=0N1X[k]ej(N2πkn)ejωn=N1k=0N1X[k]n=0N1(ej(N2πkn)ejωn)=N1k=0N1X[k]n=0N1ej(ωN2πk)n
此时对于 ∑ n = − 0 N − 1 e − j ( ω − 2 π k N ) n \sum_{n=-0}^{N-1}e^{-j(\omega-\frac{2\pi k}{N})n} n=0N1ej(ωN2πk)n是一个等比数列,那么此时:
1 N ∑ k = 0 N − 1 X [ k ] ∑ n = − 0 N − 1 e − j ( ω − 2 π k N ) n = 1 N ∑ k = 0 N − 1 X [ k ] 1 − e − j N ( ω − 2 π k N ) 1 − e − j ( ω − 2 π k N ) \frac{1}{N}\sum_{k=0}^{N-1}X[k]\sum_{n=-0}^{N-1}e^{-j(\omega-\frac{2\pi k}{N})n}=\frac{1}{N}\sum_{k=0}^{N-1}X[k]\frac{1-e^{-jN\Big(\omega-\frac{2\pi k}{N}\Big)}}{1-e^{-j\Big(\omega-\frac{2\pi k}{N}\Big)}} N1k=0N1X[k]n=0N1ej(ωN2πk)n=N1k=0N1X[k]1ej(ωN2πk)1ejN(ωN2πk)
将该式分解替换分子分母的1:
1 N ∑ k = 0 N − 1 X [ k ] 1 − e − j N ( ω − 2 π k N ) 1 − e − j ( ω − 2 π k N ) = 1 N ∑ k = 0 N − 1 X [ k ] ( e j N ( ω − 2 π k N ) 2 − e − j N ( ω − 2 π k N ) 2 ) e − j N ( ω − 2 π k N ) 2 e j ( ω − 2 π k N ) 2 − e − j ( ω − 2 π k N ) 2 2 e − j ( ω − 2 π k N ) 2 \frac{1}{N}\sum_{k=0}^{N-1}X[k]\frac{1-e^{-jN\Big(\omega-\frac{2\pi k}{N}\Big)}}{1-e^{-j\Big(\omega-\frac{2\pi k}{N}\Big)}}=\frac{1}{N}\sum_{k=0}^{N-1}X[k]\frac{\Bigg(e^{j\frac{N\Big(\omega-\frac{2\pi k}{N}\Big)}{2}}-e^{-j\frac{N\Big(\omega-\frac{2\pi k}{N}\Big)}{2}}\Bigg)e^{-j\frac{N\Big(\omega-\frac{2\pi k}{N}\Big)}{2}}} {\frac{e^{j\frac{\Big(\omega-\frac{2\pi k}{N}\Big)}{2}}-e^{-j\frac{\Big(\omega-\frac{2\pi k}{N}\Big)}{2}}}{2}e^{-j\frac{\Big(\omega-\frac{2\pi k}{N}\Big)}{2}}} N1k=0N1X[k]1ej(ωN2πk)1ejN(ωN2πk)=N1k=0N1X[k]2ej2(ωN2πk)ej2(ωN2πk)ej2(ωN2πk)(ej2N(ωN2πk)ej2N(ωN2πk))ej2N(ωN2πk)
根据上述公式通过欧拉公式解可得:
X ( e j ω ) = 1 N ∑ k = 0 N − 1 X [ k ] sin ⁡ ( N ω − 2 π k 2 ) sin ⁡ ( N ω − 2 π k 2 N ) e − j ( ω − 2 π k N ) N − 1 2 X(e^{j\omega)}=\frac{1}{N}\sum_{k=0}^{N-1}X[k]\frac{\sin\Big(\frac{N\omega - 2\pi k}{2}\Big)}{\sin\Big(\frac{N\omega - 2\pi k}{2N}\Big)}e^{-j\Big(\omega-\frac{2\pi k}{N}\Big)\frac{N-1}{2}} X(e)=N1k=0N1X[k]sin(2NNω2πk)sin(2Nω2πk)ej(ωN2πk)2N1

四、DFT的性质和定理

结合上文,我们知道对于DFT和DFS有一样的性质和定理,和DTFT有相似的性质,区别是DFT的卷积是一种圆周卷积,这里不做证明只进行列举了。建议是结合对于DTFT、DFS的性质对照理解:音频进阶学习十——DTFT的条件、性质与举例,音频进阶学习十一——离散傅里叶级数DFS。

性质时域 ( x[n] )频域 ( X[k] )
线性性质 a x 1 [ n ] + b x 2 [ n ] a x_1[n] + b x_2[n] ax1[n]+bx2[n] a X 1 [ k ] + b X 2 [ k ] a X_1[k] + b X_2[k] aX1[k]+bX2[k]
时域循环移位 x [ ( n − m ) m o d    N ] x[(n - m) \mod N] x[(nm)modN] e − j 2 π N m k X [ k ] e^{-j \frac{2\pi}{N} m k} X[k] ejN2πmkX[k]
频域循环移位 e j 2 π N m n x [ n ] e^{j \frac{2\pi}{N} m n} x[n] ejN2πmnx[n] X [ ( k − m ) m o d    N ] X[(k - m) \mod N] X[(km)modN]
时间倒置 x [ − n m o d    N ] x[-n \mod N] x[nmodN] X [ − k m o d    N ] X[-k \mod N] X[kmodN]
实信号的对称性 x [ n ] x[n] x[n]为实数 X [ k ] X[k] X[k]满足共轭对称 X [ N − k ] = X ∗ [ k ] X[N-k] = X^*[k] X[Nk]=X[k]
时域循环卷积 ( x 1 ⊛ x 2 ) [ n ] = ∑ m = 0 N − 1 x 1 [ m ] x 2 [ ( n − m ) m o d    N ] (x_1 \circledast x_2)[n] = \sum_{m=0}^{N-1} x_1[m] x_2[(n - m) \mod N] (x1x2)[n]=m=0N1x1[m]x2[(nm)modN] X 1 [ k ] X 2 [ k ] X_1[k] X_2[k] X1[k]X2[k]
频域循环卷积 x [ n ] X [ k ] x[n] X[k] x[n]X[k]时域的循环卷积
Parseval 定理$\sum_{n=0}^{N-1}x[n]
Plancherel 定理 ∑ n = 0 N − 1 x 1 [ n ] x 2 ∗ [ n ] = 1 N ∑ k = 0 N − 1 X 1 [ k ] X 2 ∗ [ k ] \sum_{n=0}^{N-1} x_1[n] x_2^*[n] = \frac{1}{N} \sum_{k=0}^{N-1} X_1[k] X_2^*[k] n=0N1x1[n]x2[n]=N1k=0N1X1[k]X2[k]

其中:

  • ⊛ \circledast 代表 时域的循环卷积 ( x 1 ⊛ x 2 ) [ n ] = ∑ m = 0 N − 1 x 1 [ m ] x 2 [ ( n − m ) m o d    N ] (x_1 \circledast x_2)[n] = \sum_{m=0}^{N-1} x_1[m] x_2[(n - m) \mod N] (x1x2)[n]=m=0N1x1[m]x2[(nm)modN]
  • Parseval 定理 说明了 时域和频域的能量守恒关系
  • Plancherel 定理 是 Parseval 定理的更一般形式,涉及 内积关系

总结

本篇文章中介绍了新的傅里叶变换——DFT,这是一种可以在计算机中实现的傅里叶变换。但是值得注意的是,这种变换的计算次数过多,于是会衍生出一种在计算机中快速进行计算的方法FFT——快速傅里叶变换。这也是在下一篇文章中将要学习的变换。

反正收藏也不会看,不如点个赞吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2319789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

centos 7 部署ftp 基于匿名用户

在 CentOS 7 上搭建基于匿名用户的 FTP 服务&#xff0c;可按以下步骤进行&#xff1a; 1. 安装 vsftpd 服务 vsftpd 是一款常用的 FTP 服务器软件&#xff0c;可使用以下命令进行安装&#xff1a; bash sudo yum install -y vsftpd2. 启动并设置开机自启 vsftpd 服务 bash …

Apache SeaTunnel脚本升级及参数调优实战

最近作者针对实时数仓的Apache SeaTunnel同步链路&#xff0c;完成了双引擎架构升级与全链路参数深度调优&#xff0c;希望本文能够给大家有所启发&#xff0c;欢迎批评指正&#xff01; Apache SeaTunnel 版本 &#xff1a;2.3.9 Doris版本&#xff1a;2.0.6 MySQL JDBC Conne…

学习记录-cssjs-综合复习案例(二)

目录 商城复合案例功能实现&#xff08;二&#xff09;商城首页实现步骤1.准备工作2. 搭建html框架3. 编写js代码 完整实例代码完整项目心得 商城复合案例功能实现&#xff08;二&#xff09; 使用html&#xff0c;css&#xff0c;基于bootstrap框架以及媒体查询搭建响应式布局…

图解AUTOSAR_CP_EEPROM_Abstraction

AUTOSAR EEPROM抽象模块详细说明 基于AUTOSAR标准的EEPROM抽象层技术解析 目录 1. 概述 1.1 核心功能1.2 模块地位2. 架构概览 2.1 架构层次2.2 模块交互3. 配置结构 3.1 主要配置容器3.2 关键配置参数4. 状态管理 4.1 基本状态4.2 状态转换5. 接口设计 5.1 主要接口分类5.2 接…

汇川EASY系列之以太网通讯(MODBUS_TCP做从站)

汇川easy系列PLC做MODBUS_TCP从站,不需要任何操作,但是有一些需要知道的东西。具体如下: 1、汇川easy系列PLC做MODBUS_TCP从站,,ModbusTCP服务器默认开启,无需设置通信协议(即不需要配置),端口号为“502”。ModbusTCP从站最多支持31个ModbusTCP客户端(ModbusTCP主站…

QT 图表(拆线图,栏状图,饼状图 ,动态图表)

效果 折线图 // 创建折线数据系列// 创建折线系列QLineSeries *series new QLineSeries;// series->append(0, 6);// series->append(2, 4);// series->append(3, 8);// 创建图表并添加系列QChart *chart new QChart;chart->addSeries(series);chart->setTit…

基于vue框架的在线影院系统a079l(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,电影,电影类别,电影库 开题报告内容 基于Vue框架的在线影院系统开题报告 一、研究背景与意义 随着文化娱乐产业的蓬勃发展&#xff0c;电影院作为人们休闲消遣的重要场所&#xff0c;其管理效率和服务质量直接影响着顾客的观影体…

OpenCV图像拼接(1)概述

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 此图说明了在Stitcher类中实现的拼接模块流程。使用该类&#xff0c;可以配置/移除某些步骤&#xff0c;即根据特定需求调整拼接流程。流程中的所…

基于ssm学科竞赛小程序的设计及实现(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着信息时代的来临&#xff0c;过去的学科竞赛管理方式的缺点逐渐暴露&#xff0c;本次对过去的学科竞赛管理方式的缺点进行分析&#xff0c;采取计算机方式构建学科竞赛小程序。本文通过阅读相关文献&#xff0c;研究国内外相关技术&#xff0c;提出了一种关于竞赛信息…

[特殊字符][特殊字符][特殊字符][特殊字符][特殊字符][特殊字符]壁紙 流光染墨,碎影入梦

#Cosplay #&#x1f9da;‍♀️Bangni邦尼&#x1f430;. #&#x1f4f7; 穹妹 Set.01 #后期圈小程序 琼枝低垂&#xff0c;霜花浸透夜色&#xff0c;风起时&#xff0c;微光轻拂檐角&#xff0c;洒落一地星辉。远山隐于烟岚&#xff0c;唯余一抹青黛&#xff0c;勾勒出天光水…

虚拟机的三种 Linux 网络配置原理图解读

前言 虚拟机的网络连接方式主要有 三种模式&#xff1a;桥接模式&#xff08;Bridged&#xff09;、NAT 模式&#xff08;Network Address Translation&#xff09;、仅主机模式&#xff08;Host-Only&#xff09;。每种模式都有不同的使用场景和网络适应性&#xff0c;具体解释…

AI Agent系列(七) -思维链(Chain of Thought,CoT)

AI Agent系列【七】 前言一、CoT技术详解1.1 CoT组成1.2 CoT的特点 二、CoT的作用三、CoT的好处四、CoT适用场景五、CoT的推理结构 前言 思维链(Chain of Thought,CoT)&#xff0c;思维链就是一系列中间的推理步骤(a series of intermediate reasoning steps)&#xff0c;通过…

SpringBoot实现异步调用的方法

在Java中使用Spring Boot实现异步请求和异步调用是一个常见的需求&#xff0c;可以提高应用程序的性能和响应能力。以下是实现这两种异步操作的基本方法&#xff1a; 一、异步请求&#xff08;Asynchronous Request&#xff09; 异步请求允许客户端发送请求后立即返回&#x…

PurpleLlama大模型安全全套检测方案

1. 引入 PurpleLlama是Meta的大模型安全整体解决方案&#xff08;参考1&#xff09;&#xff0c;它包括了 &#xff08;1&#xff09;安全评估 CyberSecEval是一个用于评估大型语言模型&#xff08;LLMs&#xff09;安全风险的基准套件&#xff0c;其目标是解决随着 LLMs 的广…

vue el-table 设置selection选中状态

toggleRowSelection 方法 vue el-table 设置selection选中状态 关键代码 multipleTableRef.value!.toggleRowSelection(item, true);<el-table:data"data":border"setBorder"v-bind"$attrs"row-key"id"stripestyle"width: 1…

STM32学习笔记之常用总线(原理篇)

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

【数据结构】栈(Stack)、队列(Queue)、双端队列(Deque) —— 有码有图有真相

目录 栈和队列 1. 栈&#xff08;Stack&#xff09; 1.1 概念 1.2 栈的使用&#xff08;原始方法&#xff09; 1.3 栈的模拟实现 【小结】 2. 栈的应用场景 1、改变元素的序列 2、将递归转化为循环 3、逆波兰表达式求值 4、括号匹配 5、出栈入栈次序匹配 6、最小栈…

OpenCV中的矩阵操作

OpenCV中的矩阵操作主要围绕Mat类展开&#xff0c;涵盖创建、访问、运算及变换等。 1. 创建矩阵 ‌零矩阵/单位矩阵‌&#xff1a; Mat zeros Mat::zeros(3, 3, CV_32F); // 3x3浮点零矩阵 Mat eye Mat::eye(3, 3, CV_32F); // 3x3单位矩阵 自定义初始化‌&#xff1a…

OAK相机入门(一):深度测距原理

文章目录 1. 测距参数介绍2. 测距原理3. 总结 官方文档 Configuring Stereo Depth 1. 测距参数介绍 理论范围&#xff1a;0.2-35m 推荐范文&#xff1a;不低于0.5m 存储类型&#xff1a;uint16&#xff0c;0代表没有数据&#xff0c;或者测不到 2. 测距原理 通过视差进行测距…

Powershell WSL .wslconfig 实现与宿主机的网络互通

前言.wslconfig .wslconfig 用于在 WSL 2 上运行的所有已安装发行版中配置全局设置 wsl 2 网络模式介绍 Bridged (外部): 桥接模式将虚拟机的网络连接直接桥接到物理网络适配器上Mirrored (镜像): 镜像模式并不是一个标准的 Hyper-V 网络类型,但它通常指的是在网络适配器级…