news 2026/1/29 23:00:34

信号处理仿真:滤波器设计与仿真_24.滤波器设计与仿真在控制工程中的应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
信号处理仿真:滤波器设计与仿真_24.滤波器设计与仿真在控制工程中的应用

24. 滤波器设计与仿真在控制工程中的应用

在控制工程中,滤波器设计与仿真是一个非常重要的环节。滤波器可以用于信号的预处理、噪声的抑制、系统的稳定性分析以及控制律的实现等。本节将详细介绍滤波器在控制工程中的应用,包括常见的滤波器类型、设计方法以及仿真工具的使用。

24.1 常见的滤波器类型及其应用

在控制工程中,常用的滤波器类型包括低通滤波器、高通滤波器、带通滤波器和带阻滤波器。这些滤波器在不同的应用场景中发挥着重要的作用。

24.1.1 低通滤波器

低通滤波器允许低频信号通过,而抑制高频信号。在控制工程中,低通滤波器常用于信号平滑、噪声抑制以及系统的稳定性分析。

原理:
低通滤波器的频率响应特性是随着频率的增加,滤波器的增益逐渐降低。常见的低通滤波器有RC滤波器、巴特沃斯滤波器、切比雪夫滤波器等。其中,RC滤波器是最简单的低通滤波器,其传递函数为:
H(s)=11+RCs H(s) = \frac{1}{1 + RCs}H(s)=1+RCs1
其中,RRR是电阻,CCC是电容,sss是复频率变量。

应用:
在控制系统中,低通滤波器可以用于平滑输入信号,减少高频噪声的影响。例如,在PID控制器中,低通滤波器可以用于平滑误差信号,提高控制系统的稳定性。

例子:
假设我们有一个PID控制器,输入信号中包含高频噪声。我们可以使用低通滤波器来平滑输入信号。

importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.signalimportbutter,filtfilt# 定义PID控制器参数Kp=1.0Ki=0.1Kd=0.05# 生成带有高频噪声的输入信号t=np.linspace(0,10,1000)input_signal=np.sin(2*np.pi*t)+0.5*np.random.randn(t.size)# 设计低通滤波器defbutter_lowpass(cutoff,fs,order=5):nyq=0.5*fs normal_cutoff=cutoff/nyq b,a=butter(order,normal_cutoff,btype='low',analog=False)returnb,adefbutter_lowpass_filter(data,cutoff,fs,order=5):b,a=butter_lowpass(cutoff,fs,order=order)y=filtfilt(b,a,data)returny# 参数设置cutoff=3.0# 截止频率fs=100.0# 采样频率order=6# 滤波器阶数# 应用低通滤波器filtered_signal=butter_lowpass_filter(input_signal,cutoff,fs,order)# 绘制结果plt.figure(figsize=(10,5))plt.plot(t,input_signal,label='Input Signal with Noise')plt.plot(t,filtered_signal,label='Filtered Signal')plt.xlabel('Time [s]')plt.ylabel('Amplitude')plt.legend()plt.grid(True)plt.show()

描述:
在这个例子中,我们首先生成了一个带有高频噪声的正弦输入信号。然后,我们设计了一个截止频率为3 Hz的六阶低通滤波器,并使用scipy.signal库中的filtfilt函数对输入信号进行滤波。最后,我们绘制了原始信号和滤波后的信号,可以看出滤波后的信号更加平滑,高频噪声被有效抑制。

24.1.2 高通滤波器

高通滤波器允许高频信号通过,而抑制低频信号。在控制工程中,高通滤波器常用于信号的高频成分提取、去除直流分量以及动态信号的处理。

原理:
高通滤波器的频率响应特性是随着频率的增加,滤波器的增益逐渐增加。常见的高通滤波器有RC高通滤波器、巴特沃斯高通滤波器等。其中,RC高通滤波器的传递函数为:
H(s)=RCs1+RCs H(s) = \frac{RCs}{1 + RCs}H(s)=1+RCsRCs
其中,RRR是电阻,CCC是电容,sss是复频率变量。

应用:
在控制系统中,高通滤波器可以用于去除输入信号中的直流分量,提取高频动态信号。例如,在振动控制系统中,高通滤波器可以用于提取振动信号中的高频成分。

例子:
假设我们有一个包含直流分量和高频振动信号的输入信号。我们可以使用高通滤波器来去除直流分量,提取高频振动信号。

importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.signalimportbutter,filtfilt# 生成带有直流分量和高频振动信号的输入信号t=np.linspace(0,10,1000)input_signal=1.0+np.sin(2*np.pi*10*t)+0.5*np.random.randn(t.size)# 设计高通滤波器defbutter_highpass(cutoff,fs,order=5):nyq=0.5*fs normal_cutoff=cutoff/nyq b,a=butter(order,normal_cutoff,btype='high',analog=False)returnb,adefbutter_highpass_filter(data,cutoff,fs,order=5):b,a=butter_highpass(cutoff,fs,order=order)y=filtfilt(b,a,data)returny# 参数设置cutoff=5.0# 截止频率fs=100.0# 采样频率order=6# 滤波器阶数# 应用高通滤波器filtered_signal=butter_highpass_filter(input_signal,cutoff,fs,order)# 绘制结果plt.figure(figsize=(10,5))plt.plot(t,input_signal,label='Input Signal with DC and Noise')plt.plot(t,filtered_signal,label='Filtered Signal')plt.xlabel('Time [s]')plt.ylabel('Amplitude')plt.legend()plt.grid(True)plt.show()

描述:
在这个例子中,我们生成了一个包含1.0的直流分量和10 Hz的高频振动信号的输入信号。然后,我们设计了一个截止频率为5 Hz的六阶高通滤波器,并使用scipy.signal库中的filtfilt函数对输入信号进行滤波。最后,我们绘制了原始信号和滤波后的信号,可以看出滤波后的信号已经去除了直流分量,高频振动信号得到了保留。

24.1.3 带通滤波器

带通滤波器允许特定频带范围内的信号通过,而抑制其他频率的信号。在控制工程中,带通滤波器常用于信号的频带选择、特定频率成分的提取以及系统的频率响应分析。

原理:
带通滤波器的频率响应特性是在特定的频带范围内增益较大,而在其他频率范围内增益较小。常见的带通滤波器有巴特沃斯带通滤波器、切比雪夫带通滤波器等。其中,巴特沃斯带通滤波器的传递函数为:
H(s)=1(sω0)2n+(ω0s)2n H(s) = \frac{1}{\left(\frac{s}{\omega_0}\right)^{2n} + \left(\frac{\omega_0}{s}\right)^{2n}}H(s)=(ω0s)2n+(sω0)2n1
其中,ω0\omega_0ω0是中心频率,nnn是滤波器阶数。

应用:
在控制系统中,带通滤波器可以用于提取特定频率范围内的信号。例如,在音频处理中,带通滤波器可以用于提取人声或特定乐器的声音。

例子:
假设我们有一个包含多个频率成分的音频信号。我们可以使用带通滤波器来提取特定频率范围内的信号。

importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.signalimportbutter,filtfilt# 生成包含多个频率成分的音频信号t=np.linspace(0,10,1000)input_signal=np.sin(2*np.pi*5*t)+np.sin(2*np.pi*15*t)+0.5*np.random.randn(t.size)# 设计带通滤波器defbutter_bandpass(lowcut,highcut,fs,order=5):nyq=0.5*fs low=lowcut/nyq high=highcut/nyq b,a=butter(order,[low,high],btype='band',analog=False)returnb,adefbutter_bandpass_filter(data,lowcut,highcut,fs,order=5):b,a=butter_bandpass(lowcut,highcut,fs,order=order)y=filtfilt(b,a,data)returny# 参数设置lowcut=10.0# 低截止频率highcut=20.0# 高截止频率fs=100.0# 采样频率order=6# 滤波器阶数# 应用带通滤波器filtered_signal=butter_bandpass_filter(input_signal,lowcut,highcut,fs,order)# 绘制结果plt.figure(figsize=(10,5))plt.plot(t,input_signal,label='Input Signal with Multiple Frequencies')plt.plot(t,filtered_signal,label='Filtered Signal (10-20 Hz)')plt.xlabel('Time [s]')plt.ylabel('Amplitude')plt.legend()plt.grid(True)plt.show()

描述:
在这个例子中,我们生成了一个包含5 Hz、15 Hz和高频噪声的音频信号。然后,我们设计了一个通带为10 Hz到20 Hz的六阶带通滤波器,并使用scipy.signal库中的filtfilt函数对输入信号进行滤波。最后,我们绘制了原始信号和滤波后的信号,可以看出滤波后的信号主要保留了15 Hz的频率成分,其他频率成分被有效抑制。

24.1.4 带阻滤波器

