信号处理趣学D8——关于拉氏变换和频谱图的那些事儿
最近小虎在网课上被老师问到编程写出一指数函数
y
=
A
e
−
a
t
y=Ae^{-at}
y=Ae−at的频谱图,当时鼓捣了1个多钟???以前是画过bode图,bode的幅频图是对数幅频图。应该也可以用伯德图直接画的,但是这个问题的关键应该在拉氏变化。5分钟不到的事,要搞那么久,看来是小虎还不太理解拉氏变换。编程工具还是那熟悉的MATLAB。
拉氏变换简介
拉普拉斯变换(Lapalace transform),是一种线性变换,也就是说非线性不可以用这种方法,它可以将时域变量转换为复数变量进而得到复数频率。一般来讲,满足同质性f(ka)=kf(a)和可加性f(a+b)=f(a)+f(b),即为线性变换,参考这里。
在信号分析领域中,何岭松教授将之称为叠加性和比例性: 叠加性,系统对各输入之和的输出等于各单个输入的输出之和;比例性,数倍输入所得的输出等于原输入所得输出的数倍。
傅里叶变换vs拉氏变换
既然都是将时域信息转化为频域信息,那么拉氏变换和傅里叶变换(fourier transform)有啥区别呢?
wikipedia说,“The Laplace transform is similar to the Fourier transform. While the Fourier transform of a function is a complex function of a real variable (frequency), the Laplace transform of a function is a complex function of a complex variable.”他们主要区别是变量形式不同,在傅里叶变换是关于实数频率变量的方程,而拉氏变换是关于复数频率变量的方程。
不过两种时域to频域的变换工程上都有应用,像小虎用过的,数字图像处理滤波用过傅里叶变换、傅里叶反变换;自动控制用过拉氏变换求传递函数以及系统的动态特性等等。
傅里叶变换
X
(
ω
)
=
∫
−
∞
∞
x
(
t
)
e
−
j
ω
t
d
t
X(\omega)=\int ^\infty_{-\infty} x(t)e^{-j\omega t}dt
X(ω)=∫−∞∞x(t)e−jωtdt
拉氏变换
F
(
s
)
=
L
{
f
(
t
)
}
=
∫
0
∞
e
−
s
t
f
(
t
)
d
t
F(s)=L \{f(t)\}=\int ^\infty_0 e^{-st}f(t)dt
F(s)=L{f(t)}=∫0∞e−stf(t)dt
拉氏变换表
看下面其中一个网站:
Laplace Transform
Microsoft Word - New Laplace Transform Table
频谱图简介
以待画频谱的函数
y
(
t
)
=
A
e
−
a
t
y(t)=Ae^{-at}
y(t)=Ae−at为例。
首先查拉氏变换表,的到exponent function的拉氏变换,上述函数的转换结果是:
Y
(
s
)
=
A
s
+
a
Y(s)=\frac {A}{s+a}
Y(s)=s+aA
令
s
=
j
ω
s=j\omega
s=jω,可以得到
Y
(
w
)
=
A
j
ω
+
a
Y(w)=\frac {A}{j\omega+a}
Y(w)=jω+aA
幅值、相角为:
∣
Y
(
w
)
∣
=
A
ω
2
+
a
2
|Y(w)|=\frac A {\sqrt{\omega^2+a^2}}
∣Y(w)∣=ω2+a2A
ϕ
(
w
)
=
−
a
r
c
t
a
n
(
ω
a
)
\phi(w)=-arctan(\frac \omega a)
ϕ(w)=−arctan(aω)
这样,幅值和相位角就是关于频率的函数。将幅值和相位角关于频率的图像分别画出,就是幅频图(振幅频谱图magnitude spectrum)和相频图(相位角频谱图phase angle spectrum),两者合称为频谱图。
示例以及结果
设A=5,a=5。接下来提供提供两种方法画频谱图,两种方法表示不同,应用场景有点区别。
方法1定义法
频谱图定义
幅值关于频率变化的函数绘制出来的图像称为幅频图,函数可以表示为
∣
X
(
ω
)
∣
|X(\omega)|
∣X(ω)∣;相位角关于频率变化的函数绘制出来的图像称为相频图,函数可以表示为
φ
(
ω
)
\varphi(\omega)
φ(ω)。幅度可以对函数取绝对值得到,而相位角,可以从复平面得到,比如
z
=
3
+
j
2
z=3+j2
z=3+j2
它的幅值为
3
2
+
2
2
=
13
\sqrt {3^2+2^2}=\sqrt {13}
32+22=13,相位角为:
φ
=
a
r
c
t
a
n
2
3
\varphi=arctan \frac 23
φ=arctan32
结果图
完整代码
a=5;A=5;
w=-5*pi:0.01:5*pi;
Xw=A./sqrt((w.^2+a^.2));
phi=-atan(w/a);
subplot(2,1,1);
plot(Xw);
xlabel('\omega');
ylabel('|X(\omega)|');
subplot(2,1,2);
plot(phi);
xlabel('\omega');
ylabel('|\phi(\omega)|');
此法用于一般情况下求频谱图。
方法2bode图
bode图的意义和编程方法见小虎的这篇文章,这里不再赘述。结果图如下。
总结
不论是那种方法,都需要将时域变量转化为频域变量,然后再根据频谱图的相关定义画出来频谱图来。因为频谱图本身就是为了描述以频率为自变量的函数而存在的,所以在时域里鼓捣了1个多小时还鼓捣不出两幅图来也不足为奇了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)