scipy 窗函数进行设计FIR滤波器
创始人
2024-01-28 21:12:15
0

目录

    • method1:给定截止频率
      • 接口:
    • method2:给定期望的频率和增益
      • 接口
      • 示例

method1:给定截止频率

接口:

scipy.signal.firwin(numtaps, cutoff, width=None, window=‘hamming’, pass_zero=True, scale=True, nyq=None, fs=None)[source]
FIR滤波器设计采用窗口法。
这个函数计算一个有限脉冲响应滤波器的系数。滤波器会有线性相位;如果numtaps是奇数则为Type I,如果numtaps是偶数则为Type II。
Type II过滤器在Nyquist频率处总是响应为零,因此,如果在numtap为偶数的情况下调用firwin并具有右端位于Nyquist频率的通带,则会引发ValueError异常。


参数
numtaps: int
滤波器的长度(系数数目,即滤波器阶数+1)。如果通带包含奈奎斯特频率,则numtaps必须为奇数。


cutoff: float或1-D array_like
滤波器截止频率(单位与fs相同)或截止频率数组(即带边)。在后一种情况下,截止频率应该是正的,并且在0到fs/2之间单调增加。值0和fs/2不能包含在cutoff中。


width:float或None,optional
如果width不是None,那么假设它是Kaiser FIR滤波器设计中使用的过渡区域的近似宽度(用与fs相同的单位表示)。这种情况下,窗口参数被忽略。


window:string or tuple of string and parameter values, optional
想要使用的窗口。看到scipy.signal。Get_window用于Windows和所需参数的列表。


pass_zero{True, False, ’ bandpass ', ’ lowpass ', ’ highpass ', ’ bandstop '},可选
如果为True,则频率0处的增益(即“直流增益”)为1。False表示直流增益为0。也可以是所需过滤器类型的字符串参数(相当于IIR设计函数中的btype)。


scale:bool,可选
设置为True以缩放系数,使频率响应在某一频率上完全为单位。这个频率是:
0 (DC)如果第一个通带从0开始(即pass_zero为True)
如果第一通带结束于fs/2(即滤波器是单带高通滤波器),则fs/2(奈奎斯特频率);否则第一通带的中心


fs:float,可选
信号的采样频率。每个截止频率必须在0到fs/2之间。默认值为2。


返回值:
ndarray h (numtaps)
长度系数numtap FIR滤波器。


or ValueError
如果cutoff中的任何值小于或等于0或大于或等于fs/2,如果cutoff中的值不是严格单调递增的,或者如果numtaps是偶数但通带包含奈奎斯特频率。

示例:

# -*- coding: utf-8 -*-
from scipy import signalnumtaps = 3
f = 0.1
win = signal.firwin(numtaps, f)
print(win)
# array([ 0.06799017,  0.86401967,  0.06799017])
# Use a specific window function:win = signal.firwin(numtaps, f, window='nuttall')
print(win)
# array([  3.56607041e-04,   9.99286786e-01,   3.56607041e-04])# High-pass (‘stop’ from 0 to f):
fir = signal.firwin(numtaps, f, pass_zero=False)
print(fir)
# array([-0.00859313,  0.98281375, -0.00859313])# Band-pass:
f1, f2 = 0.1, 0.2
fir = signal.firwin(numtaps, [f1, f2], pass_zero=False)
print(fir)
# array([ 0.06301614,  0.88770441,  0.06301614])# Band-stop:
fir = signal.firwin(numtaps, [f1, f2])
print(fir)
# array([-0.00801395,  1.0160279 , -0.00801395])# Multi-band (passbands are [0, f1], [f2, f3] and [f4, 1]):
f3, f4 = 0.3, 0.4
fir = signal.firwin(numtaps, [f1, f2, f3, f4])
print(fir)
# array([-0.01376344,  1.02752689, -0.01376344])# Multi-band (passbands are [f1, f2] and [f3,f4]):
fir = signal.firwin(numtaps, [f1, f2, f3, f4], pass_zero=False)
print(fir)
# array([ 0.04890915,  0.91284326,  0.04890915])

method2:给定期望的频率和增益

接口

scipy.signal.firwin2(numtaps, freq, gain, nfreqs=None, window=‘hamming’, nyq=None, antisymmetric=False, fs=None)[source]
FIR滤波器设计采用窗口法。
从给定的频率和相应的增益增益,该函数构造一个具有线性相位和(近似)给定频率响应的FIR滤波器。


