scipy Matlab-style IIR 滤波器设计下(Elliptic \Bessel \IIR-notch\IIR-peak\IIR-comb)

在matlab里设计使用Bessel Filter(贝塞尔滤波器)进行数据降噪的简单例子 作为一个土木工程系的研究生,现在大家做数据处理也用得越来越多了,自己接触的东西也多。作为土木工程师,很大部分时间其实并不想弄清楚滤波器的原理,只是希望拿来用,拿来把自己采集到的数据降噪一下,拿来做个傅立叶分析看看结构的固有频率变没变。但是matlab自带的文档很多时候都默认大家知道滤波器的原理,很多专有名词搞得不太友好,所以在这里以问题解答的形式直接给出我在科研中遇到的一个简单的用贝塞尔滤波器的例... 阅读详情

1、Elliptic

椭圆滤波器也被称为Cauer或Zo lotta rev滤波器,它最大限度地提高了频率响应的通带和阻带之间的过渡速率,但却牺牲了两者的纹波,并增加了阶跃响应中的振铃。
当rp接近0时,椭圆滤波器变成切比雪夫II型滤波器(切比2)。当rs接近0时,它变成切比雪夫I型滤波器(切比1)。当两个都接近0时,它变成巴特沃思滤波器(butter)。
等波纹通带具有N个最大值或最小值(例如,一个5阶滤波器有3个最大值和2个最小值)。因此,对于奇数阶滤波器,DC增益是单位,或者-rp dB 为偶数阶滤波器。

接口:

scipy.signal.ellip(N, rp, rs, Wn, btype='low', analog=False, output='ba', fs=None)
"""
rp:float
在通带的单位增益下最大允许纹波(dB)

rsfloat
在阻带的最小衰减(dB)
"""

示例:

"""
Design a digital high-pass filter at 17 Hz to remove the 10 Hz tone, and apply it to the signal. (It’s recommended to use second-order sections format when filtering, to avoid numerical error with transfer function (ba) format):
"""
sos = signal.ellip(8, 1, 100, 17, 'hp', fs=1000, output='sos')
filtered = signal.sosfilt(sos, sig)
ax2.plot(t, filtered)
ax2.set_title('After 17 Hz high-pass filter')
ax2.axis([0, 1, -2, 2])
ax2.set_xlabel('Time [seconds]')
plt.tight_layout()
plt.show()

使用ellipord

"""
Design an analog highpass filter such that the passband is within 3 dB above 30 rad/s, while rejecting -60 dB at 10 rad/s. Plot its frequency response, showing the passband and stopband constraints in gray.
"""
N, Wn = signal.ellipord(30, 10, 3, 60, True)
b, a = signal.ellip(N, 3, 60, Wn, 'high', True)

2、Bessel/Thomson

也被称为汤姆逊滤波器,模拟贝塞尔滤波器具有最大平坦群延迟和最大线性相位响应,在阶跃响应中只有很少的振铃。1
贝塞尔本质上是一个模拟滤波器。该函数使用双线性变换生成数字贝塞尔滤波器,该变换不保留模拟滤波器的相位响应。因此,它仅在低于大约fs/4频率下近似正确。为了在较高频率下获得最大平坦群延迟,必须使用保相技术对模拟贝塞尔滤波器进行变换。

查看群延迟:

b, a = signal.bessel(5, 1/0.1, 'low', analog=True, norm='delay')
w, h = signal.freqs(b, a)
plt.figure()
plt.semilogx(w[1:], -np.diff(np.unwrap(np.angle(h)))/np.diff(w))
plt.axhline(0.1, color='red')  # 0.1 seconds group delay
plt.title('Bessel filter group delay')
plt.xlabel('Frequency [radians / second]')
plt.ylabel('Group delay [seconds]')
plt.margins(0, 0.1)
plt.grid(which='both', axis='both')
plt.show()

在这里插入图片描述

3、iirnotch2

