首页 > 编程问答 >使用“scipy.signal.butter()”创建低通滤波器时,“阶数”和“临界频率”是什么

使用“scipy.signal.butter()”创建低通滤波器时,“阶数”和“临界频率”是什么

时间:2024-07-23 15:52:24浏览次数:17  
标签:python scipy signal-processing librosa

上下文:

我正在尝试创建一个低通滤波器来截止声音文件中 10khz 以上的频率。

import librosa
import scipy.signal as sig
import numpy as np
import matplotlib.pyplot as plt

filename = librosa.example('nutcracker')
y, sr = librosa.load(filename)

# modeled after example in scipy.signal docs:
sos = sig.butter(10, 11, btype='lowpass', analog=False, output='sos')
filtered = sig.sosfilt(sos, y)

现在,我知道低通滤波器的作用,但不知道它是如何实现的,也不知道它背后的数学原理。所以 scipy.signal.butter(N, Wn, ... ) 的前两个参数对我来说有点神秘:

N : int

滤波器的阶数。

Wn : array_like

临界频率或频率。对于低通和 高通滤波器,Wn 是标量;对于带通和带阻滤波器, Wn 是一个长度为 2 的序列。

起初我认为 Wn (被描述为“临界频率”)是滤波器的截止/阈值。但是,将其设置为超过 1 的任何值都会导致错误,告诉我该值必须介于 0 和 1 之间。

这是我的工作/研究:

  1. 谷歌搜索“低通滤波器临界频率”会产生很多有关的结果 截止频率 角频率 ,这确实看起来像我最初的“截止点”想法。

  2. 我还找到了一些计算截止频率的公式基于滤波器的“传递函数”,但显然低通滤波器有很多种类型,每种滤波器都可能具有不同的传递函数。

  3. 相关问题 谈论用于计算|的奈奎斯特频率| ||。我知道奈奎斯特采样率是多少,这显然是不同的。维基百科文章完全避免谈论奈奎斯特频率的概念。 Wn 我的问题:

显然,除了我正在学习的知识之外,我对信号处理几乎一无所知。请像我 5 岁一样解释一下:

的前两个参数是什么

  1. 更改这些参数如何在功能上改变过滤器? signal.butter()
  2. 我如何计算它们?
  3. How do I calculate them?

当然,让我们来分析一下巴特沃斯滤波器及其在 scipy.signal.butter() 中的应用。

想象一下这种情况: 你有一台播放各种频率声音的收音机。你只想听到低音,而不是那些尖锐的高音。这里就需要用到低通滤波器了。

  1. 截止频率(Wn): 这个参数就像在收音机上设定一个旋钮,告诉滤波器你想保留哪些频率。它表示“截止”点,高于此频率的声音会被衰减。在 scipy.signal.butter() 中,你需要以 数字频率 的形式提供截止频率,其范围在 0 到 1 之间(我们将稍后解释这一点)。

  2. 滤波器阶数(N): 现在,我们的收音机旋钮不像一个完美的、突然的截止点。它更像是一个逐渐减小的旋钮。阶数控制着“截止”的陡峭程度。

    • 阶数低(例如,1 或 2): 截止点比较平缓。一些高于你设定的截止频率的声音仍然可以通过,但音量会更低。
    • 阶数高(例如,5 或 10): 截止点非常陡峭。几乎所有高于截止频率的声音都被有效地阻挡了。

数字频率(快速解释):

你可能想知道为什么截止频率是从 0 到 1 而不是以赫兹(Hz)为单位?这是因为在数字信号处理中,我们使用 数字频率 ,它是相对于信号采样率的归一化频率。你可以把它想象成信号中可能出现的最高频率的比例。归一化公式为:

数字频率 = 模拟频率 / 采样率

例如,如果你想在 10kHz 的采样率下截止 5kHz,那么你的数字截止频率将是 5000 Hz / 10000 Hz = 0.5。

