Python:谈谈常规滤波器(带通、低通、高通、带阻)的用法

一、滤波器的作用

        滤波器在信号处理中用于移除或减少信号中的噪声,同时保持信号的某些特性。滤波器通常用于音频、视频和图像处理等领域。滤波器根据其 designed for different purposes and can be divided into several types, such as lowpass filters, highpass filters, bandpass filters, and bandstop filters.

        (1)低通滤波器(Lowpass Filters): 低通滤波器用于通过高频信号,去除或减少低频信号,从而减少噪声。

        (2)高通滤波器(Highpass Filters): 高通滤波器用于去除或减少低频信号,通过高频信号,从而减少噪声。

        (3)带通滤波器(Bandpass Filters): 带通滤波器用于通过指定频率范围内的信号,去除或减少其他频率范围内的信号,从而减少噪声。

        (4)带阻滤波器(Bandstop Filters): 带阻滤波器用于去除指定频率范围内的信号,通过其他频率范围内的信号,从而减少噪声。

二、滤波器的设计

        滤波器设计是一种将信号从复杂噪声中提取出有用的信号的过程。滤波器设计通常包括以下几个步骤:

        Step1: 确定滤波器类型:根据信号的类型和应用场景,确定需要设计的滤波器类型。例如,低通滤波器、高通滤波器、带通滤波器等。

        Step2:选择滤波器参数:根据滤波器类型和应用场景,选择合适的滤波器参数,例如滤波器带宽、截止频率等。

        Step3:设计滤波器网络:根据滤波器类型和参数,设计滤波器网络。通常使用线性代数、信号处理和系统理论等知识来设计滤波器网络。

        Step4:测试和优化:使用测试信号对滤波器进行测试,并根据测试结果对滤波器进行优化。

三、Python代码实现

        (1)以下为低通(高通滤波器类似这样设计)滤波器的一个demo:

