当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 一、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——快速傅里叶变换。这也是在下一篇文章中将要学习的变换。

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

相关文章:

  • html相关常用语法
  • 【docker】--- 详解 WSL2 中的 Ubuntu 和 Docker Desktop 的区别和关系!
  • springboot Actuator 指标分析
  • 在 Kubernetes(k8s)部署过程中常见的问题
  • 数据结构:用C语言实现插入排序
  • WPF 中的 GridSplitter 详解
  • mysql 索引的使用
  • 【数据库备份】docker中数据库备份脚本——MySql备份脚本
  • 【工具分享】vscode+deepseek的接入与使用
  • Spring MVC响应数据
  • Redis Spring Cache
  • 一和零 (leetcode 474
  • wujie vite vue3
  • 尝试将相机采集图像流程封装成相机采图类
  • 数据可信安全流通实战,隐语开源社区Meetup武汉站开放报名
  • 如何制作一个手机用的电动3D扫描转盘
  • 未来办公与生活的新范式——智慧园区
  • 【K8S】ImagePullBackOff状态问题排查。
  • iwebsec-updatexml报错注入
  • Linux的I2C总线的原理和结构详解
  • 秦洪看盘|重估叙事主题卷土重来,给A股注入新活力
  • 美政府被曝下令加强对格陵兰岛间谍活动,丹麦将召见美代办
  • 加力、攻坚、借力、问效,上海为优化营商环境推出增量举措
  • 巴基斯坦:印度向巴3处地点发射导弹
  • 多省份晒出“五一”旅游“成绩单”:北京游客接待量、旅游消费创历史新高
  • 五一档7.47亿收官:《水饺皇后》领跑;男观众占比增多