一、实验目的 (1)加深对离散周期序列傅里叶级数(DFS)基本概念的理解。 (2)掌握用MATLAB语言求解周期序列傅里叶级数变换和逆变换的方法。 (3)观察离散周期序列的重复周期数对频谱特性的影响。 (4)了解离散序列的周期卷积及其与线性卷积的区别。 二、实验涉及的MATLAB子函数 1.mod 功能:模除求余。 调用格式: mod(x,m);x整除m取正余数。 2.floor 功能:向-∞舍入为整数。 调用格式: floor(x);将x向-∞舍入为整数。 三、实验原理 1.周期序列的离散傅里叶级数 离散时间序列x(n)满足x(n)=x(n+rN),称为离散周期序列,用 表示。其中,N为信号的周期,x(n)称为离散周期序列的主值。 周期序列可以用离散傅里叶级数(DFS)表示: 其中, 是周期序列离散傅里叶级数第k次谐波分量的系数,也称为周期序列的频谱,可表示为 由上面两式可以看出,它们也是周期序列的一对傅里叶级数变换对。 令,以上傅里叶级数变换对又可以写成: (11-1) (11-2) 与连续性周期信号的傅里叶级数相比较,周期序列离散傅里叶级数有着如下特点: (1)连续性周期信号的傅里叶级数对应的第k次谐波分量的系数为无穷多。而周期为N的周期序列,其离散傅里叶级数谐波分量的系数只有N个是独立的。 (2)周期序列的频谱 也是一个以N为周期的周期序列。 2.周期序列的傅里叶级数变换和逆变换 例11-1 已知一个周期性矩形序列的脉冲宽度占整个周期的1/4,一个周期的采样点数为16点,显示3个周期的信号序列波形。要求: (1)用傅里叶级数求信号的幅度频谱和相位频谱。 (2)求傅里叶级数逆变换的图形,与原信号图形进行比较。 解 MATLAB程序如下: N=16; xn=[ones(1,N/4),zeros(1,3*N/4)]; xn=[xn,xn,xn]; n=0:3*N-1; k=0:3*N-1; Xk=xn*exp(-j*2*pi/N).^(n¢*k); %离散傅里叶级数变换 x=(Xk*exp(j*2*pi/N).^(n¢*k))/N;%离散傅里叶级数逆变换 subplot(2,2,1),stem(n,xn); title(¢x(n)¢);axis([-1,3*N,1.1*min(xn),1.1*max(xn)]); subplot(2,2,2),stem(n,abs(x));%显示逆变换结果 title(¢IDFS|X(k)|¢); axis([-1,3*N,1.1*min(x),1.1*max(x)]); subplot(2,2,3),stem(k,abs(Xk));%显示序列的幅度谱 title(¢|X(k)|¢); axis([-1,3*N,1.1*min(abs(Xk)),1.1*max(abs(Xk))]); subplot(2,2,4),stem(k,angle(Xk));%显示序列的相位谱 title(¢arg|X(k)|¢); axis([-1,3*N,1.1*min(angle(Xk)),1.1*max(angle(Xk))]); 运行结果如图11-1所示。 图11-1 例11-1周期序列与傅里叶级数变换和逆变换结果 由离散傅里叶级数逆变换图形可见,与原信号相比,幅度扩大了32倍。这是因为周期序列为原主值序列周期的3倍,做逆变换时未做处理。可以将逆变换程序改为 x=Xk*exp(j*2*pi/N).^(n¢*k)/(3*3*N); 3.离散傅里叶级数变换和逆变换的通用子程序 由例11-1可见,周期序列进行傅里叶级数变换和逆变换,是依据变换公式进行程序编写的,无论信号序列如何变化,求解的公式总是一样的。因此,可以将其编写成通用子程序。 (1)离散傅里叶级数变换通用子程序dfs.m: function=dfs(xn,N) n=0:N-1; k=0:N-1; WN=exp(-j*2*pi/N); nk=n¢*k; Xk=xn*WN.^nk; (2)离散傅里叶级数逆变换通用子程序idfs.m: function=idfs(Xk,N) n=0:N-1; k=0:N-1; WN=exp(j*2*pi/N); nk=n¢*k; xn=(Xk*WN.^nk)/N; 例11-2 利用上述两个子程序,再做一遍例11-1。 解 由于需要调用子程序