1.连续信号的MATLAB表示
自变量在整个连续区间内都有定义的信号,称为连续时间信号,简称连续信号。从严格意义上来讲,MATLAB数值计算的方法并不能处理连续信号。然而,可以利用连续信号在等时间间隔点的取样值来近似表示连续信号,即当取样时间间隔足够小时,这些离散样值能被MATLAB所处理,并且能够较好地近似表示连续信号。
2.Matlab提供了大量生成基本信号的函数
如:
(1)指数信号:K*exp(a*t)
(2)正弦信号:K*sin(w*t+phi)和K*cos(w*t+phi)
(3)复指数信号:K*exp((a+i*b)*t)
(4)抽样信号:sin(t*pi)
(5)矩形脉冲信号:rectpuls(t,width)
(6)周期矩形脉冲信号:square(t,DUTY),其中DUTY参数表示信号的占空比DUTY%,即在一个周期脉冲宽度(正值部分)与脉冲周期的比值。占空比默认为0.5。
(7)三角波脉冲信号:tripuls(t, width, skew),其中skew取值范围在-1~+1之间。
(8)周期三角波信号:sawtooth(t, width)
3.Matlab中提供了常用的图形控制函数
1)利用clc, dir(ls), help, clear, format,
hold, clf控制命令的使用和M文件编辑/调试器使用操作;
2)主函数函数的创建和子程序的调用;
3)plot,subplot, grid on, figure, xlabel,ylabel,title,hold,title,Legend,绘图函数使用;
axis([xmin,xmax,ymin,ymax]):图型显示区域控制函数,其中xmin为横轴的显示起点,xmax为横轴的显示终点,ymin为纵轴的显示起点,ymax为纵轴的显示终点。
有时,为了使图形具有可读性,需要在所绘制的图形中,加上一些网格线来反映信号的幅度大小。MATLAB中的grid on/grid off可以实现在你的图形中加网格线。
grid on:在图形中加网格线。
grid off:取消图形中的网格线。
function y = delta(t)
dt = 0.01;
y = (u(t)-u(t-dt))/dt;
产生单位阶跃信号的扩展函数为:
% Unit step function
function y = u(t)
y = (t>=0); % y = 1 for t > 0, else y = 0
(1)由于正弦信号在Matlab中用sin函数表示,于是调用格式:
ft=A*sin(w*t+phi)
(2)Matlab编程代码如下:
A=3; w=0.5*pi; phi=0;
t=0:0.01:8;
ft=A*sin(w*t+phi);
plot(t,ft);
grid on;
(3)正弦信号波形
2.抽样信号的Matlab编程
(1)抽样信号Sa(t)=sin(t)/t在Matlab中用sinc函数表示名,调用格式为:
Ft=sinc(t/pi)
(2)Matlab编程代码
t=-3*pi:pi/100:3*pi;
ft=sinc(t/pi);
plot(t,ft);
grid on;
axis([-10,10,-0.5,1.2]); %定义画图范围,横轴,纵轴
title('抽样信号') %定义图的标题名字
(3)抽样信号波形
(1)在Matlab中,复指数信号的调用格式为exp((a+j*w)*t)
(2)Matlab编程代码
t=0:0.01:5;
a=0.5;
w=8;
X= 2*exp((a+j*w)*t);
Xr=real(X); %取实部
Xi=imag(X); %取虚部
Xa=abs(X); %取模
Xn=angle(X); %取相位
subplot(2,2,1),plot(t,Xr),axis([0,5,-(max(Xa)+0.5),max(Xa)+0.5]),title('real');
subplot(2,2,3),plot(t,Xi),axis([0,5,-(max(Xa)+0.5),max(Xa)+0.5]),title('imag');
subplot(2,2,2), plot(t,Xa),axis([0,5,0,max(Xa)+1]),title('abs');
subplot(2,2,4),plot(t,Xn),axis([0,5,-(max(Xn)+1),max(Xn)+1]),title('angle');
(3)复指数信号波形
三角函数形式的傅里叶级数:
指数形式的傅里叶级数:
(2)Matlab编程代码
syms t n y
T=10; %设置周期
tao=1; %设置脉宽
Nn=16; %输出数据位数为16
Nf=30; %谐波次数30
y=1; %主周期波形
a0=2*int(y,t,-tao/2,tao/2)/T; %直流分量
as=int(2*y*cos(2*pi*n*t/T)/T,t,-tao/2,tao/2); %余弦项系数
bs=int(2*y*sin(2*pi*n*t/T)/T,t,-tao/2,tao/2); %正弦项系数
an(1)=double(vpa(a0,Nn));
for k=1:Nf
an(k+1)=double(vpa(subs(as,n,k),Nn));
bn(k+1)=double(vpa(subs(bs,n,k),Nn));
end %符号量转数值量
cn=sqrt(an.*an+bn.*bn); %幅度谱
for i=0:Nf
if an(i+1)>=0
phase(i+1)=0;
else
phase(i+1)=pi;
end
end %相位谱
subplot(211);
k=0:Nf;
stem(k,cn);
subplot(212)
stem(k,phase);
(3)波形表示:幅度谱与相位谱
Matlab的symbolic Math Toolbox提供了直接求解傅立叶变换及其逆变换的函数fourier()及ifourier(),两者的调用格式如下:
(1)Fourier 变换的调用格式
F=fourier(f):它是符号函数f的fourier变换默认返回是关于w的函数。
F=fourier(f,v):它返回函数F是关于符号对象v的函数,而不是默认的w,即
(2)Fourier逆变换的调用格式
f=ifourier(F):它是符号函数F的fourier逆变换,默认的独立变量为w,默认返回是关于x的函数。
f=ifourier(f,u):它的返回函数f是u的函数,而不是默认的x.
注意:在调用函数fourier()及ifourier()之前,要用syms命令对所用到的变量(如t,u,v,w)进行说明,即将这些变量说明成符号变量。
(1)求解f(t)=exp(-6|t|)的傅里叶变换
syms t
f=exp(-2*abs(t))
F=fourier(f)
F=4/(4+w^2)
运算结果如下:
0.0588
(2)求解单边指数信号f(t)=exp(-6t)*u(t)的傅里叶变换
具体代码:
syms t phase im re
%f=exp(-6*t)*sym(‘Heaviside(t)’); % Heaviside(t)第一个字母要小写
f= exp(-6*t)* heaviside(t); % Heaviside(t)第一个字母要小写
F=fourier(f);
% im=image(F); %计算F的实部
im=imag(F); %计算F的实部
re=real(F); %计算F的虚部
phase=atan(im/re); %计算相位
subplot(211);
ezplot(abs(F)); %绘制幅度谱
subplot(212);
ezplot(phase); %绘制相位谱
幅度谱与相位谱如下
当系统的频率响应H(jw)是jw的有理多项式时,有
MATLAB信号处理工具箱提供的freqs函数可直接计算系统的频率响应的数值解。
其调用格式如下
H=freqs(b,a,w)
其中,a和b分别是H(jw)的分母和分子多项式的系数向量,w为形如w1:p:w2的向量,定义系统频率响应的频率范围,w1为频率起始值,w2为频率终止值,p为频率取样间隔。
H返回w所定义的频率点上,系统频率响应的样值。
(1)三阶归一化的butterworth 低通滤波器的频率响应为
画出系统的幅度响应和相位响应
I具体代码:
w=0:0.025:5;
b=[1];a=[1,2,2,1];
H=freqs(b,a,w)
subplot(2,1,1);
plot(w,abs(H));grid;
xlabel('\omega(rad/s)');
ylabel('|H(j\omega)|');
title('H(jw)的幅频特性');
subplot(2,1,2);
plot(w,angle (H));grid;
xlabel('\omega(rad/s)');
ylabel('\phi(\omega)');
title('H(jw)的相频特性');
幅频特性与相频特性
(1)在编写时由于参数设置的不精确,使波形一直都未出现,在多次调试后,波形才如愿得到。
(2)经过反复对代码的摸索、编写、改动,在实验中熟练掌握了Matlab函数的用法,对其也有了更深的理解。
(3)编写代码的时候必须细心。实验中在编写傅立叶变换的代码时,由于搞混了每个函数的作用区间,导致迟迟没有波形图出现,后经过多次调试才发现问题的根源。
(4)学习信号与系统的过程中,对于幅频特性和相频特性的理解一直都比较模糊。通过此次实验,编写具体代码得到相关信号的幅频特性和相频特性图,并进行对比学习,我觉得对这部分的知识有了更深的认识!
通过本次实验,我学习到并熟练掌握了利用Matlab进行编程的方法,并能够进行连续信号及其傅里叶变换的编程及绘制。在实验的过程中,通过对波形的观察,更加深入地理解正弦函数、抽样函数和复指数函数的实质。在第4、5个分实验中,进行了对连续周期函数傅立叶级数的计算和对连续函数傅立叶变换的求解,此过程让我对课本上关于幅度谱和相位谱的理解更为深刻,最后一个实验中,利用Matlab对LTI系统的频率特性进行分析,通过编写代码,函数傅立叶变换的幅频特性和相频特性直接呈现出来,清晰明了!
2023-02-11