Python全面分析系统的时域特性和频域特性攻略
1. 什么是时域特性和频率域特性?
- 时域特性:描述系统输出相对于输入的时间响应特性,涉及信号的时间变化过程和振幅大小等。
- 频率域特性:描述输入信号在系统中的频率响应特性,即输出与输入信号的振幅比例和相位差随频率变化的规律。
2. 如何分析时域特性?
2.1 生成输入信号
通过NumPy库的numpy.linspace()
方法生成时间数组t
和正弦信号s
:
import numpy as np
fs = 100 # 采样频率
f = 5 # 正弦信号频率
t = np.linspace(0, 1, num=fs, endpoint=False) # 时间数组
s = np.sin(2 * np.pi * f * t) # 正弦信号
2.2 绘制时域波形图
通过Matplotlib库的matplotlib.pyplot.plot()
方法绘制信号波形图:
import matplotlib.pyplot as plt
plt.plot(t, s)
plt.xlabel('Time(s)')
plt.ylabel('Amplitude')
plt.show()
2.3 分析系统响应特性
将生成的信号输入到系统中,通过测量输出信号的波形特性来分析系统响应特性。比如,对于一个低通滤波器,可以通过观察输出信号的幅值和频率变化规律判断其截止频率和滤波特性。
3. 如何分析频率域特性?
3.1 傅里叶变换
在频域中,常用的分析工具是傅里叶变换。NumPy库中提供了numpy.fft.fft()
方法,该方法可以实现对时域信号的傅里叶变换:
freq = np.fft.fftfreq(len(s), 1/fs) # 获取频率数组
S = np.fft.fft(s) # 对信号进行傅里叶变换
3.2 绘制频域波形图和功率谱
通过Matplotlib库的matplotlib.pyplot.plot()
方法绘制频域波形图和功率谱:
plt.plot(freq, np.abs(S))
plt.xlabel('Frequency(Hz)')
plt.ylabel('Amplitude')
plt.show()
plt.plot(freq, np.abs(S)**2)
plt.xlabel('Frequency(Hz)')
plt.ylabel('Power')
plt.show()
4. 示例说明
4.1 时域特性分析
如下代码是一个低通滤波器的实现,可以通过观察输出信号波形特性来判断其截止频率:
import numpy as np
import matplotlib.pyplot as plt
fs = 1000
f = 50
cutoff_freq = 100
t = np.linspace(0, 1, num=fs, endpoint=False)
s = np.sin(2 * np.pi * f * t)
cutoff = np.exp(-2 * np.pi * cutoff_freq * t)
filtered = s * cutoff
plt.plot(t, s, label='Original')
plt.plot(t, filtered, label='Filtered')
plt.xlabel('Time(s)')
plt.ylabel('Amplitude')
plt.legend()
plt.show()
4.2 频域特性分析
如下代码是对一个由三个正弦信号组成的混合信号,在频域中使用傅里叶变换得到频响特性和功率谱:
import numpy as np
import matplotlib.pyplot as plt
fs = 1000
t = np.linspace(0, 1, num=fs, endpoint=False)
s1 = np.sin(2 * np.pi * 10 * t)
s2 = np.sin(2 * np.pi * 50 * t)
s3 = np.sin(2 * np.pi * 100 * t)
s_mix = s1 + s2 + s3
freq = np.fft.fftfreq(len(s_mix), 1/fs)
S = np.fft.fft(s_mix)
plt.plot(freq, np.abs(S))
plt.xlabel('Frequency(Hz)')
plt.ylabel('Amplitude')
plt.show()
plt.plot(freq, np.abs(S)**2)
plt.xlabel('Frequency(Hz)')
plt.ylabel('Power')
plt.show()
以上示例代码可以通过Jupyter Notebook等工具中运行查看效果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python全面分析系统的时域特性和频率域特性 - Python技术站