import numpy as np
from scipy.signal import butter, filtfilt
import matplotlib.pyplot as pltdef butter_lowpass_filter(data, cutoff, fs, order=4):nyq = 0.5 * fsnormal_cutoff = cutoff / nyqb, a = butter(order, normal_cutoff, btype='low', analog=False) #高通滤波器btype='high'filtered_data = filtfilt(b, a, data)return filtered_data# main
fs = 2000  # 采样频率
dt = 1.0 / fs  # 时间间隔
t = np.arange(0, 1, dt)  # 时间向量
ff = np.linspace(0, fs//2, t.size//2)
n = len(t)  # 信号长度# 生成一个包含噪声的信号
np.random.seed(0)
noise = 0.1 * np.random.randn(n)
freq = 150  # 信号频率
x = np.sin(2 * np.pi * freq * t) + np.sin(2 * np.pi * 500 * t) + noise  # 带噪声的信号# 设置滤波器参数
cutoff = 200  # 滤波器截止频率
order = 4  # 滤波器阶数# 应用滤波器
filtered_data = butter_lowpass_filter(x, cutoff, fs, order)# 绘制原始信号和滤波后的信号
plt.figure()
plt.subplot(2, 1, 1)
plt.plot(t, x, 'b-', label='Noisy signal')
plt.plot(t, filtered_data, 'r-', linewidth=2, label='Filtered signal')
plt.xlabel('Time (seconds)')
plt.ylabel('Amplitude')
plt.legend()
plt.grid()plt.subplot(2, 1, 2)
plt.plot(ff, np.abs(np.fft.ifft(x))[0:fs//2], 'b-', label='Noisy signal')
plt.plot(ff, np.abs(np.fft.ifft(filtered_data))[0:fs//2], 'r-', linewidth=2, label='Filtered signal')
plt.xlabel('Frequency (Hz)')
plt.ylabel('|P1(f)|')
plt.legend()
plt.grid()plt.show()

        低通滤波器代码运行后的结果如图1所示。

图1

       (2) 以下为带通滤波器的一个demo:

import numpy as np
from scipy.signal import butter, filtfilt
import matplotlib.pyplot as pltdef butter_bandpass_filter(data, lowcut, highcut, fs, order=4):nyq = 0.5 * fslow = lowcut / nyqhigh = highcut / nyqb, a = butter(order, [low, high], btype='band')filtered_data = filtfilt(b, a, data)return filtered_data# main
fs = 2000  # 采样频率
dt = 1.0 / fs  # 时间间隔
t = np.arange(0, 1, dt)  # 时间向量
ff = np.linspace(0, fs//2, t.size//2)
n = len(t)  # 信号长度# 生成一个包含噪声的信号
np.random.seed(0)
noise = 0.1 * np.random.randn(n)
freq = 150  # 信号频率
x = np.sin(2 * np.pi * freq * t) + np.sin(2 * np.pi * 500 * t) + noise  # 带噪声的信号# 设置滤波器参数
lowcut = 400  # 滤波器下限频率
highcut = 600  # 滤波器上限频率
order = 4  # 滤波器阶数# 应用滤波器
filtered_data = butter_bandpass_filter(x, lowcut, highcut, fs, order)# 绘制原始信号和滤波后的信号
plt.figure()
plt.subplot(2, 1, 1)
plt.plot(t, x, 'b-', label='Noisy signal')
plt.plot(t, filtered_data, 'r-', linewidth=2, label='Filtered signal')
plt.xlabel('Time (seconds)')
plt.ylabel('Amplitude')
plt.legend()
plt.grid()plt.subplot(2, 1, 2)
plt.plot(ff, np.abs(np.fft.ifft(x))[0:fs//2], 'b-', label='Noisy signal')
plt.plot(ff, np.abs(np.fft.ifft(filtered_data))[0:fs//2], 'r-', linewidth=2, label='Filtered signal')
plt.xlabel('Frequency (Hz)')
plt.ylabel('|P1(f)|')
plt.legend()
plt.grid()plt.show()

         带通滤波器代码运行后的结果如图2所示。

图2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pikachu 不安全的文件下载(Unsafe file download)概述 附漏洞利用案例

目录 获取下载链接 修改链接 重新构造链接 拓展 不安全的文件下载概述 文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求…

02.Ambari自定义服务开发-metainfo.xml介绍

文章目录 metainfo.xml 介绍配置说明Hbase metainfo.xml配置说明配置参数详细介绍配置文件样例DORIS metainfo.xml 介绍 ​ 在Ambari自定义开发中,metainfo.xml 配置文件起着至关重要的作用。它用于定义服务的元数据信息,包括服务的版本、组件、执行脚本…

Todesk远程Ubuntu桌面系统100%但是进不去桌面

1、报错情况 如下图所示,用Todesk远程Ubuntu桌面,看到连接100%了,但是进不去桌面 ubuntu系统看起来的话,已经像被远程成功了 我就首先把todesk卸载重新安装了,后面发现还是这样,于是我就找客服去问了&…

Trick :无 trick,概率 DP

题目链接 E - Random Swaps of Balls (atcoder.jp) Statements Problem Statement There are N − 1 N - 1 N−1 white balls and one black ball. These N N N balls are arranged in a row, with the black ball initially at the leftmost position. Takahashi will …

Qt之Pdb生成及Dump崩溃文件生成与调试(含注释和源码)

文章目录 一、Pdb生成及Dump文件使用示例图1.Pdb文件生成2.Dump文件调试3.参数不全Pdb生成的Dump文件调试 二、个人理解1.生成Pdb文件的方式2.Dump文件不生产的情况 三、源码Pro文件mian.cppMainWindowUi文件 总结 一、Pdb生成及Dump文件使用示例图 1.Pdb文件生成 下图先通过…

SpringMVC(1)——入门程序+流程分析

MVC都是哪三层?在Spring里面分别对应什么?SpringMVC的架构是什么? 我们使用Spring开发JavaWeb项目,一般都是BS架构,也就是Browser(浏览器)-Server(服务器)架构 这种架构…

MIG核使用APP接口,app_ref_req直接置0可以吗

这是一个关于MIG(Memory Interface Generator)核使用APP(Application)接口时,app_ref_req信号处理的重要问题。 app_ref_req信号的作用: 这是一个输入信号,允许应用程序请求执行刷新操作。当置高…

基于SpringBoot的超市进销存系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:SpringBoot框架 工具:MyEclipse、Tomcat 系统展示 首页 首页界面图 个人中心 个人中心…

爬虫技术在物联网数据采集中的应用

爬虫技术在物联网数据采集中的应用案例主要包括以下几个方面: 电商平台数据采集:例如,使用Python编写的网络爬虫可以用于爬取京东网页相关数据,如品牌、标题、价格、店铺等,并进行数据处理及可视化展示。这种方法不仅可…

ESP32实现UDP连接——micropython版本

代码: import network import socket import timedef wifiInit(name, port):ap network.WLAN(network.AP_IF) # 创建一个热点ap.config(essidname, authmodenetwork.AUTH_OPEN) # 无需密码ap.active(True) # 激活热点ip ap.ifconfig()[0] # 获取ip地址print(…

【D3.js in Action 3 精译】1.1.2 D3.js 的适用场景

译注 上一节中我们了解了 D3 诞生的技术背景——为了满足 Web 可访问数据的可视化需求。本节再来看看 D3.js 的适用场景是怎样的、在什么时候会考虑使用 D3.js。 1.1.2 D3.js 的适用场景 数据可视化领域正蓬勃发展,且备受青睐。过去十年间用于生成数据驱动图形的工…

【Android面试八股文】如何判断一个APP在前台还是后台?有哪几种方法?

文章目录 1. ActivityLifecycleCallbacks2. RunningTasks 和 RunningProcesses2.2.1 RunningTasks实现步骤示例代码解释与注意事项替代方案2.2 RunningProcesses实现步骤示例代码解释与注意事项总结3. 使用 Activity 生命周期方法在最新的 Android 开发环境中,推荐的做法是使用…

slot插槽详解及动态插槽的使用

slot插槽的作用: 让用户可以拓展组件,更好地去复用组件,并对其做定制化; slot的用法: 可以分为三类:默认插槽、具名插槽、作用域插槽 插槽用<slot>标签来确定渲染的位置,里面可以包含默认内容,如果没有提供插槽内容,则显示默认内容; 默认插槽: 子组件中…

动态代理和静态代理的区别

动态代理和静态代理在多个方面都有显著的区别。 首先&#xff0c;从代理的对象来看&#xff0c;静态代理通常只代理一个类&#xff0c;而动态代理则可以代理一个接口下的多个实现类。静态代理在编程时就已经明确知道要代理哪个类&#xff0c;而动态代理在运行时才决定要代理的…

Linux—进程与计划管理

目录 一、程序 二、进程 1、什么是进程 2、进程的特点 3、进程、线程、携程 3.1、进程 3.2、线程 3.3、携程 三、查看进程信息 1、ps -aux 2、ps -elf 3、top ​3.2、输出内容详解 3.2.1、输出第一部分解释 3.2.2、输出第二部分解释 4、pgrep 5、pstree 四、进…

【项目】论坛系统项目自动化测试

论坛系统项目自动化测试 前述一、脑图二、代码编写1.公共类InitAndEnd1.登录页面测试ForumLoginTest正常登录&#xff1a;异常登录&#xff1a; 3.注册页面测试ForumRegisterTest注册成功&#xff1a;注册失败&#xff1a; 4论坛列表页面测试ForumListTest登录状态下&#xff1…

1.spring入门案例

Spring 介绍 Spring是轻量级的开源的JavaEE框架。 Spring有两个核心部分&#xff1a;IOC和AOP IOC 控制反转&#xff0c;把创建对象过程交给Spring进行管理。 AOP 面向切面&#xff0c;不修改源代码进行功能增强。 Spring特点 1.方便解耦&#xff0c;简化开发。 2.AOP编…

算法体系-25 第二十五节:窗口内最大值或最小值的更新结构

一 滑动窗口设计知识点 滑动窗口是什么&#xff1f; 滑动窗口是一种想象出来的数据结构&#xff1a; 滑动窗口有左边界L和有边界R 在数组或者字符串或者一个序列上&#xff0c;记为S&#xff0c;窗口就是S[L..R]这一部分 L往右滑意味着一个样本出了窗口&#xff0c;R往右滑意味…

【MySQL】库的操作【创建和操纵】

文章目录 1.创建数据库1.1字符集和校验规则1.查看系统默认字符集以及校验规则2.查看数据库支持的字符集以及校验规则 1.2校验规则对数据库的影响1.创建一个数据库&#xff0c;校验规则使用utf8_ general_ ci[不区分大小写]2.创建一个数据库&#xff0c;校验规则使用utf8_ bin[区…

python基础之正则表达式

Python中的正则表达式&#xff08;regular expressions&#xff0c;简称regex&#xff09;是强大的字符串处理工具&#xff0c;用于搜索、匹配和替换字符串中的特定模式。Python通过 re 模块提供对正则表达式的支持。以下是对Python正则表达式的详细讲解。 基本概念和语法 导…