一、实验目的
1、掌握傅立叶变换及其性质;
2、掌握连续时间信号傅立叶变换的数值计算方法; 3、掌握利用MATLAB实现信号的幅度调制的方法; 4、掌握利用MATLAB实现傅立叶变换的方法; 5、掌握利用MATLAB实现对周期信号的频谱分析。 二、实验内容
t) 、取样函数f(t)Sa(t)、门函数1、编程求解正弦函数f(t)sin(g2(t)u(t1)u(t1)、双边指数函数e2|t|信号的傅立叶变换式。
2、设f(t)Sa(t),已知信号f(t)的傅立叶变换为
F(j)g2()[u(1)u(1)],求f1(t)g2(t)的傅立叶变换F1(j),观察并验证傅立叶变换的对称性。
3、已知f(t)u(t1)u(t1),y(t)f(t)*f(t),试用MATLAB给出
f(t),y(t)的时域波形及它们的频谱F(j),Y(j)的图形,验证时域卷积定理。
4、绘制出下列信号及幅频图
(1)门函数脉冲序列 f1(t)u(t0.5)u(t0.5) (2)单边指数信号 f2(t)e2tu(t) (3)高斯信号 f3(t)et (4)三角脉冲信号 f4(t)21|t||t|1 |t|10(5)求F(j)2的傅立叶逆变换 21(6)设信号f(t)sin(100t),载波y(t)为频率400Hz的余弦信号。试用
1
MATLAB实现调幅信号y(t),并观察f(t)的频谱和y(t)的频谱在频域上的关系。
(7)设f(t)u(t2)u(t2),f1(t)f(t)cos(10t),试用MATLAB画出f(t),f1(t)的时域波形及其频谱,并观察傅立叶变换的频移特性。
(8)已知周期方波信号f(t)如下图3-1所示,求该信号的傅立叶级数,用MATLAB绘出其频谱图,并分析信号的频率特性。
图3-1 周期方波信号
(提示:bn0,an三、实验仪器及环境
2nsin,n2n1,3,5)
计算机1台,MATLAB7.0软件。 四、实验相关知识
1、信号f(t)傅立叶变换定义为 F(j)f(t)ejtdt,其存在的条件是f(t)满足|f(t)|dt
2、傅立叶逆变换定义为
1f(t)23、傅立叶变换的性质 (1)线性
F(j)ejtd
若F[fi(t)]Fi(j)(i1,2,,n),则
F[aifi(t)]aiFi(j)(i1,2,,n)
i1i1nn其中ai为常数。
2
(2)时移特性
若f(t)F(j),则
f(tt0)F(j)ejt
0(3)频移特性
若f(t)F(j),则
f(t)ejtF[j(0)]ejt
00(4)尺度变换
f(t)F(j),则
f(at)(5)对称性
f(t)F(j),则
1F(j) |a|aF(jt)2f()
(6)微分特性
若f(t)F(j),则
df(n)(t)(j)nF(j) ndt(7)积分特性
若f(t)F(j),则
(8)卷积定理
tF(j)f()dF(0)()
j 若f(t)F(j),则
f1(t)*f2(t)F1(j)F2(j) f1(t)f2(t)1F1(j)*F2(j) 23
五、实例
(一)利用MATLAB实现周期信号的分解与合成
1、求下图3-2所示周期矩形脉冲的傅立叶级数表达式,并用MATLAB求出由前N 次谐波合成的信号近似波形。
f(t) 1 -2 -1 -0.5 0 0.5 1 2 t
图3-2 周期矩形脉冲
解:取t0=-0.5,T0=2,则
1CnT0NT0/2T0/2f(t)ejn0t11jnt1ndtedtSa()
21220由前N 次谐波合成的信号近似波形为
N1njntfN(t)Sa()e0.5Sa(n/2)cos(nt)
2nN2n1程序如下: clear all;
t=-2:0.001:2; %信号的抽样点 N=input('N='); c0=0.5;
fN=c0*ones(1,length(t)); %计算抽样点上的直流分量 for n=1:2:N % 偶次谐波为零 fN= fN +cos(pi*n*t)*sinc(n*pi/2) ; end
plot(t, fN);grid;
title(['N=' num2str(N)]) % 数值型数据转换为字符型数据 axis([-2 2 -0.2 1.2]) 运行结果如图3-3。
4
N=3N=9110.80.80.60.60.40.40.20.200-0.2-2-1.5-1-0.500.511.52-0.2-2-1.5-1-0.500.511.52
N=20N=30110.80.80.60.60.40.40.20.200-0.2-2-1.5-1-0.500.511.52
-0.2-2-1.5-1-0.500.511.52
图3-3 所求前N项傅立叶系数合成的近似波形
3、周期方波信号如下图3-4所示,求出该信号三角函数形式的傅立叶级数,并用MATLAB编程实现其各次谐波叠加情况。
图3-4 周期方波信号
解:由图可知,该方波信号的周期为2,且为奇函数,故an0,所以
f(t)bnsin(nt)
n1计算得到
0bn4n
5
n2,4,6,n1,3,5,
该方波的信号的傅立叶级数为
f(t)11{sintsin(3t)sin[(2n1)t]}32n14n1,2,
因此,只要由bn计算出f(t)各次谐波的振幅,再根据各次谐波的频率,即可利用MATLAB绘出周期方波的各次谐波叠加后的波形。 程序如下:
% 观察周期方波信号的分解与合成 % m:傅里叶级数展开的项数
display('Please input the value of m (傅里叶级数展开的项数)'); % 在命令窗口显示提示信息
m = input('m = '); % 键盘输入傅里叶级数展开的项数
t = -2*pi:0.01:2*pi; % 时域波形的时间范围-2π~2π,采样间隔0.01 n = round(length(t)/4); %根据周期方波信号的周期,计算1/2周期的数据点数 f = [ones(n,1);-1*ones(n,1);ones(n,1);-1*ones(n+1,1)]; %构造周期方波信号 y = zeros(m+1,max(size(t))); y(m+1,:) = f'; figure(1);
plot(t/pi,y(m+1,:)); %绘制方波信号 grid; %在图形中加入栅格
axis([-2 2 -1.5 1.5]); %指定图形显示的横坐标范围和纵坐标范围 title('周期方波'); %给显示的图形加上标题 xlabel('单位pi','Fontsize', 8); %显示横坐标单位 x = zeros(size(t)); kk = '1';
for k=1:2:2*m-1 %循环显示谐波叠加图形 pause;
x = x+sin(k*t)/k;
y((k+1)/2,:) = 4/pi*x; %计算各次谐波叠加和 plot(t/pi,y(m+1,:));
6
hold on;
plot(t/pi,y((k+1)/2,:)); %绘制谐波叠加信号 hold off; grid;
axis([-2 2 -1.5 1.5]);
title(strcat('第',kk,'次谐波叠加')); xlabel('单位pi','Fontsize', 8); kk = strcat(kk,'、',num2str(k+2)); end pause;
plot(t/pi,y(1:m+1,:));grid; axis([-2 2 -1.5 1.5]); title('各次谐波叠加波形'); xlabel('单位pi','Fontsize', 8); % End
下图3-5是当m=4的程序运行结果。
周期方波1.51.5第1次谐波叠加110.50.500-0.5-0.5-1-1-1.5-2-1.5-1-0.50单位pi0.511.52-1.5-2-1.5-1-0.50单位pi0.511.52
第1、3次谐波叠加1.51.5第1、3、5次谐波叠加110.50.500-0.5-0.5-1-1-1.5-2-1.5-1-0.50单位pi0.511.52-1.5-2-1.5-1-0.50单位pi0.511.52
7
第1、3、5、7次谐波叠加1.51.5各次谐波叠加波形110.50.500-0.5-0.5-1-1-1.5-2-1.5-1-0.50单位pi0.511.52-1.5-2-1.5-1-0.50单位pi0.511.52
图3-5 周期方波信号的傅立叶级数分析
(二)利用MATLAB实现周期信号的频谱分析
4、利用MATLAB实现下图3-6所示的周期三角形信号的频谱图。
f(t) 1 -3 -2 -1 -1 0 1 2 3 t
图3-6 周期三角形信号
解:由图可知信号的周期为T0=2,所以0内的表达式为
2,f(t)在区间[-1/2,3/2]21|t|2t2 f(t)132(1t)t22由f(t)波形知 C00。取t01/2,则
1CnT0T0t0t0f(t)ejn0t11/2jnt13/2dt2tedt2(t1)ejntdt
21/221/2经过计算,该周期信号的傅立叶级数为
8
n4j22sin()n0Cnn 20n0程序如下: N=10; n1=-N:-1;
C1=-4*j*sin(n1*pi/2)/pi^2./n1.^2; C0=0;
n2=1:N;C2=-4*j*sin(n2*pi/2)/pi^2./n2.^2; Cn=[C1,C0,C2];n=-N:N;
subplot(2,1,1);stem(n,abs(Cn));ylabel('Cn的幅度谱') subplot(2,1,2);stem(n,angle(Cn));ylabel('Cn的相位谱') xlabel('\\omega/\\omega_0') 运行结果如图3-7所示。
0.50.4Cn的幅度谱0.30.20.10-102-8-6-4-20246810Cn的相位谱10-1-2-10-8-6-4-20/0246810
图3-7 周期三角形信号的频谱图
5、周期锯齿脉冲信号如图3-8,求其傅立叶级数,并用MATLAB绘制频谱图。
9
f(t) 1 -4 -3 -2 -1 -1 0 1 2 3 4 t
图3-8 周期锯齿脉冲信号
解: an0
n1 bn(1)1 nf(t)程序如下:
n11(1)sin(nt) n1n1% 周期锯齿脉冲信号频谱分析
% 绘制并观察周期锯齿脉冲信号频谱特性 % Nf:谐波的次数
% bn:第1,2,3,...次谐波正弦项系数 display('Please input the value of Nf '); Nf = input('Nf = ');
bn = zeros(Nf+1,1);cn = zeros(Nf+1,1); bn(1) = 0; for i = 1:Nf
bn(i+1) = (-1)^(i+1)*1/(i*pi); % 计算系数bn cn(i+1) = abs(bn(i+1)); %计算幅度频谱 end t = -5:0.01:5;
x = sawtooth(pi*(t+1)); %用sawtooth函数构造周期锯齿脉冲信号 subplot(211);
plot(t,x);axis([-5 5 -1.5 1.5]);
10
title('周期锯齿脉冲信号','Fontsize',8);xlabel('t (单位:s)', 'Fontsize',8); subplot(212); k = 0:Nf; stem(k,cn); hold on; plot(k,cn);
title('幅度频谱','Fontsize',8);xlabel('谐波次数', 'Fontsize',8); % End
Please input the value of Nf Nf = 30
程序运行结果如图3-9。
周期锯齿脉冲信号1.510.50-0.5-1-1.5-50.40.30.20.10-4-3-2-10t (单位:s)12345幅度频谱051015谐波次数202530
图3-9 周期锯齿脉冲信号的频谱
(三)非周期信号频域分析的MATLAB实现
当非周期序列写成下列有理多项式的形式 B(j)b0b1ejbMejMF(j) A(j)a0a1ejaNejN可以用MATLAB中提供的freqz( )函数来计算上面非周期序列的傅立叶变换
11
值,调用格式为
h=freqz (b,a,w)
上式中,b和a分别是其分子多项式和分母多项式的系数向量,即
b[b0,b2,,bM]a[a0,a1,,aN]
w为抽样的频率点,h为傅立叶变换在抽样点w上的值。 6、利用MATLAB画出0.9时,F(ej)程序如下: clear all; b=[1];
a1=[1 -0.9];a2=[1 0.9];
w=linspace(0,2*pi,512); %线性均匀分0-2的间隔,共512点 h1=freqz(b,a1,w); h2=freqz(b,a2,w);
plot(w/pi,abs(h1),w/pi,abs(h2),'k:'); xlabel('\\omega/\\pi');
legend('\\alpha=0.9','\\alpha=-0.9') 画出的幅度频谱如图3-10。
121的幅度频谱。 j1e=0.9=-0.9108642000.20.40.60.81/1.21.41.61.82
图3-10 F(ej)的幅度频谱
12
(四)傅立叶变换及MATLAB实现
信号f(t)傅立叶变换定义为 F(j)f(t)ejtdt 其存在的条件是f(t)在无限区间内绝对可积,即f(t)满足|f(t)|dt 傅立叶逆变换定义为 f(t)12F(j)ejtd 利用MATLAB工具箱中提供的fourier( )函数可直接求出其傅立叶变换。其调用格式为 (1)F=fourier(f); (2)F=fourier(f,v); (3)F=fourier(f,u,v); 格式(1)中的输入参量f是时间信号f(t)的符号表达式,输出参量F为返回符号f表达式关于的傅立叶变换表达式。 格式(2)中的输入参量f与格式(1)的含义相同,输出参量F为返回符号f表达式关于v的傅立叶变换表达式。V是符号变量。即 F(v)f(x)ejvxdx 格式(3)中的输入参量f是关于符号变量u的符号表达式,输出参量F为返回符号f表达式关于v的傅立叶变换表达式。V是符号变量。即 F(v)f(u)ejvudu 注意,在调用fourier( )函数之前,要用syms命令对所用到的变量,如t、u、v、w等进行说明,即将这些变量说明成符号变量。 7、 求f(t)e2|t|的傅立叶变换
解: 利用MATLAB提供的fourier( )函数求解,命令如下: syms t;
f=exp(-2*abs(t));
13
F=fourier(f) 运行结果为: F = 4/(4+w^2)
如果希望傅立叶变换的结果是符号变量v的函数,则执行如下命令: syms t v; f=exp(-2*abs(t)); F=fourier(f,t,v) 运行结果为: F = 4/(4+v^2)
MATLAB工具箱中还提供了求傅立叶逆变换的ifourier( )函数,其调用格式为
(1)f=ifourier(F); (2)f=ifourier(F,u); (3)f=ifourier(F,v,u);
格式(1)中的输入参量F是傅立叶变换的符号表达式,默认为符号变量w的函数,输出参量f是F的傅立叶逆变换的符号表达式,默认为符号变量x的函数。
格式(2)中的输入参量F是傅立叶变换的符号表达式,默认为符号变量w的函数,输出参量f是F的傅立叶逆变换的符号表达式,为指定的符号变量u的函数。
格式(3)中的输入参量F是傅立叶变换的符号表达式,为指定的符号变量v的函数,输出参量f是F的傅立叶逆变换的符号表达式,为指定的符号变量v的函数。
注意,在调用ifourier( )函数之前,要用syms命令对所用到的变量,如t、u、v、w等进行说明,即将这些变量说明成符号变量。 8、求F(j)1的傅立叶逆变换f(t)。 12 14
解: 利用MATLAB提供的ifourier( )函数求解,命令如下: syms t w; F=1/(1+w^2) ; f=ifourier(F,t) 运行结果为: f =
1/2*exp(-t)*Heaviside(t)+1/2*exp(t)*Heaviside(-t) 其中Heaviside(t)函数为单位阶跃函数。
15
因篇幅问题不能全部显示,请点此查看更多更全内容