📅  最后修改于: 2023-12-03 14:49:43.276000             🧑  作者: Mango
在数字信号处理、音频处理和图像处理等领域中,相位谱是一个非常重要的概念。相位谱是一个信号的频域表示中,每个频率的相位值的集合。在 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 中绘制相位谱的方法。