五邑大学
数字信号处理课程设计报告
题目:FFT和数字巴特沃斯滤波器的设计
院 系 专 业 姓名学号
指导教师
实验第3章 matlab实现FFT应用 一、实验目的
熟悉matlab在数字信号处理中的应用,并掌握基二FFT算法的实现。 二、实验原理 FFT快速算法,matlab fft(x,N)实现应用, 在MATLAB中,可以用函数X=fft(x,N)和x=ifft(X,N)计算N点序列的DFT正、反变换。 N点序列的DFT和IDFT变换定义式如下:
X(k)??x(n)Wn?0N?1knN,
1x(n)?N?knX(k)W?Nk?0N?1 利用旋转因
子
WnkN?e?j2?nkN具有周期性,可以得到快速算法(FFT)。
三、程序代码与实验波形 %计算N点的DFT
function [ Xk] = dft(xn,N) n=[0:1:N-1]; k=[0:1:N-1];
WN=exp(-j*2*pi/N); nk=n'*k;
WNnk=WN.^nk; Xk=xn*WNnk End
%计算N点的逆DFT
function [ xn] = idft(Xk,N) n=[0:1:N-1]; k=[0:1:N-1];
WN=exp(-j*2*pi/N); nk=n'*k;
WNnk=WN.^(-nk); xn=(Xk*WNnk)/N; end
%循环移位函数
function[y]=cirshift(x,m,N) if length(x)>N
error(' N必须大于等于x(n)的长度') end
x=[x zeros(1,N-length(x))]; n=0:N-1;
n=mod(n-m,N); y=x(n+1);
%计算序列x1(n) 和x2(n)之间的N点循环卷积函数 function[y]=circonvt(x1,x2,N) if length(x1)>N
error(' N必须大于等于x1的长度') end
if length(x2)>N
error(' N必须大于等于x2的长度') end
x1=[x1 zeros(1,N-length(x1))]; x2=[x2 zeros(1,N-length(x2))]; m=[0:1:N-1];
x2=x2(mod(-m,N)+1); H=zeros(N,N); for n=1:1:N
H(n,:)=cirshift(x2,n-1,N); end
y=x1*H';
例3.2(P139)
>> x=[1,1,1,1,1,1];n=0:5; >> k=-200:200;w=(pi/100)*k; >> X=x*(exp(-j*pi/100)).^(n'*k);
>> magX=abs(X);angX=angle(X)*180/pi; >> figure(1)
>> subplot(2,1,1);plot(w/pi,magX); >> axis([-1 1 0 6]);grid;
>> title('DTFT的幅度');xlabel('以\\pi为单位的频率');ylabel('幅度'); >> subplot(2,1,2);plot(w/pi,angX);grid;
>> axis([-1 1 -200 200]);title('DTFT的相位'); >> xlabel('以\\pi为单位的频率');ylabel('相位'); >> N=6;
>> X=dft(x,N);
>> magX=abs(X);phaX=angle(X)*180/pi; >> k=0:5; >> figure(2)
>> subplot(2,1,1);stem(k,magX); >> title('DFT的幅度');xlabel('k'); >> subplot(2,1,2);stem(k,phaX); >> title('DFT的相位');xlabel('k');
Xk =
Columns 1 through 5
6.0000 -0.0000 - 0.0000i -0.0000 - 0.0000i 0 - 0.0000i 0.0000 - 0.0000i
Column 6
0.0000 - 0.0000i
例3.3(P141)
>> n=0:9;x=0.8*cos(0.47*pi*n)+0.4*cos(0.53*pi*n); >> N=10;
>> X=dft(x,N);
>> magX=abs(X),angX=angle(X) >> k=0:9;
>> subplot(2,1,1);stem(k,magX);title('DFT的幅度'); >> xlabel('k');
>> subplot(2,1,2);stem(k,angX);title('DFT的相位'); >> xlabel('k');
Xk =
Columns 1 through 5
1.1611 1.2250 + 0.7289i 2.0522 + 3.5598i 0.9030 - 2.9037i 0.8213 - 0.6744i
Columns 6 through 10