文章目录
一、DFT与DTFT的区别和联系
首先,DFT和DTFT到底有什么区别呢?—— 首先,虽然DTFT是针对离散时间非周期信号的,但是它的频谱依然是连续的,这仍然不利于计算机的计算。那么DFT的特点就是:时域信号是离散的;同时在频域上也是离散的。
而要想使得频域是离散的,也就是需要对DTFT所得的连续频域进行采样。而在信号与系统中我们已经建立了这样一个认识:时域离散,那么频域就会是周期的;如果频域是离散的,那么时域就是周期的。
那么由于刚刚我们说DFT需要对DTFT所得频谱进行采样,所以这将会导致在时域上原本的离散时间非周期信号做了周期延拓。不过没有关系,我们最后还是只取一个周期分析即可。
那么具体怎么采样?怎么延拓呢?对于一个N点DFT,因为DTFT的频谱是以 2 π 2π 2π为周期的,那么我们就以: ω = 2 π N k ω = \frac{2π}{N}k ω=N2πk对频谱进行采样。时域上, x [ n ] x[n] x[n] 就以N为周期做周期延拓。
下图就展示了DTFT和DFT的区别:
如果我们设DTFT的时频域信号分别表示为: x [ n ] , X ( e j ω ) x[n], X(e^{jω}) x[n],X(ejω),DFT的的时频域信号表示为: y [ n ] , Y [ k ] y[n], Y[k] y[n],Y[k],那么他们之间的相互联系如下图所示:
x [ n ] , y [ n ] x[n] , y[n] x[n],y[n]之间的相互转化已经比较清晰了,下面我们再看看 X ( e j ω ) , Y [ k ] X(e^{jω}), Y[k] X(ejω),Y[k]之间如何转换:
- 数值逼近法
因为我们知道 Y [ k ] Y[k] Y[k]仅仅是 X ( e j ω ) X(e^{jω}) X(ejω) 是一些频率样本,而 Y [ k ] Y[k] Y[k] 是 y [ n ] y[n] y[n] 的N点DFT,那么我们可以这么做——首先在 y [ n ] y[n] y[n] 序列后面补若干个0,使之成为一个长度为M的序列( M > > N M>>N M>>N),接下来,对这个更长的序列做 DFT,这样可以去逼近DTFT。
值得注意的是:N越大,频率分辨率越高,但是并不是N越大越好,对于原本具有周期性的信号,如果N不是周期的整数倍,就会出现频率模糊现象。
例如原本周期是64的信号,如果分别用N=128和N=129,那么经过周期延拓就会出现这种情况:
我们可以看到N=129时,出现了不连续点,这将会引入新的频率分量,因此他们两个分别做DFT的结果如下:
- 另外一种方法就是插值。如果在每一个采样点插一个sinc函数,就类似于信号与系统中采样值的恢复。
二、DFT的性质
【1】线性
【2】圆周时移:
x
[
<
n
−
n
0
>
N
]
D
F
T
↔
X
[
k
]
W
N
k
n
0
x[<n - n_0 >_N ] \space \underleftrightarrow{DFT} \space X[k]W_N^{kn_0}
x[<n−n0>N]
DFT X[k]WNkn0
【3】圆周频移:
x
[
n
]
W
N
−
k
0
n
F
↔
X
[
<
k
−
k
0
>
N
]
x[n]W_N^{-k_0n}\space \underleftrightarrow{\mathscr{F}} \space X[<k - k_0>_N]
x[n]WN−k0n
F X[<k−k0>N]
【4】对偶性:
X
[
n
]
F
↔
N
x
[
<
−
k
>
N
]
X[n] \space \underleftrightarrow{\mathscr{F}} \space Nx[<-k>_N]
X[n]
F Nx[<−k>N]
【5】圆周卷积定理:
x
[
n
]
⨂
h
[
n
]
F
↔
X
[
k
]
H
[
k
]
x[n]⨂h[n] \space \underleftrightarrow{\mathscr{F}} \space X[k]H[k]
x[n]⨂h[n]
F X[k]H[k]
这里我们证明一下圆周卷积定理:我们设: x [ n ] ⨂ h [ n ] = y [ n ] x[n]⨂h[n]=y[n] x[n]⨂h[n]=y[n],下面有: Y [ k ] = ∑ n = 0 N − 1 y [ n ] W N k n = ∑ n = 0 N − 1 [ ∑ m = 0 N − 1 x [ m ] h [ < n − m > N ] ] W N k n = ∑ m = 0 N − 1 x [ m ] ∑ n = 0 N − 1 h [ < n − m > N ] W N k n \begin{aligned} Y[k] &= \sum_{n=0}^{N-1}y[n]W_N^{kn}\\ &=\sum_{n=0}^{N-1}[\sum_{m=0}^{N-1}x[m]h[<n-m>_N]]W_N^{kn}\\ &=\sum_{m=0}^{N-1}x[m]\sum_{n=0}^{N-1}h[<n-m>_N]W_N^{kn}\\ \end{aligned} Y[k]=n=0∑N−1y[n]WNkn=n=0∑N−1[m=0∑N−1x[m]h[<n−m>N]]WNkn=m=0∑N−1x[m]n=0∑N−1h[<n−m>N]WNkn
下面,我们令: n − m = l + r N n-m=l+rN n−m=l+rN,因为 m , n m, n m,n都是从0开始的,所以相当于 l , r l, r l,r 都是从0开始。 n = m + l + r N n=m+l+rN n=m+l+rN从0开始也就相当于 l l l 从0开始。而: < n − m > N = < l + r N > N = l <n-m>_N=<l+rN>_N=l <n−m>N=<l+rN>N=l。所以带入得: Y [ k ] = ∑ m = 0 N − 1 x [ m ] ∑ l = 0 N − 1 h [ l ] W N k ( m + l + r N ) = ∑ m = 0 N − 1 x [ m ] W N k m ∑ l = 0 N − 1 h [ l ] W N k l = X [ k ] H [ k ] \begin{aligned} Y[k]=\sum_{m=0}^{N-1}x[m]\sum_{l=0}^{N-1}h[l]W_N^{k(m+l+rN)}= \sum_{m=0}^{N-1}x[m]W_N^{km}\sum_{l=0}^{N-1}h[l]W_N^{kl}=X[k]H[k] \end{aligned} Y[k]=m=0∑N−1x[m]l=0∑N−1h[l]WNk(m+l+rN)=m=0∑N−1x[m]WNkml=0∑N−1h[l]WNkl=X[k]H[k]
特别值得注意的是复序列DFT里的对称性:
【1】
x
[
n
]
∗
D
F
T
↔
X
∗
[
<
−
k
>
N
]
x[n]^* \space \underleftrightarrow{DFT} \space X^*[<-k>_N]
x[n]∗
DFT X∗[<−k>N]
反过来也是类似的结论:【2】
x
∗
[
<
−
n
>
N
]
D
F
T
↔
X
∗
[
k
]
x^*[<-n>_N] \space \underleftrightarrow{DFT} \space X^*[k]
x∗[<−n>N]
DFT X∗[k]
由于我们知道在DTFT里面有频谱实部虚部和时域序列奇部偶部的关系,我们在DFT中引入共轭对称部分与共轭反对称部分:
2.1 复序列相关特性
对于一个N点的复序列,我们定义圆周共轭对称为:
x
[
n
]
=
x
∗
[
<
−
n
>
N
]
x[n] = x^*[<-n>_N]
x[n]=x∗[<−n>N]
定义圆周共轭反对称为:
x
[
n
]
=
−
x
∗
[
<
−
n
>
N
]
x[n] = -x^*[<-n>_N]
x[n]=−x∗[<−n>N]
而对于任意一个N点复序列,我们都可以拆分为圆周共轭对称和圆周共轭反对称部分(类似于实序列可以拆分为奇部和偶部一样)
x p c s = x [ n ] + x ∗ [ < − n > N ] 2 x p c a = x [ n ] − x ∗ [ < − n > N ] 2 \quad\\ x_{pcs} = \frac{x[n] +x^*[<-n>_N] }{2}\\ \quad \\ x_{pca} = \frac{x[n] -x^*[<-n>_N] }{2} xpcs=2x[n]+x∗[<−n>N]xpca=2x[n]−x∗[<−n>N]
那么,就类似于傅里叶变换里面偶部的CTFT是傅里叶变换的实部一样,我们也有: x p c s [ n ] F ↔ R e X [ k ] x p c a [ n ] F ↔ j I m X [ k ] x_{pcs}[n] \space \underleftrightarrow{\mathscr{F}} \space Re{X[k]}\\ \quad\\ x_{pca}[n] \space \underleftrightarrow{\mathscr{F}} \space jIm{X[k]} xpcs[n] F ReX[k]xpca[n] F jImX[k]
而有趣的是:反过来也是OK的:
R
e
{
x
[
n
]
}
F
↔
X
p
c
s
[
k
]
j
I
m
{
x
[
n
]
}
F
↔
X
p
c
a
[
k
]
Re\{x[n]\} \space \underleftrightarrow{\mathscr{F}} \space X_{pcs}[k]\\ \quad\\ jIm\{x[n]\} \space \underleftrightarrow{\mathscr{F}} \space X_{pca}[k]
Re{x[n]}
F Xpcs[k]jIm{x[n]}
F Xpca[k]
2.2 实序列相关特性
这个大家在信号与系统中都已经清楚了:实信号的偶部的DFT就是 X [ k ] X[k] X[k]的实部;实信号的奇部的DFT就是 X [ k ] X[k] X[k] 的虚部。
2.3. DFT与线性卷积
我们都知道:线性卷积是一件非常麻烦的事情;那么我们能都利用DFT去实现线性卷积呢?
总结一下:一个 M 长的序列和一个 N 长的序列的线性卷积,我们可以这样做:
- 将M长的序列尾部补0补长至:M + N -1。记为: h 1 ( n ) h_1(n) h1(n)
- 将 N 长的序列尾部补0补长至:M + N - 1。记为: h 2 ( n ) h_2(n) h2(n)
- 分别对 h 1 ( n ) h_1(n) h1(n) 和 h 2 ( n ) h_2(n) h2(n) 做DFT,得: H 1 [ k ] , H 2 [ k ] H_1[k], H_2[k] H1[k],H2[k]
- 两者相乘,得到: G [ k ] = H 1 [ k ] H 2 [ k ] G[k] = H_1[k]H_2[k] G[k]=H1[k]H2[k]
- 对 G [ k ] G[k] G[k] 做 IDFT ,得到原本序列得线性卷积结果。
2.4. 如何由一个N点DFT计算2个实序列的N点DFT?
【问题】:我们现在有两个 N 长的实序列 g [ n ] , h [ n ] g[n], h[n] g[n],h[n],如果只用一次 N 点 DFT 同时计算出它们两个的 N 点DFT呢?
—— 方法很简单,首先,我们将这两个序列构成一个复数序列,即: x [ n ] = g [ n ] + j h [ n ] x[n] = g[n] + jh[n] x[n]=g[n]+jh[n]
接下来,我们就只对这个 X [ n ] X[n] X[n] 做 N 点DFT ,然后我们根据下面的性质得到实部和虚部的 DFT: R e { x [ n ] } = g [ n ] D F T ↔ X [ k ] + X ∗ [ < − k > N ] 2 I m { x [ n ] } = h [ n ] D F T ↔ X [ k ] − X ∗ [ < − k > N ] 2 j \quad\\ Re\{x[n]\} = g[n] \space \underleftrightarrow{DFT} \space \frac{X[k] + X^*[<-k>_N]}{2}\\ \quad\\ Im\{x[n]\} = h[n] \space \underleftrightarrow{DFT} \space \frac{X[k] - X^*[<-k>_N]}{2j} Re{x[n]}=g[n] DFT 2X[k]+X∗[<−k>N]Im{x[n]}=h[n] DFT 2jX[k]−X∗[<−k>N]
2.5 对DTFT进行N点抽样
问题: x [ n ] x[n] x[n] 是一个长度为 M 的序列,对 x [ n ] x[n] x[n]的DTFT进行N点抽样,对这个频域抽样之后的信号做 IDTFT,还能不能恢复出原来的 x [ n ] x[n] x[n]?
—— 答案是:如果 N ≥ M N ≥M N≥M ,那么可以,否则不可以。我们想啊:对 DTFT结果做 N 点采样,也就是相当于在时域上把 x [ n ] x[n] x[n] 以 N 为周期做周期延拓,那么显然如果延拓的距离太窄,就会发生混叠而无法恢复原来的信号。
【补充】:关于对DTFT抽样,看似简单,但有时候考试的时候可能就硬是会没想起来相关的性质,所以这里博主补充一下:对一个序列 x [ n ] x[n] x[n] 的DTFT 进行 N 点的抽样,抽样的结果 Y [ k ] Y[k] Y[k] 就相当于对 x [ n ] x[n] x[n] 做 DFT 了。那么 Y [ k ] Y[k] Y[k] 的 IDFT 就可以通过下面的公式得到: y [ n ] = ∑ m = − ∞ + ∞ x [ n + m N ] 0 ≤ n ≤ N − 1 y[n] = \sum_{m=-∞}^{+∞}x[n+mN]\quad 0≤n≤N-1 y[n]=m=−∞∑+∞x[n+mN]0≤n≤N−1
比如下面这个例子:
显然,
x
[
n
]
x[n]
x[n] 的 4点DFT就是 Y[k] 了。那么套用上面的公式,应有:
y
[
n
]
=
x
[
n
+
4
]
+
x
[
n
]
+
x
[
n
−
4
]
0
≤
n
≤
3
y[n] = x[n+4]+x[n]+x[n-4]\quad 0≤n≤3
y[n]=x[n+4]+x[n]+x[n−4]0≤n≤3
那么我们看看各自平移的结果:
项 | 平移结果 |
---|---|
x [ n ] x[n] x[n] | 0,1,2,3,4,5 |
x [ n − 4 ] x[n-4] x[n−4] | 0,0,0,0,0,1 |
x [ n + 4 ] x[n+4] x[n+4] | 4,5,0,0,0,0 |
所以他们三者相加得到的序列是:
4
,
6
,
2
,
3
,
4
,
6...
4,6,2,3,4,6...
4,6,2,3,4,6...
那么在 n 取0-3时,就可以得到
y
[
n
]
=
{
4
,
6
,
2
,
3
}
y[n]=\{4,6,2,3\}
y[n]={4,6,2,3}