陷波滤波器是一种带宽窄(高品质因数)的带阻滤波器。它排斥一个狭窄的频带,其余的频谱几乎没有变化。

接口:

scipy.signal.iirnotch(w0, Q, fs=2.0)
"""
Parameters
w0:float
Frequency to remove from a signal. If fs is specified, this is in the same units as fs. By default, it is a normalized scalar that must satisfy 0 < w0 < 1, with w0 = 1 corresponding to half of the sampling frequency.从信号中去除的频率。如果指定了fs,则其单位与fs相同。默认情况下,它是必须满足0<w0<1的归一化标量,w0=1对应于采样频率的一半。

Q:float
Quality factor. Dimensionless parameter that characterizes notch filter -3 dB bandwidth bw relative to its center frequency, Q = w0/bw.品质因数。表征陷波器的无量纲参数-3dB相对于其中心频率的带宽bw,Q=w0/bw

fs:float, optional
The sampling frequency of the digital system.数字系统的采样频率。


Returns
b, a:ndarray, ndarray
Numerator (b) and denominator (a) polynomials of the IIR filter.
"""

示例:

"""
Design and plot filter to remove the 60 Hz component from a signal sampled at 200 Hz, using a quality factor Q = 30
"""
from scipy import signal
import matplotlib.pyplot as plt
fs = 200.0  # Sample frequency (Hz)
f0 = 60.0  # Frequency to be removed from signal (Hz)
Q = 30.0  # Quality factor
# Design notch filter
b, a = signal.iirnotch(f0, Q, fs)
# Frequency response
freq, h = signal.freqz(b, a, fs=fs)
# Plot
fig, ax = plt.subplots(2, 1, figsize=(8, 6))
ax[0].plot(freq, 20*np.log10(abs(h)), color='blue')
ax[0].set_title("Frequency Response")
ax[0].set_ylabel("Amplitude (dB)", color='blue')
ax[0].set_xlim([0, 100])
ax[0].set_ylim([-25, 10])
ax[0].grid(True)
ax[1].plot(freq, np.unwrap(np.angle(h))*180/np.pi, color='green')
ax[1].set_ylabel("Angle (degrees)", color='green')
ax[1].set_xlabel("Frequency (Hz)")
ax[1].set_xlim([0, 100])
ax[1].set_yticks([-90, -60, -30, 0, 30, 60, 90])
ax[1].set_ylim([-90, 90])
ax[1].grid(True)
plt.show()

在这里插入图片描述

4、iirpeak2

设计二阶IIR峰值(谐振)数字滤波器。峰值滤波器是带宽窄(高品质因子)的带通滤波器.它在窄带之外拒绝组件。

接口:

scipy.signal.iirpeak(w0, Q, fs=2.0)# 含义和iirnotch一样

示例:

#Design and plot filter to remove the frequencies other than the 300 Hz component from a signal #sampled at 1000 Hz, using a quality factor Q = 30

from scipy import signal
import matplotlib.pyplot as plt
fs = 1000.0  # Sample frequency (Hz)
f0 = 300.0  # Frequency to be retained (Hz)
Q = 30.0  # Quality factor
# Design peak filter
b, a = signal.iirpeak(f0, Q, fs)
# Frequency response
freq, h = signal.freqz(b, a, fs=fs)
# Plot
fig, ax = plt.subplots(2, 1, figsize=(8, 6))
ax[0].plot(freq, 20*np.log10(np.maximum(abs(h), 1e-5)), color='blue')
ax[0].set_title("Frequency Response")
ax[0].set_ylabel("Amplitude (dB)", color='blue')
ax[0].set_xlim([0, 500])
ax[0].set_ylim([-50, 10])
ax[0].grid(True)
ax[1].plot(freq, np.unwrap(np.angle(h))*180/np.pi, color='green')
ax[1].set_ylabel("Angle (degrees)", color='green')
ax[1].set_xlabel("Frequency (Hz)")
ax[1].set_xlim([0, 500])
ax[1].set_yticks([-90, -60, -30, 0, 30, 60, 90])
ax[1].set_ylim([-90, 90])
ax[1].grid(True)
plt.show()