带阻滤波器允许特定频带范围外的信号通过,而抑制特定频带范围内的信号。在控制工程中,带阻滤波器常用于信号的特定频率成分抑制、系统的频率响应分析以及噪声的抑制。

原理:
带阻滤波器的频率响应特性是在特定的频带范围内增益较小,而在其他频率范围内增益较大。常见的带阻滤波器有巴特沃斯带阻滤波器、切比雪夫带阻滤波器等。其中,巴特沃斯带阻滤波器的传递函数为:
H(s)=1(sω0)2n+(ω0s)2n+2 H(s) = \frac{1}{\left(\frac{s}{\omega_0}\right)^{2n} + \left(\frac{\omega_0}{s}\right)^{2n} + 2}H(s)=(ω0s)2n+(sω0)2n+21
其中,ω0\omega_0ω0是中心频率,nnn是滤波器阶数。

应用:
在控制系统中,带阻滤波器可以用于抑制特定频率范围内的噪声。例如,在电机控制中,带阻滤波器可以用于抑制特定频率的电磁干扰。

例子:
假设我们有一个包含多个频率成分的电机控制信号,其中有一个特定频率的电磁干扰。我们可以使用带阻滤波器来抑制该频率的干扰。

importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.signalimportbutter,filtfilt# 生成包含多个频率成分的电机控制信号t=np.linspace(0,10,1000)input_signal=np.sin(2*np.pi*5*t)+np.sin(2*np.pi*15*t)+0.5*np.random.randn(t.size)# 设计带阻滤波器defbutter_bandstop(lowcut,highcut,fs,order=5):nyq=0.5*fs low=lowcut/nyq high=highcut/nyq b,a=butter(order,[low,high],btype='bandstop',analog=False)returnb,adefbutter_bandstop_filter(data,lowcut,highcut,fs,order=5):b,a=butter_bandstop(lowcut,highcut,fs,order=order)y=filtfilt(b,a,data)returny# 参数设置lowcut=10.0# 低截止频率highcut=20.0# 高截止频率fs=100.0# 采样频率order=6# 滤波器阶数# 应用带阻滤波器filtered_signal=butter_bandstop_filter(input_signal,lowcut,highcut,fs,order)# 绘制结果plt.figure(figsize=(10,5))plt.plot(t,input_signal,label='Input Signal with Multiple Frequencies')plt.plot(t,filtered_signal,label='Filtered Signal (10-20 Hz Notch)')plt.xlabel('Time [s]')plt.ylabel('Amplitude')plt.legend()plt.grid(True)plt.show()

描述:
在这个例子中,我们生成了一个包含5 Hz、15 Hz和高频噪声的电机控制信号。然后,我们设计了一个通带为10 Hz到20 Hz的六阶带阻滤波器,并使用scipy.signal库中的filtfilt函数对输入信号进行滤波。最后,我们绘制了原始信号和滤波后的信号,可以看出滤波后的信号已经去除了15 Hz的频率成分,其他频率成分被保留。

24.2 滤波器设计方法

滤波器设计方法多种多样,常见的方法包括频率响应法、阶跃响应法、脉冲响应法等。在控制工程中,最常用的是频率响应法和阶跃响应法。

24.2.1 频率响应法

频率响应法是通过设计滤波器的频率响应特性来实现滤波器的设计。这种方法适用于需要精确控制滤波器在不同频率上的增益和相位的应用。

原理:
频率响应法通过定义滤波器在频率域上的传递函数来设计滤波器。常见的传递函数形式包括巴特沃斯、切比雪夫、贝塞尔等。这些传递函数可以通过解析方法或数值方法来求解。

应用:
在控制系统中,频率响应法常用于设计低通、高通、带通和带阻滤波器。例如,在飞行控制系统中,频率响应法可以用于设计低通滤波器来平滑飞行器的姿态信号。

例子:
假设我们需要设计一个巴特沃斯低通滤波器,其截止频率为5 Hz。我们可以使用scipy.signal库中的butter函数来设计滤波器。

importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.signalimportbutter,freqz# 参数设置cutoff=5.0# 截止频率fs=100.0# 采样频率order=6# 滤波器阶数# 设计巴特沃斯低通滤波器nyq=0.5*fs normal_cutoff=cutoff/nyq b,a=butter(order,normal_cutoff,btype='low',analog=False)# 绘制频率响应w,h=freqz(b,a,worN=8000)plt.figure(figsize=(10,5))plt.plot(0.5*fs*w/np.pi,np.abs(h),'b')plt.title('Frequency Response of a 6th Order Butterworth Low-pass Filter')plt.xlabel('Frequency [Hz]')plt.ylabel('Amplitude')plt.grid(True)plt.show()

