草庐IT

切比雪夫滤波器

FxingZh 2023-09-02 原文

切比雪夫滤波器

切比雪夫滤波器,又名“车比雪夫滤波器”,是在通带或阻带上频率响应幅度等波纹波动的滤波器。

1、 切比雪夫滤波器传递函数

∣ H n ( ω ) ∣ 2 = 1 1 + ϵ 2 T n 2 ω ω 0 |H_n(\omega)|^2 = \frac{1}{1+\epsilon^2{T_n}^2\frac{\omega}{\omega_0}} Hn(ω)2=1+ϵ2Tn2ω0ω1

其中 ω 0 \omega_0 ω0为期望截至频率,n为滤波器阶数。

2、切比雪夫多项式

V n ( ω ω c ) = { c o s ( n ∗ a r c c o s ( ω ω c ) ) ∣ ω ω c ∣ ≤ 1 c o s h ( n ∗ a r c c o s h ( ω ω c ) ) ∣ ω ω c ∣ > 1 V_n(\frac{\omega}{\omega_c})=\left\{\begin{matrix}cos(n*arccos(\frac{\omega}{\omega_c}))\quad|\frac{\omega}{\omega_c}|\leq1 \\ cosh(n*arccosh(\frac{\omega}{\omega_c}))\quad|\frac{\omega}{\omega_c}|>1 \end{matrix}\right. Vn(ωcω)={cos(narccos(ωcω))ωcω1cosh(narccosh(ωcω))ωcω>1

其中 ω c \omega_c ωc为期望截至频率,n为滤波器阶数。

下图为切比雪夫I型滤波器的振幅特性

n为奇数

n为偶数

2、特性

1)切比雪夫滤波器是在通带或阻带上频率响应幅度等波纹波动(通带平坦、阻带等波纹或是阻带平坦、通带等波纹)的滤波器,振幅特性在通带内是等波纹。

2)切比雪夫滤波器在过渡带比巴特沃斯滤波器的衰减快,但频率响应的幅频特性不如后者平坦。

3)切比雪夫滤波器和理想滤波器的频率响应曲线之间的误差最小,但是在通频带内存在幅度波动。

4)在通带(或称“通频带”)上频率响应幅度等波纹波动的滤波器称为“I型切比雪夫滤波器”,在阻带(或称“阻频带”)上频率响应幅度等波纹波动的滤波器称为“II型切比雪夫滤波器”

python函数介绍

scipy.signal.iirfilter(N, Wn, rp=None, rs=None, btype='band', analog=False, ftype='butter', output='ba', fs=None)

参数:
N:int  过滤器的顺序。

Wn:array_like  标量或长度为2的序列给出了临界频率(由norm参数定义)。对于模拟滤波器,Wn是角频率(例如rad /s)。

rp:float, 可选参数
对于Chebyshev和椭圆滤波器,可在通带中提供最大纹波。(db)

rs:float, 可选参数
对于切比雪夫和椭圆滤波器,在阻带中提供最小的衰减。(db)

btype:{‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’}, 可选参数
过滤器的类型。默认值为‘lowpass’。

analog:bool, 可选参数
如果为True,则返回一个模拟滤波器,否则返回一个数字滤波器。

ftype:str, 可选参数
设计的IIR滤波器的类型:{Butterworth :‘butter’, Chebyshev I :‘cheby1’, Chebyshev II :‘cheby2’, Cauer/elliptic:‘ellip’, Bessel/Thomson:‘bessel’}

output:{‘ba’, ‘zpk’, ‘sos’}, 可选参数
输出类型:分子/分母(‘ba’),pole-zero(‘zpk’)或second-order部分(‘sos’)。默认值为‘ba’。

fs:float  可选参数     数字系统的采样频率。
对于数字滤波器,Wn与fs的单位相同。默认情况下,fs为2 half-cycles /sample,因此将它们从0标准化为1,其中1是奈奎斯特频率。 (因此Wn在half-cycles /样本中。)

返回值:
b, a:ndarray,ndarray
IIR滤波器的分子(b)和分母(a)多项式。仅在以下情况下返回output='ba'。

z, p, k:ndarray,ndarray,float
IIR滤波器传递函数的零点,极点和系统增益。仅在以下情况下返回output='zpk'。

sos:ndarray
IIR滤波器的Second-order个部分表示。仅在以下情况下返回output=='sos'。

python例子

生成一个从50 Hz到200 Hz的17th-order Chebyshev II模拟带通滤波器,并绘制频率响应:

from scipy import signal
import matplotlib.pyplot as plt
import numpy as np

b, a = signal.iirfilter(17, [2*np.pi*50, 2*np.pi*200], rs=60,
                        btype='band', analog=True, ftype='cheby2')    