在这里插入图片描述

5、iircomb2

陷波梳状滤波器由具有窄带宽(高品质因数)的规则间隔带阻滤波器组成。每一个都排斥一个狭窄的频带,使其余的频谱几乎没有变化。
峰值梳状滤波器由具有窄带宽(高品质因数)的规则间隔带通滤波器组成。每个都拒绝一个狭窄的频带之外的组件。

实现的详细信息,请参阅2. 梳状滤波器的TF实现是数值稳定的,即使在高阶由于使用一个单一的重复极点,这将不会遭受精度损失。

接口:

scipy.signal.iircomb(w0, Q, ftype='notch', fs=2.0, *, pass_zero=False)
"""
Parameters

f:type{‘notch’, ‘peak’}
The type of comb filter generated by the function. If ‘notch’, then the Q factor applies to the notches. If ‘peak’, then the Q factor applies to the peaks. Default is ‘notch’.
函数生成的梳状滤波器的类型。如果是“凹口”,则Q因子应用于凹口。如果“峰值”,则Q因子应用于峰值。默认值为“槽口”。

pass_zero:bool, optional
If False (default), the notches (nulls) of the filter are centered on frequencies [0, w0, 2*w0, …], and the peaks are centered on the midpoints [w0/2, 3*w0/2, 5*w0/2, …]. If True, the peaks are centered on [0, w0, 2*w0, …] (passing zero frequency) and vice versa.
如果为False(默认值),则滤波器的凹口(零值)以频率【0,w0,2*w0,...】为中点,而峰值则以中点【w0/2,3*w2,5*wO/2,…】为中点。如果为真,则峰值以【0,w0,2*w0,...】为中点(通过零频率),反之亦然。

Returns
b, andarray, ndarray
Numerator (b) and denominator (a) polynomials of the IIR filter.

Raises
ValueError
If w0 is less than or equal to 0 or greater than or equal to fs/2, if fs is not divisible by w0, if ftype is not ‘notch’ or ‘peak’
"""

示例:

#Design and plot notching comb filter at 20 Hz for a signal sampled at 200 Hz, using quality factor #Q = 30

from scipy import signal
import matplotlib.pyplot as plt
fs = 200.0  # Sample frequency (Hz)
f0 = 20.0  # Frequency to be removed from signal (Hz)
Q = 30.0  # Quality factor
# Design notching comb filter
b, a = signal.iircomb(f0, Q, ftype='notch', fs=fs)
# Frequency response
freq, h = signal.freqz(b, a, fs=fs)
response = abs(h)
# To avoid divide by zero when graphing
response[response == 0] = 1e-20
# Plot
fig, ax = plt.subplots(2, 1, figsize=(8, 6), sharex=True)
ax[0].plot(freq, 20*np.log10(abs(response)), color='blue')
ax[0].set_title("Frequency Response")
ax[0].set_ylabel("Amplitude (dB)", color='blue')
ax[0].set_xlim([0, 100])
ax[0].set_ylim([-30, 10])
ax[0].grid(True)
ax[1].plot(freq, (np.angle(h)*180/np.pi+180)%360 - 180, color='green')
ax[1].set_ylabel("Angle (degrees)", color='green')
ax[1].set_xlabel("Frequency (Hz)")
ax[1].set_xlim([0, 100])
ax[1].set_yticks([-90, -60, -30, 0, 30, 60, 90])
ax[1].set_ylim([-90, 90])
ax[1].grid(True)
plt.show()

在这里插入图片描述

引用:


  1. Thomson, W.E., “Delay Networks having Maximally Flat Frequency Characteristics”, Proceedings of the Institution of Electrical Engineers, Part III, November 1949, Vol. 96, No. 44, pp. 487-490. ↩︎

  2. Sophocles J. Orfanidis, “Introduction To Signal Processing”, Prentice-Hall, 1996 ↩︎ ↩︎ ↩︎ ↩︎