如何选择参数:

  1. 确定截止频率(以赫兹为单位): 在你处理音频的情况下,这将是你想保留的最高音频频率。例如,对于 10kHz 的截止频率,你将使用这个值。

  2. 将截止频率转换为数字频率: 将截止频率除以音频文件的采样率。例如,如果你的音频是 44.1kHz,而你的截止频率是 10kHz,那么你的数字频率将是 10000 Hz / 44100 Hz ≈ 0.23。

  3. 选择阶数:

    • 对于简单应用和较平滑的截止,从较低的阶数(例如,3 或 5)开始。
    • 如果你需要一个非常陡峭的截止,请增加阶数。但请注意,阶数越高,计算量越大,并且可能会引入更多的失真。

在你的代码中:

  • 你需要更正 Wn 以反映计算出的数字截止频率(如上所述)。
  • 从较低的阶数开始进行试验,然后根据需要进行调整,直到你对你音频输出的截止陡峭程度感到满意为止。

请记住,设计滤波器通常需要反复试验才能找到最佳参数。在你的情况下,从低阶数开始,并逐渐增加,直到你对你音频的 10kHz 截止频率感到满意为止。祝你好运,享受音频处理吧!

标签:python,scipy,signal-processing,librosa
From: 63320705

相关文章

  • 使用Python连接ftps服务器时nlst返回错误
    我可以使用TotalCommander登录服务器:ftps://publishedprices.co.il用户名:“奥舍拉德”密码为空并带有lftp-uosherad:publishedprices.co.il但是当我尝试登录并使用Python获取文件列表时nlst函数返回超时代码:fromftplibimportFTP_TLS......
  • 在我的 python 代码中,我无法使用 slixmpp 连接到 Openfire 服务器
    在我的python代码中,我无法连接到Openfire服务器。我想连接到OpenFire服务器我的代码是importthreadingimporttkinterastkfromtkinterimportsimpledialog,scrolledtextimportjsonimportloggingimportasynciofromslixmppimportClientXMPPcla......
  • 如何在Python中获取字符的unicode?
    想要获取中文或越南语的汉名和日文字符的unicode我已经尝试过这些代码text="......
  • 三种语言实现计算逆序对的数量(C++/Python/Java)
    题目给定一个长度为......
  • python项目中__init__.py是什么文件有什么作用
    __init__.py 文件在Python项目中的作用主要是将目录标识为一个Python包。它在包的初始化过程中起到了重要作用。具体来说,__init__.py 文件有以下几个功能:1.标识包:-当一个目录中包含 __init__.py 文件时,这个目录就被视为一个Python包。这样,Python解释器就能够识别......
  • 从零开始构建你的第一个Python Web应用
    在本文中,我们将带领你从零开始构建一个简单的PythonWeb应用。不需要任何先验知识,我们会一步步地指导你完成设置、框架选择、代码编写到部署的整个过程。无论你是Web开发新手还是希望扩展技能的老手,这篇文章都将为你提供一个实践操作的起点。一、前言随着互联网技术的飞速......
  • Python中的global关键字是如何工作的?
    在Python中,global关键字扮演着特殊而重要的角色,它主要用于在函数内部声明全局变量。理解global关键字的工作原理,首先需要明确Python中变量作用域的概念,以及为什么需要global关键字。下面,我将详细解释global关键字的工作机制,包括其作用、使用场景、注意事项,以及它在Python编......
  • Python中enumerate()函数
    Python中enumerate()函数的作用是什么?enumerate()函数在Python中是一个非常有用的内置函数,它用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。使用enumerate()可以使你在循环中获取每个元素的同时,也能......
  • 我无法解决 python 捕获脚本中的此错误
    defclick_folder(self,文件夹名称):尝试:#单击主文件夹main_folder=self.wait.until(EC.presence_of_element_located((By.XPATH,f"//div[contains(@class,'folders-text_block')]//div[text()='{folder_name}']")))main_folder.click()print......
  • 尝试从图像 url 中抓取图像(使用 python urllib ),但获取 html
    我尝试从以下网址获取图像。http://upic.me/i/fj/the_wonderful_mist_once_again_01.jpg我可以右键单击并另存为,但是当我尝试使用urlretrievelikeimporturllibimg_url='http://upic.me/i/fj/the_wonderful_mist_once_again_01.jpg'urllib.urlretriev......