w, h = signal.freqs(b, a, 1000)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.semilogx(w / (2*np.pi), 20 * np.log10(np.maximum(abs(h), 1e-5)))
ax.set_title('Chebyshev Type II bandpass frequency response')
ax.set_xlabel('Frequency [Hz]')
ax.set_ylabel('Amplitude [dB]')
ax.axis((10, 1000, -100, 10))
ax.grid(which='both', axis='both')
plt.show()

最后附上matlab实现代码,代码来源Blog

%  Cheby1Filter.m
%  切比雪夫Ⅰ型滤波器的设计
%

clear;
close all;
clc;

fs = 1000; %Hz 采样频率
Ts = 1/fs;
N  = 1000; %序列长度
t = (0:N-1)*Ts;
delta_f = 1*fs/N;
f1 = 50;
f2 = 100;
f3 = 200;
f4 = 400;
x1 = 2*0.5*sin(2*pi*f1*t);
x2 = 2*0.5*sin(2*pi*f2*t);
x3 = 2*0.5*sin(2*pi*f3*t);
x4 = 2*0.5*sin(2*pi*f4*t);
x = x1 + x2 + x3 + x4; %待处理信号由四个分量组成

X = fftshift(abs(fft(x)))/N;
X_angle = fftshift(angle(fft(x)));
f = (-N/2:N/2-1)*delta_f;

figure(1);
subplot(3,1,1);
plot(t,x);
title('原信号');
subplot(3,1,2);
plot(f,X);
grid on;
title('原信号频谱幅度特性');
subplot(3,1,3);
plot(f,X_angle);
title('原信号频谱相位特性');
grid on;

%设计一个切比雪夫低通滤波器,要求把50Hz的频率分量保留,其他分量滤掉
wp = 55/(fs/2);  %通带截止频率,取50~100中间的值,并对其归一化
ws = 90/(fs/2);  %阻带截止频率,取50~100中间的值,并对其归一化
alpha_p = 3; %通带允许最大衰减为 db
alpha_s = 40;%阻带允许最小衰减为 db
%获取阶数和截止频率
[N1, wc1] = cheb1ord(wp, ws, alpha_p, alpha_s);
%获得转移函数系数
[b, a] = cheby1(N1,alpha_p,wc1,'low');
%滤波
filter_lp_s = filter(b,a,x);
X_lp_s = fftshift(abs(fft(filter_lp_s)))/N;
X_lp_s_angle = fftshift(angle(fft(filter_lp_s)));
figure(2);
freqz(b,a); %滤波器频谱特性
figure(3);
subplot(3,1,1);
plot(t,filter_lp_s);
grid on;
title('低通滤波后时域图形');
subplot(3,1,2);
plot(f,X_lp_s);
title('低通滤波后频域幅度特性');
subplot(3,1,3);
plot(f,X_lp_s_angle);
title('低通滤波后频域相位特性');



%设计一个高通滤波器,要求把400Hz的频率分量保留,其他分量滤掉
wp = 350/(fs/2);  %通带截止频率,取200~400中间的值,并对其归一化
ws = 380/(fs/2);  %阻带截止频率,取200~400中间的值,并对其归一化
alpha_p = 3; %通带允许最大衰减为  db
alpha_s = 20;%阻带允许最小衰减为  db
%获取阶数和截止频率
[N2, wc2] = cheb1ord( wp , ws , alpha_p , alpha_s);
%获得转移函数系数
[b, a] = cheby1(N2,alpha_p,wc2,'high');
%滤波
filter_hp_s = filter(b,a,x);
X_hp_s = fftshift(abs(fft(filter_hp_s)))/N;
X_hp_s_angle = fftshift(angle(fft(filter_hp_s)));
figure(4);
freqz(b,a); %滤波器频谱特性
figure(5);
subplot(3,1,1);
plot(t,filter_hp_s);
grid on;
title('高通滤波后时域图形');
subplot(3,1,2);
plot(f,X_hp_s);
title('高通滤波后频域幅度特性');
subplot(3,1,3);
plot(f,X_hp_s_angle);
title('高通滤波后频域相位特性');


