实验二_用matlab实现傅立叶变换.doc
文本预览下载声明
实 验 报 告
2010年 4月 15日
实验二 用matlab实现傅立叶变换
实验目的: 1.掌握傅立叶数值实现方法(矩阵算法)
2.生成连续周期信号,掌握程序优化技巧
3.对于自定义函数参数有效性的检查
4.复习并巩固“信号与系统”相关知识内容,学习用matlab实现问题
实验环境:运行于Matlab7.6环境
实验内容: 本次实验参照《信号与系统》——“Matlab综合实验”55页课后练习
习题:
1. 如图4.4所示锯齿波信号,分别去一个周期的抽样数据X1(t),0=t=1和五个周期的数据X(t),0=t5,计算其傅立叶变换X1(w)和X(w),比较有和不同并解释原因。
图4.4 练习题2图
编程如下:
方法1:
%计算单位锯齿波和五个周期波形的傅立叶变换
%解法1:基本用循环实现数值的计算;对于5个周期锯齿波用内外循环来生成实现
T1=1; %一个周期锯齿波
N1=10000;
t1=linspace(0,T1-T1/N1,N1;
f1=0*t1;
f1=1-2*t1;
OMG=32*pi; %频率抽样区间
K1=100; %频率抽样点数
omg=linspace(-OMG/2,OMG/2-OMG/K1,K1;
X1=0*omg;
for k=1:K1 %求解五个周期函数的傅里叶变换系数
for n=1:N1
X1(k=X1(k+T1/N1*f1(n*exp(-j*omg(k*t1(n;
end
end
fs1=0*t1;
for n=1:N1 %通过傅里叶逆变换还原原函数
for k=1:K1
fs1(n=fs1(n+OMG/2/pi/K1*X1(k*exp(j*omg(k*t1(n;
end
end
T2=5; %五个周期锯齿波
N2=10000;
t2=linspace(0,T2-T2/N2,N2;
f2=0*t2;
t3=linspace(0,T2/5-T2/N2,N2/5; %先定义一个周期内的锯齿波变量抽样值
f3=0*t3; %初始化一个周期的函数抽样值
f3=1-2*t3; %表示出一个周期内函数抽样值
for s=0:4 %将一个周期锯齿波平移到五个周期,通过循环控制
for a=1:N2/5
f2(2000*s+a=f3(a;
end
end %将函数拓展表示为五个周期
X2=0*omg;
for k=1:K1 %求解五个周期函数的傅里叶变换系数
for n=1:N2
X2(k=X2(k+T2/N2*f2(n*exp(-j*omg(k*t2(n;
end
end
fs2=0*t2;
for n=1:N1 %通过傅里叶逆变换还原原函数
for k=1:K1
fs2(n=fs2(n+OMG/2/pi/K1*X2(k*exp(j*omg(k*t2(n;
end
end
figure;
subplot(2,2,1;
plot(omg,abs(X1,r; %以幅度频谱画图
xlabel(Frequency,ylabel(Amplitude;
title(单个锯齿波的幅频曲线;
subplot(2,2,2;
plot(t1,fs1,r;
xlabel(Second(s,ylabel(Amplitude;
title(由频域还原时域函数;
subplot(2,2,3;
plot(omg,abs(X2,r;
xlabel(Frequency,ylabel(Amplitude;
title(五个周期锯齿波的幅频曲线;
subplot(2,2,4;
plot(t2,fs2,r;
xlabel(Second(s,ylabel(Amplitude;
title(由频域还原时域函数;
相关曲线:
方法2:
%计算单位锯齿波和五个周期波形的傅立叶变换
%解法2:数值算法用矩阵实现,大大加快了运行速度;并且直接调用“sawtooth”生成5个周期的锯齿波
T1=1; %单个周期时域范围
N1=10000; %时域抽样点数
t1=linspace(0,T1-T1/N1,N1; %生成抽样时间点
f1=1-2*t1; %生成抽样函数值
OMG=32*pi; %频域范围
K1=100; %频域抽样点数
omg=linspace(-OMG/2,OMG/2-OMG/K1,K1; %生成抽样频率点
X1=T1/N1*exp(-j*kron(omg,t1.*f1; %傅里叶正变换求解傅里叶系数
fs1=OMG/2/pi/K1*exp(j*kron(t1,omg.*X1; %傅里叶逆变换还原时域函数
T2=5; %五个周期时域范围
N2=10000; %时域抽样点数
t2=linspace(0,T2-T2/N2,N2; %生成抽样时间点
fs2=0*t2;
f2=sawtooth(t2*2*pi,0; %生成五个周期的锯齿波
显示全部