巴特沃斯滤波器和陷波滤波器的Python实现(基于Scipy) 巴特沃斯滤波和陷波滤波在信号处理中很常见,很多论文中也会有所涉及,前者可以滤除高频段、低频段信号或者通过一定频率的信号,后者可用于滤除特定频率的信号,本人并非通信专业,在信号的理论知识方面比较匮乏,因此本文主要围绕代码实现展开。本人在查找资料的过程中,发现很多博客对函数的介绍都是一笔带过,很少展开说明,因此本文会比较详细说明各个函数的使用方法还有最终结果的实现效果,就当做是做个记录。 阅读详情

相关推荐

在Matlab中设计梳状滤波器

梳状滤波器之所以被称为梳状滤波器,是因为它的幅频特性曲线状如梳子。这是一类典型的数字滤波器,主要用来对频谱中特定频率“定点清除”。MATLAB中有专门梳状滤波器函数,编程很方便。这里根据自己解读过程整理一下,供大家参考。 一、梳状滤波器函数 1,[b, a] = iirnotch(Wo, BW, Ab) Wo:要清除频率; BW:带宽; Ab...

SeamusWEI的专栏 1万+

【Python 算法】信号处理通过陷波滤波器准确去除工频干扰

Q的值越大,带宽越小,滤波器越窄,抑制特定频率的效果越强。**滤波器的有限长度:**滤波器通常是有限长度的,而不是无限长度。当你将有限长度的滤波器应用于信号时,它会影响信号的边界处,引入额外的波动。带宽Q的值越大,滤波器的选择性越高,也就是滤除特定频率附近的信号时,对该频率的抑制会更强。带宽Q的值越小,滤波器的选择性越低,也就是滤除特定频率附近的信号时,对该频率的抑制会较弱。在信号处理中,滤波操作可能会引入一些边界效应,特别是在信号的开始和结束段,这种现象通常被称为"边界效应"或"边界伪像"。

高山 4929

PEAK FILTER & NOTCH filter

PEAK FILTER

stoneyyhit的专栏 1万+

matlab简单分析其他类型滤波器(陷波尖峰梳状半带希尔伯特)

其他类型滤波器 华中科技大学《数字信号分析理论实践》滤波器 学习总结记录 陷波滤波器 iirnotch Fs = 200; dt = 1.0/Fs; T = 2; N = T/dt; t = linspace(0,T,N); x1 = sin(2*pi*5*t)+sin(2*pi*50*t); subplot(411); plot(t,x1); P = fft(x1,N); Pyy =...

Never Give Up 4298

音频处理实战:如何用MATLAB快速设计贝塞尔滤波器(附完整代码)

本文针对音频信号处理中相位失真的关键问题,详细介绍了如何利用MATLAB快速设计并实现贝塞尔滤波器。文章通过对比巴特沃斯、切比雪夫等模拟滤波器,突出了贝塞尔滤波器在保持线性相位和恒定群延迟方面的核心优势,并提供了从参数计算、模拟原型设计到数字转换的完整实战代码,帮助开发者在音频抗混叠、DAC平滑等场景中有效保留信号波形。

w3x4y的博客 457

Matlab图像Notch陷波器的设计与仿真

在设计Notch陷波器时,可以使用Fdatool工具箱来自动设计一个Butterworth陷波器,然后将其转换为Notch陷波器。通过本文的介绍,读者可以了解到Notch陷波器的原理、设计和仿真方法,在数字图像处理中使用Notch陷波器进行频率域滤波处理。可以看到,在0.1处,Notch陷波器的增益为1,这是因为Notch陷波器在该频率处不对信号进行滤波处理。Notch陷波器是一种带阻滤波器,它的基本原理是在传递函数中加入一对共轭复极点,使得在该点处的频率成为一个不被滤波的频率。Notch陷波器的原理。