%设计一个带通滤波器,要求把50Hz和400Hz的频率分量滤掉,其他分量保留
wp = [65 385] / (fs/2);  %通带截止频率,50~100、200~400中间各取一个值,并对其归一化
ws = [75 375] / (fs/2);  %阻带截止频率,50~100、200~400中间各取一个值,并对其归一化
alpha_p = 3; %通带允许最大衰减为  db
alpha_s = 20;%阻带允许最小衰减为  db
%获取阶数和截止频率
[N3, wn] = cheb1ord( wp , ws , alpha_p , alpha_s);
%获得转移函数系数
[b, a] = cheby1(N3,alpha_p,wn,'bandpass');
%滤波
filter_bp_s = filter(b,a,x);
X_bp_s = fftshift(abs(fft(filter_bp_s)))/N;
X_bp_s_angle = fftshift(angle(fft(filter_bp_s)));
figure(6);
freqz(b,a); %滤波器频谱特性
figure(7);
subplot(3,1,1);
plot(t,filter_bp_s);
grid on;
title('带通滤波后时域图形');
subplot(3,1,2);
plot(f,X_bp_s);
title('带通滤波后频域幅度特性');
subplot(3,1,3);
plot(f,X_bp_s_angle);
title('带通滤波后频域相位特性');


%设计一个带阻滤波器,要求把50Hz和400Hz的频率分量保留,其他分量滤掉
wp = [65 385 ] / (fs/2);  %通带截止频率?,50~100、200~400中间各取一个值,并对其归一化
ws = [75 375 ] / (fs/2);  %阻带截止频率?,50~100、200~400中间各取一个值,并对其归一化
alpha_p = 3; %通带允许最大衰减为  db
alpha_s = 20;%阻带允许最小衰减为  db
%获取阶数和截止频率
[N4, wn] = cheb1ord( wp , ws , alpha_p , alpha_s);
%获得转移函数系数
[b, a] = cheby1(N4,alpha_p,wn,'stop');
%滤波
filter_bs_s = filter(b,a,x);
X_bs_s = fftshift(abs(fft(filter_bs_s)))/N;
X_bs_s_angle = fftshift(angle(fft(filter_bs_s)));
figure(8);
freqz(b,a); %滤波器频谱特性
figure(9);
subplot(3,1,1);
plot(t,filter_bs_s);
grid on;
title('带阻滤波后时域图形');
subplot(3,1,2);
plot(f,X_bs_s);
title('带阻滤波后频域幅度特性');
subplot(3,1,3);
plot(f,X_bs_s_angle);

