这篇文章给大家介绍怎么在Python中使用scipy实现一个信号滤波功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、网页空间、营销软件、网站建设、通渭网站维护、网站推广。Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通俗易懂、容易入门、功能强大,在许多领域中都有广泛的应用,例如最热门的大数据分析,人工智能,Web开发等。
首先我们使用到了scipy模块,可以通过下述命令进行安装:(我使用的Python==3.6)
pip install scipy
1).低通滤波
这里假设采样频率为1000hz,信号本身大的频率为500hz,要滤除400hz以上频率成分,即截至频率为400hz,则wn=2*400/1000=0.8。Wn=0.8
from scipy import signal b, a = signal.butter(8, 0.8, 'lowpass') #配置滤波器 8 表示滤波器的阶数 filtedData = signal.filtfilt(b, a, data) #data为要过滤的信号
2).高通滤波
这里假设采样频率为1000hz,信号本身大的频率为500hz,要滤除100hz以下频率成分,即截至频率为100hz,则wn=2*100/1000=0.2。Wn=0.2
from scipy import signal b, a = signal.butter(8, 0.2, 'highpass') #配置滤波器 8 表示滤波器的阶数 filtedData = signal.filtfilt(b, a, data) #data为要过滤的信号
3).带通滤波
这里假设采样频率为1000hz,信号本身大的频率为500hz,要滤除100hz以下,400hz以上频率成分,即截至频率为100,400hz,则wn1=2*100/1000=0.2,Wn1=0.2; wn2=2*400/1000=0.8,Wn2=0.8。Wn=[0.02,0.8]
from scipy import signal b, a = signal.butter(8, [0.2,0.8], 'bandpass') #配置滤波器 8 表示滤波器的阶数 filtedData = signal.filtfilt(b, a, data) #data为要过滤的信号
4).带阻滤波
这里假设采样频率为1000hz,信号本身大的频率为500hz,要滤除100hz以上,400hz以下频率成分,即截至频率为100,400hz,则wn1=2*100/1000=0.2,Wn1=0.2; wn2=2*400/1000=0.8,Wn2=0.8。Wn=[0.02,0.8],和带通相似,但是带通是保留中间,而带阻是去除。
from scipy import signal b, a = signal.butter(8, [0.2,0.8], 'bandstop') #配置滤波器 8 表示滤波器的阶数 filtedData = signal.filtfilt(b, a, data) #data为要过滤的信号
3.函数介绍
1.函数的介绍
(1).滤波函数
scipy.signal.filtfilt(b, a, x, axis=-1, padtype='odd', padlen=None, method='pad', irlen=None)
输入参数:
b: 滤波器的分子系数向量
a: 滤波器的分母系数向量
x: 要过滤的数据数组。(array型)
axis: 指定要过滤的数据数组x的轴
padtype: 必须是“奇数”、“偶数”、“常数”或“无”。这决定了用于过滤器应用的填充信号的扩展类型。{‘odd', ‘even', ‘constant', None}
padlen:在应用滤波器之前在轴两端延伸X的元素数目。此值必须小于要滤波元素个数- 1。(int型或None)
method:确定处理信号边缘的方法。当method为“pad”时,填充信号;填充类型padtype和padlen决定,irlen被忽略。当method为“gust”时,使用古斯塔夫森方法,而忽略padtype和padlen。{“pad” ,“gust”}
irlen:当method为“gust”时,irlen指定滤波器的脉冲响应的长度。如果irlen是None,则脉冲响应的任何部分都被忽略。对于长信号,指定irlen可以显著改善滤波器的性能。(int型或None)
输出参数:
y:滤波后的数据数组
(2).滤波器构造函数(仅介绍Butterworth滤波器)
scipy.signal.butter(N, Wn, btype='low', analog=False, output='ba')
输入参数:
N:滤波器的阶数
Wn:归一化截止频率。计算公式Wn=2*截止频率/采样频率。(注意:根据采样定理,采样频率要大于两倍的信号本身大的频率,才能还原信号。截止频率一定小于信号本身大的频率,所以Wn一定在0和1之间)。当构造带通滤波器或者带阻滤波器时,Wn为长度为2的列表。
btype : 滤波器类型{‘lowpass', ‘highpass', ‘bandpass', ‘bandstop'},
output : 输出类型{‘ba', ‘zpk', ‘sos'},
输出参数:
b,a: IIR滤波器的分子(b)和分母(a)多项式系数向量。output='ba'
z,p,k: IIR滤波器传递函数的零点、极点和系统增益. output= 'zpk'
sos: IIR滤波器的二阶截面表示。output= 'sos'
关于怎么在Python中使用scipy实现一个信号滤波功能就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款