例1:
采样定律,取100个点,信号频率是100HZ,采样频率是1000HZ,相当于采样十个周期,每个周期采样十个点。
cos(2πT)函数是以Ts=1/fs为时间间隔对样本进行采样,取N个采样样本做DFT,得到N个离散频率。即以fs为采样频率对信号取N个点。
每隔fx/fs采样一个点。
例如:第一个点是0,第二个点是fx/fs,第三个点是2fx/fs,第N个点是(N-1)fx/fs。
fft(x)是对采样后的信号做DFT,DFT后的结果是一个复数,有幅度有相位。这里只关心幅度,因此用abs函数取绝对值。画图图形。
图像有两条曲线,说明发生频谱混叠。时域相乘,对应频域的卷积,频谱搬移。在0HZ有信号的频率,在fs处也有信号的频率,这两种是重复的,在2fs处也有信号的频率。也就是说,以fs/2为轴的话,左右两边的频谱是对称的,因此一般只需要关心0-fs/2之间的频谱即可。
例2:
cos波的幅度为1,然后对cos波进行采样,对采样后的点取模值,取一半的频率进行观察,换算成20dB,再将横坐标的频率对fs进行归一化处理。例1中的横坐标是点数,例2中的横坐标是归一化后的频率
例3:将fx的频率由100变成101,输出不再是单频信号,说明发生频谱泄露。说明在做DFT的时候,给的输入信号必须是整数个周期。
频谱泄露:左图未发生频谱泄露,右图发生频谱泄露。DFT对信号进行周期性延拓的时候默认给定的信号是整数个周期,延拓时只是将信号完整的搬移。如果给定的信号不是整数个周期,那么就会发生右图所示的频谱泄露。比如可以给定周期是完整的1个周期或者两个周期,但不能是1.2个周期。
如何避免频谱泄露:
法1:保证给DFT的信号是整数个周期:M/N=fin/fs,fin=fs*M/N,N取2的N次方,M取小于N/2的奇数。(如果M取偶数,意味着第一个周期取的点数有可能和第二个周期取的点数完全重合,因此M要取奇数)
法2:给信号加窗(用一些函数让信号不平滑的地方变得平滑一点)
例4:在Cadence 中对信号做DFT,fin=1M,函数自动计算fs=N*fin/M
从1u截取到8u,取M=7,7个周期,取1024个点,再取dB20
例5:在matlab里面实现例4
s=s-maxz(s)是对s进行归一化处理。找到s里面的最大值,所有的值都减去最大值,得到比较清晰的
下图中上图横坐标为点数,下图横坐标为真是的频率
例6:
取M=7.2,查看频谱泄露的情况。
下图并不是整数个周期
可以看到发生频谱泄露