📜  使用 Matplotlib 在Python中绘制相位谱(1)

📅  最后修改于: 2023-12-03 14:49:43.276000             🧑  作者: Mango

使用 Matplotlib 在 Python 中绘制相位谱

在数字信号处理、音频处理和图像处理等领域中,相位谱是一个非常重要的概念。相位谱是一个信号的频域表示中,每个频率的相位值的集合。在 Python 中,我们可以使用 Matplotlib 库绘制相位谱图。

准备工作

在绘制相位谱之前,我们需要先导入相关的库和数据。在这里,我们使用 SciPy 库中的 signal 模块生成一个正弦波信号。

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

# 生成正弦波信号
fs = 1000  # 采样频率
f = 100  # 正弦波频率
t = np.linspace(0, 1, fs, endpoint=False)  # 时间轴
x = np.sin(2 * np.pi * f * t)  # 正弦波信号
绘制相位谱

接下来,我们使用 signal 模块中的 periodogram 函数来计算信号的频谱,并使用 angle 函数计算每个频率的相位值。

# 计算频谱和相位谱
f, pxx = signal.periodogram(x, fs=fs)
_, phase = signal.freqz(x)

# 计算相位谱
phase = np.angle(phase)

最后,我们使用 Matplotlib 的 subplots 函数和 plot 函数来绘制功率谱和相位谱。

# 绘制功率谱
fig, (ax1, ax2) = plt.subplots(2, 1)
ax1.plot(f, pxx)
ax1.set_xlabel('Frequency')
ax1.set_ylabel('Power Spectral Density')

# 绘制相位谱
ax2.plot(f, phase)
ax2.set_xlabel('Frequency')
ax2.set_ylabel('Phase (radians)')
plt.show()
完整代码
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

# 生成正弦波信号
fs = 1000  # 采样频率
f = 100  # 正弦波频率
t = np.linspace(0, 1, fs, endpoint=False)  # 时间轴
x = np.sin(2 * np.pi * f * t)  # 正弦波信号

# 计算频谱和相位谱
f, pxx = signal.periodogram(x, fs=fs)
_, phase = signal.freqz(x)

# 计算相位谱
phase = np.angle(phase)

# 绘制功率谱
fig, (ax1, ax2) = plt.subplots(2, 1)
ax1.plot(f, pxx)
ax1.set_xlabel('Frequency')
ax1.set_ylabel('Power Spectral Density')

# 绘制相位谱
ax2.plot(f, phase)
ax2.set_xlabel('Frequency')
ax2.set_ylabel('Phase (radians)')
plt.show()

代码运行结果:

相位谱图

以上就是使用 Matplotlib 在 Python 中绘制相位谱的方法。