描述:
在这个例子中,我们设计了一个截止频率为5 Hz的六阶巴特沃斯低通滤波器。使用scipy.signal库中的butter函数生成滤波器的系数,然后使用freqz函数绘制滤波器的频率响应。从图中可以看出,滤波器在5 Hz以下的频率范围内增益接近1,而在5 Hz以上的频率范围内增益迅速降低。

24.2.2 阶跃响应法

阶跃响应法是通过设计滤波器的阶跃响应特性来实现滤波器的设计。这种方法适用于需要精确控制滤波器在时域上的响应的应用。

原理:
阶跃响应法通过定义滤波器对阶跃输入的响应来设计滤波器。常见的阶跃响应包括一阶、二阶等。这些响应可以通过解析方法或数值方法来求解。

应用:
在控制系统中,阶跃响应法常用于设计低通滤波器和高通滤波器。例如,在温度控制系统中,阶跃响应法可以用于设计低通滤波器来平滑温度信号。

例子:
假设我们需要设计一个一阶低通滤波器,其时间常数为1秒。我们可以使用阶跃响应法来设计滤波器。

importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.signalimportlti,step# 参数设置tau=1.0# 时间常数# 定义一阶低通滤波器num=[1]den=[tau,1]system=lti(num,den)# 绘制阶跃响应t,y=step(system)plt.figure(figsize=(10,5))plt.plot(t,y,label='Step Response of a 1st Order Low-pass Filter')plt.title('Step Response of a 1st Order Low-pass Filter')plt.xlabel('Time [s]')plt.ylabel('Amplitude')plt.legend()plt.grid(True)plt.show()

描述:
在这个例子中,我们定义了一个时间常数为1秒的一阶低通滤波器。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/28 18:05:40

Excel精准匹配的利刃:EXACT函数实战教程——从大小写判断到多条件统计

当简单的等号无法满足你的匹配需求时,EXACT函数就是那把打开精准数据世界的钥匙。 在日常数据处理中,你是否遇到过这些困扰:需要严格区分大小写来比对产品编码或用户名?在统计时,需要将大小写不同的同一厂家数据分别处…

作者头像 李华
网站建设 2026/1/28 11:06:47

@PropertySource@ImportResource@Bean

一、核心定义与基础用法1. Value 注解Value 是 Spring 中用于零散地、直接地注入单个配置值的注解,支持 SpEL 表达式(Spring 表达式语言),通常作用在字段、方法参数或构造器参数上。java运行Component public class ValueDemo {//…

作者头像 李华
网站建设 2026/1/29 14:37:26

数据结构学习笔记

C 中常用数据结构可分为线性结构、树形结构、图形结构三大类,各类别包含的结构及实现方式如下: "一、 线性结构" 数据元素呈一对一的线性关系,实现方式以原生语法或标准库容器为主。 "数组" 实现:原生数组 ty…

作者头像 李华
网站建设 2026/1/29 3:10:25

学校教室多功能布局平面图在线设计的实用技巧和方法

在教育多元化发展的当下,学校教室早已不再是单一的“授课空间”,而是需要兼顾知识传授、小组协作、实践操作、活动开展等多重需求的多功能场景。一套科学合理的教室布局平面图,不仅能提升空间利用率,还能适配不同教学模式&#xf…

作者头像 李华
网站建设 2026/1/29 7:35:14

智能交通管理:实时路况优化与拥堵预测

一、引言 随着城市化进程的加速与机动车保有量的持续攀升,交通拥堵已成为制约城市发展、影响居民出行体验的核心痛点。传统交通管理模式依赖固定信号配时、人工调度与事后处置,面对潮汐车流、突发事故等动态场景时响应滞后,难以实现路网资源…

作者头像 李华
网站建设 2026/1/29 5:31:51

【Python自动化】不懂代码怎么批量修图?这款 AI 工具把“脚本思维”封装成了傻瓜式软件!

Python 自动化办公 零代码 批量图片处理 跨境电商工具 效率提升 AI翻译摘要在跨境电商圈,“自动化运营”已成为提升人效的关键。很多卖家都知道 Python 脚本可以实现图片的批量采集、OCR 识别和翻译,但对于绝大多数非技术背景的运营人员来说,…

作者头像 李华