搜索
您的当前位置:首页正文

MATLAB的离散非周期信号频域分析报告

来源:易榕旅网


基于MATLAB的离散信号频域分析、快速傅里叶变换与采样定理

一、 离散信号频域分析

(一) 周期离散方波信号频域分析

与周期模拟信号一样,周期离散信号同样可以展开成傅里叶级数形式,并得到离散傅里叶级数(DFS)

上式可以看成周期离散信号x(n)的离散傅里叶级数展开。

上式是DFS的反变换,记作IDFS并且称换对。(以上两式中

构成一对离散傅里叶级数变

在MTALAB中,DFS通过建立周期延拓函数语句实现:

function Xk=DFS(n,x,N) if N>length(x) n=0:N-1。

x=[x zeros(1,N-length(x))]。 end

k=0:N-1。

1 / 1

WN=exp(-j*2*pi/N)。 nk=n'*k。

WNnk=WN.^nk。 Xk=x*WNnk。 end

建立一个离散非周期方波信号

通过周期延拓后所得的周期序列利用DFS计算实现代码如下:

clear all。close all。clc。 n=0:3。

x=ones(1,4)。 X=fft(x,1024)。 Xk1=DFS(n,x,4)。 Xk2=DFS(n,x,8)。 figure(1)。

plot((-1023:2048)/2048*8,[abs(X) abs(X) abs(X)],'--')。hold on。 stem(-4:7,[abs(Xk1) abs(Xk1) abs(Xk1)],'LineWidth',2)。grid。 figure(2)。

plot((-1023:2048)/2048*16,[abs(X) abs(X) abs(X)],'--')。hold on。 stem(-8:15,[abs(Xk2) abs(Xk2) abs(Xk2)],'LineWidth',2)。grid。 set(gcf,'color','w')。

运行后得到的是分别以4和8为周期延拓后的即第一幅图表示的是周期序列第二幅图表示的是周期序列

频谱:

的频谱, 的频谱。

1 / 1

两图中的包络线表示的是通过快速傅里叶变换(FFT)所得到的频谱线。

(二)非周期离散方波信号频域分析

对于非周期离散方波信号,可采用离散时间傅里叶变换DTFT进行分析。

上式为离散时间信号x(n)的离散时间傅里叶变换(DTFT)。

1 / 1

上式为由于:

的离散时间傅里叶反变换(IDTFT)。

所以序列x(n)绝对可和,意味着DTFT存在,而非稳定序列(比如周期序列)

不满足绝对可和条件,所以其DTFT不存在。 在MTALAB中,DTFT可以用以下语句实现:

w=-3*pi:0.01:3*pi。 K=length(w)。

X=x*exp(-j*n'*w*K)。

建立一个离散非周期方波信号

的离散傅里叶变换

利用DTFT计算实现代码如下:

clear all。close all。clc。 n=0:7。

x=ones(1,8)。

w=-3*pi:0.01:3*pi。 X=x*exp(-j*n'*w)。 figure(1)。

plot(w/pi,abs(X))。grid。 figure(2)。

plot(w/pi,angle(X))。grid。 set(gcf,'color','w')。

运行后分别得到该离散非周期方波信号的幅频特性与相频特性:

1 / 1

幅频特性

相频特性

1 / 1

(三) 两种变换DFS的DTFT的性质

DFS主要具有如下性质: 1. 线性性质 2. 周期卷积性质 3. 复共轭

4. 帕斯瓦尔定理

DTFT同连续时间信号傅里叶变换相似,具有如下性质: 1. 线性性质

2. 时域频域平移性质 3. 时间翻转性质 4. 共轭对称性质

5. 时域频域卷积性质 6. 调制性质 7. 频域微分性质 8. 帕斯瓦尔定理

从DTFT的推导过程,说明DTFT是DFS当共同点:在时域都是离散的,在频域都是以

的极限情况。 为周期,周而复始。

是谐波复振幅,

不同点:离散时间周期信号频谱是离散的,具有谐波性,

适用于计算机计算。而离散时间非周期信号的频谱则是连续的,不具有谐波性,

表示的是谐波密度,是连续变量Ω的函数,所以不便于计算机进行分析计算。

(四) 离散傅里叶变换(DFT)

由于DTFT不便于计算机进行计算,所以需要建立一种时域和频域都是离散的傅里叶变换对,这就是离散傅里叶变换(DFT)

上式为离散时间非周期信号的离散傅里叶变换(DFT)

上式为DFT的反变换,记作IDFT。

称为离散傅里叶变换(DFT)对。

1 / 1

在MTALAB中,DFT通过建立函数实现:

function Xk=DFT(n,x,N) if N>length(x) n=0:N-1。

x=[x zeros(1,N-length(x))]。 end

k=0:N-1。

WN=exp(-j*2*pi/N)。 nk=n'*k。

WNnk=WN.^nk。 Xk=x*WNnk。 End

建立一个离散非周期方波信号

的离散傅里叶变换

利用DFT计算实现代码如下:

clear all。close all。clc。 n=0:7。

x=ones(1,8)。 X=fft(x,1024)。 Xk2=DFT(n,x,16)。 figure(1)。

plot((-1023:2048)/2048*32,[abs(X) abs(X) abs(X)],'--')。hold on。 stem(-16:31,[abs(Xk2) abs(Xk2) abs(Xk2)],'LineWidth',2)。grid。 figure(2)。

plot((-1023:2048)/2048*32,[angle(X) angle(X) angle(X)],'--')。hold on。 stem(-16:31,[angle(Xk2) angle(Xk2) angle(Xk2)],'LineWidth',2)。grid。 set(gcf,'color','w')。

运行后分别得到该离散非周期方波信号的幅频特性与相频特性:

1 / 1

幅频特性

相频特性

两图中的包络线表示的是通过快速傅里叶变换(FFT)所得到的频谱线。

离散傅里叶变换是傅里叶变换在时域、频域均离散化的形式,因而与其他傅里叶变换有着相似的性质。但是它又是从傅里叶级数派生而来的,所以又具有一些与其他傅里叶变换不同的特性,最主要的是圆周位移性质和圆周卷积性质。

二、 快速傅里叶变换(FFT)

快速傅里叶变换,简称FFT,是计算DFT的快速算法,习惯上是指以库利和图基算法为基础的一类高效算法。

1 / 1

根据快速傅里叶变换基本思路以及基2FFT算法,在MTALAB中,FFT通过建立函数实现:

function y=fft(x) m=nextpow2(x)。 N=2^m。 if length(x)x=[x,zeros(1,N-length(x))]。 end

nxd=bin2dec(fliplr(dec2bin([1:N]-1,m)))+1。 y=x(nxd)。 for mm=1:m

Nmr=2^mm。 u=1。

WN=exp(-i*2*pi/Nmr)。 for j=1:Nmr/2

for k=j:Nmr:N kp=k+Nmr/2。 t=y(kp)*u。

y(kp)=y(k)-t。 y(k)=y(k)+t。 end

u=u*WN。 end end

建立一个离散非周期方波信号

的快速傅里叶变换利用FFT计算实现代码如下:

clear all。close all。clc。 x=ones(1,8)。 fx=fft(x,512)。 z=abs(fx)。

k=0:length(z)-1。 plot(k,z)。

运行后得到该离散非周期方波信号的幅频特性:

1 / 1

分别利用FFT和DFT进行相同运算:

clear all。close all。clc。 K=input('K=')。 N=2^K。

n=0:N-1。x=randn(1,2^K)。 tic,X=fft(x,N),toc tic,X=DFT(n,x,N),toc

运行结果如下:

Columns 1 through 4069

Elapsed time is 0.218536 seconds. Columns 1 through 4069

Elapsed time is 16.726921 seconds.

由此可见,采用DFT计算时间为16.726921秒,而采用FFT计算只需要0.218536秒;说明,FFT在计算速度上,明显优于其他算法。

三、采样定理

(一)时域采样定理

1 / 1

为了验证时域采样定理,可以把原始采样序列每隔D-1点取一个值,形成一个新的序列。在MATLAB中,通过以下程序实现:

clear all。close all。clc。 x=ones(1,8)。 D=2。

xd=x(1:D:length(x))。 fx=fft(x,512)。 fxd=fft(xd,512)。 z=abs(fx)。 s=abs(fxd)。 k=0:length(z)-1。 plot(k,s,k,z)。

D=2时得到的原始序列与采样序列的幅频特性(蓝色为原始序列,绿色为采样序列)。

1 / 1

D=3时得到的原始序列与采样序列的幅频特性(蓝色为原始序列,绿色为采样序列)。

D=4时得到的原始序列与采样序列的幅频特性(蓝色为原始序列,绿色为采样序列)。

1 / 1

D=0.5时得到的原始序列与采样序列的幅频特性(蓝色为原始序列,绿色为采样序列)。

由此可见,采样周期在D大于2的范围内,出现明显的混叠现象,有失真产生,而在小于1的范围内,采样过于密集,增加运算系统负担。 因此,可验证时域采样定理。

(二)频域采样定理

为了验证频域采样定理,可以把原始采样序列每隔D-1点取一个值,形成一个新的序列。在MATLAB中,通过以下程序实现:

clear all。close all。clc。 x=-10:0.001:10。 y=(sin(x))/x。 X=fft(y,20)。 D=7。

Xd=X(1:D:length(X))。 fxd=ifft(Xd,20)。 s=fxd。

k=0:length(s)-1。 plot(k,s)

1 / 1

D=7时根据频域样本集合恢复的原信号

D=3时根据频域样本集合恢复的原信号

1 / 1

D=10时根据频域样本集合恢复的原信号

由此可见,采样周期在D小于7的范围内,根据频域样本恢复的原信号与实际原信号有很大差别。

因此,可验证频域采样定理。

1 / 1

因篇幅问题不能全部显示,请点此查看更多更全内容

Top