首页 > Python资料 博客日记
python 实现信号高通、低通、带通滤波处理代码,并画出滤波后的时域频域图
2025-01-14 23:00:07Python资料围观10次
Fir高通、低通、带通滤波和滤波后的时域频域简介
FIR(Finite Impulse Response,有限脉冲响应)滤波器是一种线性相位滤波器,其单位脉冲响应在时间域内有有限长度,即它在输入信号消失后会立即回到零。FIR滤波器常用于语音信号的低通、带通和高通滤波,特别是在需要无失真、稳定的频率响应和易于设计的情况下。
FIR高通、低通、带通滤波:
高通滤波:保留高频信号,衰减低频信号。
低通滤波:保留低频信号,衰减高频信号。
带通滤波:仅允许某一特定频率范围内的信号通过,而衰减其他频率的信号。
时域分析:
FIR滤波器的输出仅取决于当前和过去有限个输入样本,这是基于其线性结构而非递归结构的特点,也是FIR系统稳定的基础。
在时域中,FIR滤波器的输出是滤波器系数与输入信号在时域做的卷积结果。
频域分析:
在频域中,FIR滤波器的输出是输入信号的频谱与滤波器频谱的乘积。
FIR滤波器可以提供平滑的频率响应,但其频率响应的陡峭程度取决于滤波器的阶数和设计。
高通、低通和带通滤波在频域中的表现就是分别对不同频率范围的信号进行加权,使得需要保留的频率范围内的信号通过,而衰减其他频率的信号。
信号高通、低通、带通滤波处理代码,并画出滤波后的时域频域图python实现样例
以下是一个使用scipy
库实现信号高通、低通、带通滤波的例子,并画出滤波后的时域和频域图的示例代码:
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
# 生成测试信号
t = np.linspace(0, 1, 1000, endpoint=False)
x = np.sin(2*np.pi*10*t) + np.sin(2*np.pi*100*t) + np.sin(2*np.pi*200*t)
# 高通滤波
highpass = signal.butter(4, 20, 'highpass', fs=1000, output='sos')
filtered_highpass = signal.sosfilt(highpass, x)
# 低通滤波
lowpass = signal.butter(4, 100, 'lowpass', fs=1000, output='sos')
filtered_lowpass = signal.sosfilt(lowpass, x)
# 带通滤波
bandpass = signal.butter(4, [40, 60], 'bandpass', fs=1000, output='sos')
filtered_bandpass = signal.sosfilt(bandpass, x)
# 绘制原始信号和滤波后的信号的时域图和频域图
fig, axs = plt.subplots(3, 2, figsize=(10, 10))
fig.suptitle('Signal Filtering')
axs[0, 0].plot(t, x)
axs[0, 0].set_title('Original Signal (Time Domain)')
axs[0, 0].set_xlabel('Time')
axs[0, 0].set_ylabel('Amplitude')
axs[0, 1].magnitude_spectrum(x, Fs=1000)
axs[0, 1].set_title('Original Signal (Frequency Domain)')
axs[0, 1].set_xlabel('Frequency')
axs[0, 1].set_ylabel('Magnitude')
axs[1, 0].plot(t, filtered_highpass)
axs[1, 0].set_title('Highpass Filtered Signal (Time Domain)')
axs[1, 0].set_xlabel('Time')
axs[1, 0].set_ylabel('Amplitude')
axs[1, 1].magnitude_spectrum(filtered_highpass, Fs=1000)
axs[1, 1].set_title('Highpass Filtered Signal (Frequency Domain)')
axs[1, 1].set_xlabel('Frequency')
axs[1, 1].set_ylabel('Magnitude')
axs[2, 0].plot(t, filtered_lowpass)
axs[2, 0].set_title('Lowpass Filtered Signal (Time Domain)')
axs[2, 0].set_xlabel('Time')
axs[2, 0].set_ylabel('Amplitude')
axs[2, 1].magnitude_spectrum(filtered_lowpass, Fs=1000)
axs[2, 1].set_title('Lowpass Filtered Signal (Frequency Domain)')
axs[2, 1].set_xlabel('Frequency')
axs[2, 1].set_ylabel('Magnitude')
plt.tight_layout()
plt.show()
这段代码首先生成了一个测试信号,然后使用scipy.signal.butter
函数设计了高通、低通、带通滤波器的传递函数系数,并使用scipy.signal.sosfilt
函数对原始信号进行滤波处理。最后,通过matplotlib.pyplot
库绘制了原始信号和滤波后的信号的时域图和频域图。
运行代码后,会显示一个包含三行两列的图像组,每个图像组包括对应滤波结果的时域图和频域图。可以根据需要调整滤波器的阶数、截止频率等参数以及测试信号的频率成分和幅度来观察滤波效果。
标签:
相关文章
最新发布
- Python 爬取天气预报并进行可视化分析
- 智谱AI: ChatGLM API的使用
- Python 程序打包 exe:从代码到可执行文件的完美转换
- 【Python】解决Python报错:AttributeError: ‘function‘ object has no attribute ‘xxx‘
- Windows配置pip安装llama-cpp-python出现错误问题
- 【Python】多人聊天室案例、生成器和迭代器
- Python KeyError 异常及其解决方法
- python 打包exe文件包
- 华为OD机试E卷 --计算疫情扩散时间--24年OD统一考试(Java & JS & Python & C & C++)
- 100 个 Python 小例子(练习题)
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程