matlab z变换离散化_离散傅里叶变换笔记

matlab z变换离散化_离散傅里叶变换笔记_第1张图片

给定N个点的一维数组

的离散傅里叶变换对由下面两式给出:

离散傅里叶变换是将离散信号分解为多个离散三角函数,并能给出每个三角函数的幅值

、频率
、初相位
.即找一批函数形如:

来叠加出任意给定的离散信号.只要知道了

,这个三角函数就完全知道了.

下面用具体的程序说明这个两个公式的具体含义及用法,本文演示所用的编程语言为python3.首先导入一些必要的包,以及定义一个方波信号,并画出一段时间的图像:

import numpy as np
from numpy import sin,cos,pi
import matplotlib.pyplot as plt
def square(t):
    return np.piecewise(x=t,condlist=[t<-2,(t>=-2)&(t<=2),t>2],funclist=[0,1,0])
N=100
t=np.linspace(-5,5,N)
dt=t[1]-t[0]
s=square(t)

matlab z变换离散化_离散傅里叶变换笔记_第2张图片

然后,我们对得到的信号s进行离散傅里叶变换:

fft=np.fft.fft(s)
fftshift=np.fft.fftshift(fft)
mo=abs(fftshift)/N
phase=np.angle(fftshift)
fre=np.fft.fftshift(np.fft.fftfreq(d=dt,n=N))

这里对上面的程序的每一行做一些说明:

1.通过调用np.fft.fft函数,我们对

执行了离散傅里叶变换,也就是本文开头给出的公式中的正变换,并得到长度同样为N的一维复数数组.每个复数的模除以采样点数N代表该复数对应的三角函数的幅值
,复数的辐角代表对应的三角函数的初相位
,而对应的三角函数的频率
则由复数出现在数组中的位置给出,即:

如果N是偶数,则

如果N是奇数,则

其中

是数组s的采样时间间隔.如果
的单位是秒的话,
的单位就是
.可以看到复数数组中复数对应的频率
的出现顺序是0(直流分量),正频率,负频率.

2.由于变换完后的复数数组对应的频率在数组中的出现顺序是0(直流分量),正频率,负频率,所以很不对称,故利用函数np.fft.fftshift对得到的复数数组移位,使得数组中复数对应的频率是关于0对称的(即尽量让直流分量出现在数组的正中间,负频率出现在直流分量左边,正频率出现在直流分量右边,这么做的原因主要是为了画图好看).

3.取每个复数的模并除以采样点数N以便得到对应三角函数的幅值

.

4.取每个复数的辐角以便得到对应三角函数的初相位

,注意这里辐角的单位是弧度.

5.通过给定采样时间间隔

和总采样点数N,得到复数数组中每一个复数所对应的三角函数的频率
,当然这里同样为了频率关于0对称也做了移位操作.

幅值

做纵轴,频率
做横轴的图像叫幅度谱图;初相位
做纵轴,频率
做横轴的图像叫相位谱图.对于本例中的方波来说,其幅度谱图和相位谱图如下所示:

matlab z变换离散化_离散傅里叶变换笔记_第3张图片

一个信号被分解成很多三角函数的和后只要同时知道幅度谱和相位谱就能够还原回去.为了验证这些三角函数确实能够很好叠加出方波信号,根据幅度谱和相位谱,构造这些三角函数并画出每一个三角函数:

recover=np.zeros(N)
plt.figure(figsize=(8,6))
for a,p,f in zip(mo,phase,fre):
    singelCos=a*cos(2*pi*f*np.arange(N)*(dt)+p)#根据幅度,相位,频率构造三角函数
    recover+=singelCos#把这些三角函数都加起来
    plt.plot(t,singelCos,lw=2)
plt.xlabel('Time (s)',fontsize=15)
plt.ylabel('Amplitude',fontsize=15)
plt.tick_params(labelsize=15)
plt.title('All Components',fontsize=15)

所有的三角函数成分的图像如下(直流成分也可以看成三角函数的频率为0):

matlab z变换离散化_离散傅里叶变换笔记_第4张图片

程序中recover记录了这些三角函数的和,我们画出recover的图像,并与原始信号比较:

matlab z变换离散化_离散傅里叶变换笔记_第5张图片

可以发现几乎与原信号无二.其实,我们恢复原始信号的过程正是本文开头给出的离散傅里叶逆变换.

你可能感兴趣的:(matlab,z变换离散化,傅里叶变换尺度变换性质,狄立克雷函数傅立叶变换0点)