数字信号处理Python示例(10)生成平稳信号和非平稳信号
文章目录
- 前言
- 一、平稳信号和非平稳信号
- 1.平稳信号(Stationary Signal):
- 2.非平稳信号(Non-Stationary Signal):
- 二、生成平稳信号和非平稳信号的实验设计
- 三、生成平稳和非平稳信号的Python代码
- 四、仿真结果及分析
- 写在后面的话
前言
本文首先介绍了平稳信号和非平稳信号的概念,然后给出生成平稳信号和非平稳信号的Python代码,最后给出仿真结果并对结果进行了分析。
一、平稳信号和非平稳信号
平稳信号和非平稳信号是信号处理中的两个基本概念,它们描述了信号统计特性的变化情况。
1.平稳信号(Stationary Signal):
-
统计特性不变: 平稳信号的统计特性(如均值、方差等)不随时间变化。这意味着信号在不同时间段的性质是相同的。
-
自相关函数: 对于平稳信号,其自相关函数仅取决于时间间隔,而与具体的时间点无关。
-
例子: 许多自然现象和电子系统产生的信号,如白噪声、正弦信号等,都可以是平稳的。
2.非平稳信号(Non-Stationary Signal):
-
统计特性变化: 非平稳信号的统计特性随时间变化。这意味着信号在不同时间段的性质是不同的。
-
自相关函数: 对于非平稳信号,其自相关函数不仅取决于时间间隔,还取决于具体的时间点。
-
例子: 语音信号、线性调频信号、生物医学信号、金融市场数据等都是非平稳的,因为它们的特性会随时间而变化。
信号处理中所处理的绝大多数信号都是非平稳的。从这篇文章开始,将介绍并生成一些平稳和非平稳信号。
另外,在处理非平稳信号时,通常需要对信号进行分段,使得每个分段内的信号近似为平稳信号,然后对每个分段分别进行处理。这种方法在时间-频率分析(如短时傅里叶变换)和时频分析(如小波变换)中得到了广泛应用。这将在后续文章中逐一介绍。
二、生成平稳信号和非平稳信号的实验设计
本实验涉及生成平稳和非平稳信号。平稳信号为一个固定频率的正弦信号,其表达式如下:
如果把上述正弦信号表达式中的时间自变量t替换为t2,这等效于把正弦信号的固定频率f替换为f*t,将会导致信号的频率随时间变化。其表达式如下:
由于这个信号的频率随时间变化,所以被视为是非平稳的。
下面给出生成这两种信号Python代码及其运行结果。
三、生成平稳和非平稳信号的Python代码
生成平稳和非平稳信号的Python代码如下:
# 导入必要的库
import numpy as np # numpy用于数学计算
import matplotlib.pyplot as plt # matplotlib.pyplot用于绘图# 定义时间轴
t = np.linspace(0, 2, 1000) # 生成从0到2秒的时间点,共1000个点# 定义正弦波参数
A = 1 # 幅度
f = 5 # 频率(赫兹)
phi = 0 # 相位(弧度)# 生成平稳信号(正弦信号):
xst = A * np.sin(2 * np.pi * f * t + phi) # 平稳信号# 生成非平稳信号:
xnst = A * np.sin(2 * np.pi * f * t ** 2 + phi) # 非平稳信号# 画图
# 使用subplot创建一个2行1列的子图布局,并选中第一个子图进行绘制
plt.subplot(2, 1, 1)
# 在第一个子图中绘制平稳信号
plt.plot(t, xst)
# 设置x轴和y轴的标签
plt.xlabel('Time')
plt.ylabel('Amplitude')
# 设置子图的标题
plt.title('平稳信号')# 使用subplot选中第二个子图进行绘制
plt.subplot(2, 1, 2)
# 在第二个子图中绘制非平稳信号
plt.plot(t, xnst)
# 设置x轴和y轴的标签
plt.xlabel('Time')
plt.ylabel('Amplitude')
# 设置子图的标题
plt.title('非平稳信号')# 使用tight_layout自动调整子图参数,避免标签之间的重叠
plt.tight_layout()
# 在所有子图上添加网格线
plt.grid(True)
# 显示绘制的图像
plt.show()
四、仿真结果及分析
以下是执行代码后画图的结果。
结果分析:
- 第一个子图展示了平稳信号,即一个标准的正弦波。这个信号的频率和幅度在整个时间轴上保持不变。
- 第二个子图展示了非平稳信号。在这个信号中,由于时间项 t2 的存在,频率随时间变化,导致信号的非平稳性。随着时间的推移,正弦波的周期变得更短,这表明频率在增加。
- 可以得出结论:平稳信号的频率不随时间变化,非平稳信号的频率随着时间增加而变化。
写在后面的话
这是《数字信号处理python示例》系列文章的第10篇。整个系列将使用python语言示例说明数字信号处理的基本原理与工程应用。给出的所有Python程序将努力做到简单且具有说明性。在数字信号处理的理论方面,将尽量避免数学上的推导与证明,而注重其物理意义阐述和工程应用的介绍。
感谢您的阅读!