MatLab在线
参考资料
利用MATLAB实现常用非周期时间信号的频谱和FT的性质(微分特性和卷积定理).doc (book118.com)
LaTeX——使用Typora编写基于LaTeX的数学公式_guikunchen的博客-CSDN博客
MatLab笔记
常用函数
rectpuls
生成一个矩形脉冲。
官方文档:
This MATLAB function returns a continuous, aperiodic, unity-height rectangular pulse at the sample times indicated in array t, centered about t = 0 and with a default width of 1.
y = rectpuls(t)
y = rectpuls(t,w)
即:此MATLAB函数在数组 t 所指示的采样时间处返回一个连续的,非周期的,单位高度的矩形脉冲,该脉冲以t = 0为中心,默认宽度为1。
Matlab中的rectpuls函数解析_wshwc的博客-CSDN博客
heaviside
阶跃函数
语法
H = heaviside(x)
说明
$$
H(x)=\left{\begin{aligned}
0,x<0\
\frac{1}{2},x=0\
1,x>0
\end{aligned}\right.
$$
exp
生成指数函数。
语法
Y = exp(X)
说明
Y = exp(X)
为数组 X
中的每个元素返回指数 e^X。对于复数元素 z= x+ iy
,它返回以下复指数
$$
e^z=e^x(cos y+i sin y)
$$
sinc
生成抽样信号。
语法
Sat = sinc(t)
sawtooth
生成锯齿波或三角波
语法:
x = sawtooth(t)
x = sawtooth(t,width)
说明:
第一种调用方式,将产生周期为2π的锯齿波。以02π这个周期内为例,当t=0时,x=-1,当t=2π时,x=1。由此可见,在02π这个周期内,x(t)是关于t的以1/π为斜率的线段。
第二种调用方式中,width是0到1之间的标量。在0到2π×width区间内,x的值从-1线性变化到1;在2π×width~2π区间内,x的值又从1线性变化到-1。sawtooth(t,1)和sawtooth(t)是等价的。
fourier
语法:
fourier(f)
fourier(f,transVar)
fourier(f,var,transVar)
f-输入,可以是表达式、函数、向量或矩阵等
var-变量,一般为时间变量或空间变量,如果不设置该变量,一般使用函数中的符号变量作为默认值
transVar-转换变量,可以是符号变量,表达式,向量或矩阵,该变量通常称为“频率变量”,默认情况下,傅立叶使用ω,如果ω是f的自变量,则傅立叶使用ν。
$$
\mathcal{F}(\omega)=\int_{-\infty}^{+\infty}{f(x)e^{-i\omega x}dx}
$$
diff
求近似导数或求差分
语法:
Y = diff(X)
Y = diff(X,n)
Y = diff(X,n,dim)
说明
Y = diff(X)
计算沿大小不等于 1 的第一个数组维度的 X
相邻元素之间的差分:
如果
X
是长度为m
的向量,则Y = diff(X)
返回长度为m-1
的向量。Y
的元素是X
相邻元素之间的差分。Y = [X(2)-X(1) X(3)-X(2) ... X(m)-X(m-1)]
如果
X
是不为空的非向量 p×m 矩阵,则Y = diff(X)
返回大小为 (p-1)×m 的矩阵,其元素是X
的行之间的差分。Y = [X(2,:)-X(1,:); X(3,:)-X(2,:); ... X(p,:)-X(p-1,:)]
如果
X
是 0×0 的空矩阵,则Y = diff(X)
返回 0×0 的空矩阵。
Y = diff(X,n)
通过递归应用 diff(X)
运算符 n
次来计算第 n 个差分。在实际操作中,这表示 diff(X,2)
与 diff(diff(X))
相同。
Y = diff(X,n,dim)
是沿 dim
指定的维计算的第 n 个差分。dim
输入是一个正整数标量。
差分和近似导数 - MATLAB diff - MathWorks 中国
conv
卷积和多项式乘法
语法
w = conv(u,v)
w = conv(u,v,shape)
说明
w = conv(u,v)
返回向量 u
和 v
的卷积。如果 u
和 v
是多项式系数的向量,对其卷积与将这两个多项式相乘等效。
w = conv(u,v,shape)
返回如 shape
指定的卷积的分段。例如,conv(u,v,'same')
仅返回与 u
等大小的卷积的中心部分,而 conv(u,v,'valid')
仅返回计算的没有补零边缘的卷积部分。
卷积和多项式乘法 - MATLAB conv - MathWorks 中国
plot
绘制二维图像:
plot函数的基本调用格式为:
1、plot(y)
当y为向量时,是以y的分量为纵坐标,以元素序号为横坐标,用直线依次连接数据点,绘制曲线。若y为实矩阵,则按列绘制每列对应的曲线。
2、plot(x,y)
若y和x为同维向量,则以x为横坐标,y为纵坐标绘制连线图。若x是向量,y是行数或列数与x长度相等的矩阵,则绘制多条不同色彩的连线图,x被作为这些曲线的共同横坐标。若x和y为同型矩阵,则以x,y对应元素分别绘制曲线,曲线条数等于矩阵列数。
3、plot(x1,y1,x2,y2,……)
在此格式中,每对x,y必须符合plot(x,y)中的要求,不同对之间没有影响,命令将对每一对x,y绘制曲线。
以上三种格式中的x,y都可以是表达式。plot是绘制一维曲线的基本函数,但在使用此函数之前,须先定义曲线上每一点的x以及y坐标。
axis
控制坐标轴范围与样式
axis([XMIN XMAX YMIN YMAX ZMIN ZMAX]) 设置当前所绘图像的x轴、y轴和z轴的范围。
语法\功能
创建函数
Matlab程序设计(六)—-创建函数(function)_曾经爱过她的回眸的博客-CSDN博客
时域信号图像
常见的时间信号图像
门信号
门宽为2
t=-4:0.001:4; %横坐标[-4,4],绘图每隔0.001取一点;本质为生成一个数组t[8000]
T=2; %门宽
ft = rectplus(t,T); %函数值,记录每个横坐标为t除的函数值
plot(t,ft); %绘图
axis(-4,4,-0.5,1.5); %设定坐标轴范围
指数信号
$$
f(t)=e^{at}
$$
例:
$$
f(t)=e^{2t}
$$
t=-1:0.001:5;
a=2;
ft = exp(a*t);
plot(t,ft);
正弦信号(余弦信号同理)
$$
f(t)=Asin(\omega t+\phi)
$$
例:
$$
f(t)=2sin(8\pi t+\frac{\pi}{6})
$$
A=2;
w=8*pi;
phi=pi/6
t=-5:0.001:5;
ft=A*sin(w*t+phi);
plot(t,ft);
看来MATLAB中pi
即位常量π
抽样信号
$$
sinc(t)=Sa(t)=\frac{sin(\pi t)}{\pi t}
$$
例:
t=-5:0.001:5;
sat=sinc(t);
plot(t,sat);
三角信号:
例:
t=0:0.01:10*pi;
z=sawtooth(t,0);
plot(t,z);
傅里叶变换:
常见的非周期信号傅里叶变换
单边指数信号:
syms t;
%原函数
ft=exp(-2*t)*sym(heaviside(t));
%原函数图像
subplot(311);
fplot(ft);
%傅里叶变换
Fw=fourier(ft);
%幅度谱
subplot(312);
fplot(abs(Fw));
%相位谱
subplot(313);
fplot(atan(imag(Fw)/real(Fw)));
门信号:
syms t w;
%门信号,门宽为2
ht=sym(heaviside(t+1)-heaviside(t-1));
%信号图像
subplot(211);
fplot(ht);
axis([-2,2,-1,3]);
%傅里叶变换
Fw=fourier(ht,t,w);
%数据类型转换(不懂)
%FFw=maple("convert",Fw,"piecewise");
%门信号频谱图象
subplot(212);
fplot(Fw,[-30,30]);
抽样信号:
syms t;
%原函数
ft=sinc(t);
%原函数图像
subplot(211);
fplot(ft);
%傅里叶变换
Fw=fourier(ft);
%频谱
subplot(212);
fplot(abs(Fw));
FT性质:
常见非周期信号的FT性质举例
展宽:
时域展宽,频域压缩:
$$
f(at)\longleftrightarrow \frac{1}{|a|}\mathcal{F}(\frac{\omega}{a})
$$
syms t;
%原函数
f1t=sym(heaviside(t+1)-heaviside(t-1));
subplot(221);
fplot(f1t);
F1w=fourier(f1t);
subplot(223);
fplot(F1w);
axis([-10,10,-2,5]);
%展宽
f2t=sym(heaviside(t*0.5+1)-heaviside(t*0.5-1));
subplot(222);
fplot(f2t);
F2w=fourier(f2t);
subplot(224);
fplot(F2w);
axis([-10,10,-2,5]);
反褶:
$$
f(t)\longrightarrow f(-t),\mathcal{F}(\omega)\longrightarrow \mathcal{F}(-\omega)=\mathcal{F}^{*}(\omega)
$$
没找到频域函数非偶函数的例子…现象不好看…
syms t;
%原函数时域及其频域图像
f1t=exp(-2*t)*heaviside(t);
F1w=fourier(f1t);
subplot(221);
fplot(f1t);
subplot(223);
fplot(F1w);
%反褶后函数时域及其频域图像
f2t=exp(2*t)*heaviside(-t);
F2w=fourier(f2t);
subplot(222);
fplot(f2t);
subplot(224);
fplot(F2w);
微分:
三角波的时域波形及其微分波形
h=0.01;
t=0:h:10*pi;
%三角波
z=sawtooth(t,0.5);
subplot(211);
plot(t,z);
%三角波微分
d=diff(z)*(1/h);
subplot(212);
plot(t(1:end-1),d)%求微分后数组长度减少一位
axis([0,35,-1,1]);
卷积:
以矩形脉冲与单边指数信号卷积为例:
t=-1:0.01:5;
%矩形脉冲
f1=((t>0)-(t>3));
%单边指数信号
f2=exp(-t).*(t>0);
%卷积
f3=conv(f1,f2);f3=f3*0.01;
%卷积后数组容量翻倍,重新计算画图范围
k=2*length(t)-1;
k3=linspace(2*t(1),2*t(end),k);
%画图
subplot(311)
plot(t,f1);
subplot(312)
plot(t,f2)
subplot(313)
plot(k3,f3);
时域卷积定理:
$$
\mathcal{F}[f(x)*g(x)]=\mathcal{F}[f(x)]\cdot \mathcal{F}[g(x)]
$$
两门宽为2的门信号卷积
dt=0.01;
t=-2:dt:2;
ft=heaviside(t+1)-heaviside(t-1);
%们信号图像
subplot(221);
plot(t,ft);
%门信号卷积图像
y=dt*conv(ft,ft);
n=linspace(t(1)*2 , t(end)*2 , 2*length(t)-1);
subplot(222);
plot(n,y);
%两函数频域图像
W1=2*pi*5;
N=200;
k=linspace(-N,N);
W=k*W1/N;
Fw=ft*exp(-j*t'*W)*dt;
Yw=y*exp(-j*n'*W)*dt;
subplot(223);
plot(W,abs(Fw));
subplot(224);
plot(W,abs(Fw).*abs(Fw));
频域卷积定理:
若有:
$$
\mathcal{F}[f(x)]=F(\omega)\
\mathcal{F}[g(x)]=G(\omega)
$$
则:
$$
\mathcal{F}[f(x)g(x)]=\frac{1}{2\pi}[F(\omega)*G(\omega)]
$$
三角波与余弦函数相乘
dt=0.001;
t=-2:dt:2;
ut=heaviside(t+0.5)-heaviside(t-0.5);
%三角波
fn=dt*conv(ut,ut);
n=linspace(2*t(1) , 2*t(end) , 2*length(t)-1);
%三角波图像
subplot(231);
plot(n,fn);
%余弦信号
gn=cos(10*pi*n);
subplot(232);
plot(n,gn);
axis([-1,1,-1,1])
%余弦调频信号,三角波与余弦信号相乘
hn=fn.*gn;
subplot(233);
plot(n,hn);
%三角波 余弦信号的傅里叶变换
W1=2*pi*10;
N=200;
k=-N:N;
W=k*W1/N;
Fw=fn*exp(-j*n'*W)*dt;
Gw=gn*exp(-j*n'*W)*dt;
%三角波 余弦信号的频域图像
subplot(234);
plot(W/pi,abs(Fw));
subplot(235);
plot(W/pi,abs(Gw));
%Fw与Gw卷积结果乘1/2pi
Hw=conv(Fw,Gw)/(2*pi);
subplot(236);
k1=-2*N:2*N;
W11=2*pi*k1/(N*0.1);
plot(W11/pi,abs(Hw));