2301_79330511的博客 857

贝塞尔滤波器

贝塞尔滤波器 贝赛尔(Bessel)滤波器是具有最大平坦的群延迟(线性相位响应)的线性过滤器,即最平坦的幅度和相位响应,常用在音频天桥系统中。具有最平坦的幅度和相位响应。带通(通常为用户关注区域)的相位响应近乎呈线性。 1、 贝塞尔滤波器传递函数 Tn(s)=Bn(0)Bn(s/ω0)T_n(s) = \frac{B_n(0)}{B_n(s/\omega_0)}Tn​(s)=Bn​(s/ω0​)Bn​(0)​ 其中ω0\omega_0ω0​为期望截至频率 2、特性 贝塞尔滤波器的相移与频率关系如下图所示。.

Fxing的博客 5248

Notch滤波器的MATLAB实现

如果我们知道干扰信号的频率范围,就可以使用Notch滤波器来抑制这些干扰信号,从而得到更加准确的信号。其中,iirnotch函数的第一个参数是归一化的中心频率,第二个参数是归一化的带宽。通过使用该程序,我们可以轻松地抑制特定频率范围内的干扰信号,从而得到更加准确的信号。在此例中,我们使用采样频率为1000Hz,信号长度为1秒。在此例中,我们使用了FFT函数将信号转换为频域,同时得到了单侧频谱和频率向量。该函数将使用Notch滤波器对信号进行滤波,并返回滤波后的信号。Notch滤波器的MATLAB实现。

TechBurst的博客 889

常见滤波器简要对比介绍及Matlab实现----椭圆、切比雪夫、巴特沃斯、贝塞尔

常见滤波器简要介绍及Matlab实现 简要收集关于“椭圆、切比雪夫、巴特沃斯、贝塞尔”滤波器的使用与特点,不完善之处还请提出意见与谅解! 1.椭圆滤波器EllipticFilter ①椭圆滤波器又称考尔滤波器(Cauer filter),是在通带和阻带等波纹特性的一种滤波器,因...

cqfdcw的博客 9万+

基于matlab的图像notch陷波器设计与仿真

陷波滤波器指的是一种可以在某一个频率点迅速衰减输入信号,以达到阻碍此频率信号通过的滤波效果的滤波器。陷波滤波器属于带阻滤波器的一种,只是它的阻带非常狭窄,起阶数必须是二阶(含二阶)以上。陷波滤波器的设计是以模拟滤波器为原型, 通过一定变换转换为数字滤波器。陷波滤波器的设计方法有2 种:(1)依托模拟低通为设计原型, 利用模拟频率带阻变换法, 再利用双线性变换法将前面所设计的带阻滤波器数字化;(2)在频域进行直接设计的z 平面零极点法。陷波滤波器是带阻滤波器的一种,其阻带很窄,因此也称点阻滤波器。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 1242

Filters:贝塞尔滤波器-matlab开发

将模拟贝塞尔滤波器计算为多个 n 并显示图形

matlab besself函数 C实现

IIR滤波器 besself bessel besselap

CSharp_Beginner的博客 746

从零构建NVENC编码器:一个游戏开发者的实战手册

本文详细介绍了如何从零构建NVENC编码器,特别针对游戏开发者提供实战指南。内容涵盖NVENC基础概念、DirectX纹理捕获、异步编码优化及高级特性配置,帮助开发者高效集成硬件编码技术到游戏引擎中,实现高性能游戏录制和直播功能。重点解析了NVIDIA专用编码芯片的优势与API使用技巧。

weixin_29292431的博客 365

常见滤波器简要介绍及Matlab实现

                                         常见滤波器简要介绍及Matlab实现           &nbsp...

leekay123的博客 1万+

保姆级教程:在Windows 10/11上安装配置KNIME 5.8.0(含中文文本库更新)

