Python+matplotlib实现计算两个信号的交叉谱密度实例

顾言
顾言
发布时间:2026-10-11| 3人浏览过
原创

本文介绍如何使用Python和matplotlib计算两个信号的交叉谱密度。通过生成包含相干部分和随机部分的信号,利用matplotlib的csd函数绘制频谱图,展示信号在频域上的相关性。

Python+matplotlib实现计算两个信号的交叉谱密度实例

在信号处理中,交叉谱密度(Cross-Spectral Density, CSD)是分析两个信号之间频率相关性的有力工具。本文将展示如何使用Python的matplotlib库来计算并可视化两个信号的交叉谱密度。

代码实现

import numpy as np
import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(2, 1)
# make a little extra space between the subplots
fig.subplots_adjust(hspace=0.5)

dt = 0.01
t = np.arange(0, 30, dt)

# Fixing random state for reproducibility
np.random.seed(19680801)

nse1 = np.random.randn(len(t))         # white noise 1
nse2 = np.random.randn(len(t))         # white noise 2
r = np.exp(-t / 0.05)

cnse1 = np.convolve(nse1, r, mode='same') * dt  # colored noise 1
cnse2 = np.convolve(nse2, r, mode='same') * dt  # colored noise 2

# two signals with a coherent part and a random part
s1 = 0.01 * np.sin(2 * np.pi * 10 * t) + cnse1
s2 = 0.01 * np.sin(2 * np.pi * 10 * t) + cnse2

ax1.plot(t, s1, t, s2)
ax1.set_xlim(0, 5)
ax1.set_xlabel('time')
ax1.set_ylabel('s1 and s2')
ax1.grid(True)

cxy, f = ax2.csd(s1, s2, 256, 1. / dt)
ax2.set_ylabel('CSD (db)')
plt.show()

代码解析

首先,我们导入必要的库numpy和matplotlib.pyplot。接着,创建一个包含两个子图的图形对象fig,并通过subplots_adjust调整子图之间的间距。

然后,我们生成时间序列t,并设置随机种子以保证结果的可重复性。通过np.random.randn生成两个白噪声信号nse1和nse2。接着,利用np.convolve对白噪声进行卷积操作,生成有色噪声cnse1和cnse2。

最后,我们将正弦信号与有色噪声相加,得到两个包含相干部分和随机部分的信号s1和s2。通过ax1.plot绘制时域信号,并使用ax2.csd计算交叉谱密度。最终,通过plt.show展示结果。

以上就是Python+matplotlib实现计算两个信号的交叉谱密度实例的详细内容,更多关于Python信号处理、matplotlib绘图技巧的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。