有关切比雪夫滤波器的更多相关文章

  1. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  2. 计算机视觉实践之角点检测--Python实现--sobel滤波--Harris矩阵--角点检测器R--非极大值抑制 - 2

    文章目录前言一、方法原理1.Harris角点检测2.Sobel滤波3.角点响应函数R二、代码实现1.**main函数**2.**corner_detect函数**三、结果对比1.不同检测方法(对比一下使用角点检测器R与H矩阵最小特征值)2.不同超参数k(使用角点检测器R,改变k值)3.非最大值抑制(对3x3的邻域范围内非最大值抑制)四、参考资料前言实现对图像的角点检测,编写Python程序能够对输入图像进行角点检测,并返回角点检测的结果,并且在可视化显示输出结果。而具体的文件和代码,在如下链接里:计算机视觉实践之角点检测Python实现使用的是pycharm,提前导入numpy和opencv库

  3. 长时间数据流的信号滤波处理——基于MATLAB的FIR滤波器设计(1) - 2

    背景对于任意一个场景,获取到的信号都是经过噪声污染过的,一些简单的加性噪声可以通过统计的特性进行滤除,而对于一些乘性的噪声,只能通过滤波进行滤除。在信号处理中,信号滤波会广泛使用。在做研究分析信号的特征时,直接读取到数据,然后分析特征;但是,要想解决实际场景中的问题,就需要一些工程化的思想,因为数据是实时产生的数据流,而滤波也需要实时计算。举个栗子:有一个5秒钟的音频信号,采样频率44100hz,需要滤波提取1500-3000hz频带的信号,假设实际中每次发出1秒钟的音频信号,以数据流的形式发送出来,共发送了5秒钟(实际是无限长的时间)。滤波器设计:基于MATLAB的FIR滤波器的设计音频信号

  4. 深入理解梅尔刻度、梅尔滤波器组和梅尔时频谱图 - 2

    前情提要短时傅里叶变换公式S(m,k)=∑n=1N−1x(n+mH)w(n)e−i2πkNnS(m,k)=\sum_{n=1}^{N-1}x(n+mH)w(n)e^{-i2\pi\frac{k}{N}n}S(m,k)=n=1∑N−1​x(n+mH)w(n)e−i2πNk​n其中,m是当前滤波器的序号,表征了当前的时间段,k是当前频率的序号,表征了当前正在对哪一频率的e−i2πkNne^{-i2\pi\frac{k}{N}n}e−i2πNk​n信号,寻找最佳的振幅和初相,w(n)是窗函数。更多关于短时傅里叶变换的知识,请参考深入理解傅里叶变换(四)。本文要讲解的梅尔时频谱图,需要有时频谱图的知识

  5. FIR滤波器设计(2)——Vivado调用IP核设计FIR滤波器 - 2

    本讲在Vivado调用FIR滤波器的IP核,使用上一讲中的matlab滤波器参数设计FIR滤波器,1. 新建工程(1) Create Project->RTLProject,一直Next直到选择器件,选择自己使用的器件;(2) 新建原理图文件,CreateBlockDesign;(3) 将上一讲中从 MATLAB 中导出的 FIR_BPF_99_1_5M.coe 文件放在新建工程后的工程目录下; 2. 添加IP核(1)加入FIR的IP核,在新建的原理图文件design_1中点击 1 处的加号,会弹出对话框

  6. STM32示波器设计 - 2

    目录前言1、硬件模块2、示波器基础知识2.1当头一棒就是,波形的概念2.2第二就是需要观察的波形参数2.3第三就是示波器参数2.3.1采样率2.3.2带宽2.3.4刷新率3、ADC采集和DAC输出3.1ADC采集实现3.1.1配置ADC采集为定时触发DMA采集模式3.1.2配置ADC关联的定时器3.1.3转换成有效值3.2DAC波形输出3.2.1选择定时器触发3.2.2配置定时器3.2.3生成波形数据4、波形刷新方案4.1初始化流程4.2生成波形数据4.3波形刷新方案1:消隐一条线,画当前线,而不是消隐完再画线方案2:特殊处理网格点方案3:计算像素点,整屏刷新5、触发模式6、存储深度前言出于产

  7. 基于Matlab中Simulink生成FPGA-Verilog语言及联合Vivado的仿真(以卡尔曼-Kalman滤波器为例) - 2

    目录一、简介二、在Simulink中生成Verilog语言1、在Simulink中建立Kalman滤波器仿真2、将Kalman滤波器部分打包3、生成Verilog程序3.1、参数配置3.2、HDLCode代码生成三、Vivado中实现Kalman滤波仿真1、在Vivado中创建工程并将Kalman.v与Kalman_tb.v文件添加到工程中2、在Matlab中生成波形文件,代码如下3、重写tb仿真文件4、Vivado中仿真编译四、小结一、简介  此内容基于博文:基于MatlabHdlCoder实现FPGA程序开发(卡尔曼滤波算法实现)实现,Simulink仿真构建参考于上链接中。  本博文解决

  8. 一阶低通滤波的C语言实现(简单易移植) - 2

    一阶低通滤波的C语言实现0引言1一阶低通滤波器模型2matlab实现2.1matlab代码2.2总结3c语言实现4matlab查看波形频率(快速傅里叶变换,FFT)0引言一阶低通滤波器(LowPassFilter,LPF),核心参数为截止频率fc,该算法可以保留截止频率以内的信号,而衰减截止频率之外的信号。主要用于去除高频噪声。1一阶低通滤波器模型一阶低通滤波公式如下:也可以写作:其中:参数说明:y(n)为本次滤波输出值,y(n-1)为上次滤波输出值,x(n)为本次采样值。Ts为采样周期,fc为截止频率。α范围为[0,1]2matlab实现我们假设,现在有一个信号,它包含了频率为1Hz(幅值为

  9. 了解卡尔曼滤波器4--非线性状态估算器(EKF,UKF,PF) - 2

            一般来说,我们希望我们的生活是线性的,就像这条线,这可能表示成功、收入或者幸福。但实际上,生活并不是线性的,它充满了起伏,有时甚至更复杂。        如果您是工程师,您经常会需要处理非线性系统,为了帮助您,我们将讨论非线性状态估算器。在之前的文章中,我们使用简化的线性汽车模型来讨论卡尔曼滤波器的状态估算。        但是,如果系统建模时考虑到非线性,比如道路摩擦,则状态转换函数变为非线性。在这里,噪声被线性地加入了系统,但也有可能噪声并非线性加进来。在一般系统中,无论状态转换函数还是观测函数,甚至两者都可能是非线性的。    对于所有这些情况,我们需要使用非线性状态估算

  10. javascript - 实现卡尔曼滤波器以平滑来自 deviceOrientation API 的数据 - 2

    我正在尝试平滑从deviceOrientationAPI获取的数据,以便在浏览器中创建GoogleCardboard应用程序。我正在将加速度计数据直接传输到ThreeJs相机旋转中,但我们在信号中发现了很多噪声,这导致View抖动。有人建议卡尔曼滤波器作为平滑信号处理噪声的最佳方法,我在gitHub上找到了这个简单的Javascript库https://github.com/itamarwe/kalman然而,它在文档上确实很简单。我知道我需要通过提供一个向量和3个矩阵作为参数来创建卡尔曼模型,然后在一段时间内再次使用向量和矩阵作为参数更新模型。我还了解到,卡尔曼滤波器方程有几个不同的

随机推荐