本文提供在Windows 10/11系统上安装配置KNIME 5.8.0的详细指南,包括中文文本库更新和性能优化方案。从环境准备、安装流程到中文文本处理能力强化,逐步指导用户搭建高效的数据分析环境,特别针对国内网络环境和中文用户需求提供实用解决方案。

weixin_29081101的博客 668

银河麒麟鲲鹏aarch64架构安装docker和K8s

鲲鹏云服务器上安装docker-云社区-华为云 (huaweicloud.com) 这里我下载的版本是docker-18.09.3.tag docker 安装包地址:https://download.docker.com/linux/static/stable 配置system服务 在github对应分支的contrib/init/systemd/ 下面,提供了对应的docker.service以及docker.socket文件,可以直接拷贝到本地文件使用: 对应链接:https://github.c

qq_50007696的博客 9054

使用窗函数方法设计FIR滤波器与MATLAB代码分析

一,写在前面的话. 学习了以下链接,然后写出了MATLAB代码,在本文末,大家可以随便下载代码,进行尝试,我代码调试正常,可使用。 1. 如果你是初学者,建议你看一下这个链接https://blog.youkuaiyun.com/zhoufan900428/article/details/8969470 自学什么是窗函数,什么是滤波器,为啥要用窗函数,怎么计算一些值,怎么根据这些值选择窗函数。 2. ...

Smile_h_ahaha的博客 2万+

AgentScope 实战训练营-A2UI的完整实现:从概念到部署全流程

本文详细介绍了如何在AgentScope框架中实现Google的A2UI(Agent-to-Agent UI)协议,构建一个能生成可交互UI的智能体应用。文章涵盖了从环境准备、架构设计、核心代码实现到测试部署的完整流程,包括A2UI协议解析、技能系统、客户端实现、通信机制等核心技术点,适合AI Agent和前端开发人员学习参考。

program哲学 199

Matlab中freqs函数使用

freqs函数的功能是求解模拟滤波器的频率响应。

jk_101的博客 3万+

YOLOv8【第十章:多任务扩展深度篇·第18节】不规则工业缺陷分割——针对划痕、裂纹的 Seg 模型调优!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 3977

STM32开发 -- GPIO详解

之前有简单讲过GPIO工作模式和寄存器,还是有点没搞明白。这次需要全方位的看一下了。 一、数据手册 1、STM32F105RC引脚说明 可知:STM32F105RC 一共有4组IO口 一共16X3+3=51个IO GPIOA0~A15 GPIOB0~B15 GPIOC0~C15 GPIOD0~D2 2、程序定义 GPIO端口号 STM32F1...

不积跬步,无以至千里 5万+

matlab设计理想高斯巴特沃斯低通滤波器_巴特沃斯切比雪夫贝塞尔

看到这三个人的名字,学过模电的同学应该有点面熟,他们出现在有源滤波那一部分。要是学过《信号与系统》和《数字信号处理》课程的,对这三个名字就更熟了。这三个人是谁?是干啥的呢?斯蒂芬·巴特沃斯(Stephen Butterworth),是个英国工程师,他1930年在英国《无线电工程》期刊发表了一篇有关滤波器的论文,后来以他的名字命名这种滤波器。巴特沃斯滤波器也被称作最大平坦滤波器, 其特点是...

weixin_39831170的博客 1406

华为OD机试 - 矩形绘制 - 数组、坐标偏移(Python/JS/C/C++ 双机位C卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。实现一个简单的绘图模块,绘图模块仅支持矩形的绘制和擦除。 当新绘制的矩形与已有图形重叠时,对图形取并集; 当新擦除的矩形与已有图形重叠时,对图形取差集。 给定一系列绘制和擦除操作,计算最终图形的面积。第一行为操作数N,接下来的N行格式为:d x1

学Java,找哪吒 835
上一篇: scipy Matlab-style IIR 滤波器设计上(Butterworth\Chebyshev type I \Chebyshev type II )
下一篇: scipy短时傅里叶分析STFT
KPer_Yang
博客等级 码龄4年 281粉丝 181原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KPer_Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值