文章目录
DFT做什么?
- 给出每个分量的频率, 幅值和相位
- 信号可以看成由三角函数叠加而成, 而DFT就可以得到每个成分的幅值, 相位, 频率
DFT怎么做到这个的呢?
- 假设我对一个余弦信号在两个周期内采样了40次
假设是cos wt, 那么w=2Π/T, t对应的是第n个点的时间, 那么40个点对应2T, t=(n/40)*2T, 化简后就是下面的式子
但是我现在问计算机一个问题, 这个信号在40个点震动了几个周期它, 它必须通过代数求解
- 首先选择40个基信号, 40就是信号长度
比如下面的, 一开始是40个点0个周期, 第二个是1个周期, 然后一直到39个, 后面39和1重合不是说它们一样, 而是一个间隔就已经包含一个周期了, 信号采不到
- 然后我们就可以把原信号和上面的40个信号进行相关程度的比较, 使用相关函数, 越大相关程度越高如下图:
详细查看配对过程
第一个就是原信号, 第二个就是第8个信号, 下图有些错误, 因为0是第一个, 当然了这里第一个计算机是不知道函数的, 只是知道有这么多点, 然后就是计算相关性, 把逐次比较的结果记到X这个序列里面
通过我们逐个的计算得到和40s内振动两个周期及40s内振动38个周期的相关性最大, 其他的基信号比较结果是0
这个时候就可以把X数组画出来了
把得到X的公式明确一下
- 把40 换成N, 代表这个对比的采样信号可以不只是40个点, 把原来的函数写成x[n]
DFT的公式
欧拉公式展开后如图:
- 前一项是一样的, 后面的是什么呢?
是为了保留相位信息
- 假如现在原信号向左移, 如下:
- 然后再进行一次相关性计算的话会得到下面的值, 最近的地方不是20而是10了
- 这样其实会和原信号的一半混淆, 损失了相位
如何解决相位问题
- 和正弦基向量去比较
- 经过比较可以得到X[2]和X[38]的值应该是相反的, 下图不太对, X[38]是负的
- 这时候可以合并上之前的结果
现在看看这个复数代表啥了呢?
- 它的模代表的是20, 相位是 π / 3 \pi / 3 π/3 , 就可以重建出原信号了
具体重建过程
- 首先需要给定采样频率
举个例子, 假如说采样频率为100hz, 采样了40个点, 40个点中采样到的信号有两个周期, 那么被采样信号的频率就是5Hz。
具体来说, 40个点的持续时间是40*1/100 = 0.4s, 所以信号的每个周期就是0.2s, 1/0.2 = 5
再一般化一下, 我们知道X[k]记录的是信号和第K个基信号的相关程度,假如对应的k值比较高, 即包含的第k个频率的基信号要更多。那么 这第K个的频率应该怎么算呢? , 参见下图:
-
给定采样频率 f s f_s fs , N N N 个点的持续时间是 N ∗ 1 f s N*\frac{1}{f_s} N∗fs1 , 假如在这个时间内有k个周期, 那么每个周期的时间就是 N ∗ 1 f s ∗ k N*\frac{1}{f_s*k} N∗fs∗k1 , 倒数就是第k个基波信号的频率
-
此时对于X[K] 代表的频率也十分清楚了:
举前面的例子
例1
-
假设采样率是4k Hz, N是40, X[2]就代表 2*4K/40 = 200 Hz, 之前相关程度最大的是X[2] 和X[38], X[38]对应的是 38*100Hz, 当然后者根据采样定理是需要舍弃的, 因为采样定理规定, 只有采样频率大于等于原信号的一半频率时, 才能保证不发生频谱的混叠, 所以其实在查看X[k]时, 我们只需要关注它的一半就好了
-
采样频率是原信号的两倍也可以理解成对于原来信号的一个周期至少需要采样两次, 假如是40个点那么存在20个周期恰好满足一个周期采样两次, 再后面就不可以了
例2
- 现在的信号是多个信号聚再一块, 假如采样了100个点, 共1s, 也就是采样频率是100Hz, 可以把原来信号改写为离散的形式, t的地方就对应 n / 100 n/100 n/100 :
- 经过DFT后变为如下所示, 下面标错了, 应该是98, 96, 95:
可以得到模值和相位, 模除去 N / 2 N/2 N/2 就是幅值