参数
numtaps:int
FIR滤波器中的轻拍次数。Numtaps必须小于nfreqs。


freq:array_like,一维
频率采样点。通常是0.0到1.0,1.0是Nyquist。奈奎斯特频率是一半fs。freq中的值必须是非递减的。一个值可以重复一次以实现不连续。freq的第一个值必须为0,最后一个值必须为fs/2。0和fs/2不能重复。


gain:array_like
滤波器在频率采样点处获得增益。根据筛选器类型,应用了某些获取值的约束,详细信息请参见Notes。


nfreqs:int,可选
用于构造滤波器的插值网格的大小。对于最有效的行为,这应该是2 + 1的幂(例如129,257等)。默认值是比不小于numtaps的2的最小次幂大1。Nfreqs必须大于numtap。


window:string或(string, float)或float,或None,可选
窗口函数的使用。默认是“hamming”。看到scipy.signal。Get_window获取可能值的完整列表。如果为None,则不应用窗口函数。


antisymmetric:bool,可选
产生的脉冲响应是否对称/反对称。参见Notes了解更多细节。


fs:float,可选
信号的采样频率。每个截止频率必须在0到fs/2之间。默认值为2。


返回
taps:ndarray
FIR滤波器的滤波系数,作为长度numtap的一维数组。
从给定的频率和增益集,期望的响应是在频域构造的。将反FFT应用于所需的响应以创建相关的卷积核,并返回该核的第一个numtaps系数,按窗口缩放。

note:
FIR滤波器将有线性相位。过滤器的类型由’ numtaps '的值和反对称标志决定。有四种可能的组合:
奇数numtap,反对称为False,产生I型过滤器
即使numtaps,反对称为False,类型II滤波器产生
奇数numtap,反对称为True,产生III型滤波器
即使numtap,反对称为True,产生IV型滤波器
除I型滤波器外,所有滤波器的幅度响应均受下列约束:
II型-在奈奎斯特频率处为零
III型 -零在零和奈奎斯特频率
IV型-在零频率处为零

示例

#A lowpass FIR filter with a response that is 1 on [0.0, 0.5], and that decreases linearly on [0.5, #1.0] from 1 to 0:from scipy import signal
taps = signal.firwin2(150, [0.0, 0.5, 1.0], [1.0, 1.0, 0.0])
print(taps[72:78])
# [-0.02286961 -0.06362756  0.57310236  0.57310236 -0.06362756 -0.02286961]

参考:
Signal processing (scipy.signal) — SciPy v1.9.3 Manual

相关内容

热门资讯

宁波附近的小型厂,浙江宁波小型...   老工神一个人来了!老工神一个人来了!老工神一个人来了!      宁波生鲜加工厂大量招聘50名1...
2020年哪些事业单位取消编制...   为帮助在孵企业有效防控经营管理中股权转让涉税风险,加强企业对公司股权转让知识的了解,增强风险防范...
实体经济是哪些行业,创业实体概...   这是一个粉丝的问题。在目前的经济形势下,工作工资低,创业风险大是事实。那么,对于目前千千的数百万...
如何巧妙跟老板说辞职,辞职去创...   文/米糖说教育      现在社会越来越重视00后的学历,现在00后的学历也开始工作,给很多公司...
第一创业明天涨跌分析,山西证券...         周六继续在山西晋南农村采风。在一家农家乐门口,看到一辆皮卡车在往车上搬药材,就停下来...
关于创业的文案,摆摊的文案 关...   1.难道不应该是:含着眼泪卖,学长?            2.你好,工科文艺姐,再见,工科文艺...
怎样录屏同时录人像 录屏同时可...   电脑录制屏可以录制电脑上的内容,比如精彩的直播,高清的剧情视频等。在电脑上录屏的时候,我们经常会...
餐饮创业创新计划书,餐饮创新创...   在“整体动线设计”中,专业设计师将根据招商运营商规划的商业风格政策和店铺地理位置,并参考经营场地...
长期股权投资大于注册资本,长期...   12月3日,资本状态获悉,方正证券(601901)公告显示,公司交易性金融资产和长期股权投资项下...
世界上所有人的头发乘起来等于多...   有一天给一个淘汰很久的手机充电,想整理一下录音机里可能遗漏的彩排录音或者创作动机。那一长串录音通...