EMG信号低通滤波器Matlab仿真实现方法

一、理论基础

1.1巴特沃斯滤波器      

MATLAB函数“emg_sim()”:编写一个MATLAB功能,模拟以2048 Hz采样的emg信号。函数的输入应为模拟持续时间(秒)。第二个输入应用于指定相对于“干净”肌电信号RMS值的电力线干扰幅度。在包含60 Hz干扰之前,函数的一个输出应为模拟EMG向量(见下文)。该函数的另一个输出应该是模拟EMG向量,包括60 Hz干扰。如果您选择,可以使用其他参数。要模拟肌电信号,首先使用MATLAB函数“randn()”创建一个独立的零均值高斯随机向量。在使用rand()生成器之前,请确保使用系统时钟随机地对其进行状态(也称为“种子”/“状态”)。[请参见MATLAB帮助页中的randn(),以找到一个单行命令。]其次,设计一个截止频率为150 Hz的二阶低通巴特沃斯滤波器。第三,将随机序列通过巴特沃斯滤波器。这样做可以塑造随机序列,使其看起来像一个持续努力的肌电信号,其频谱类似于上图。第四,将适当缩放的60 Hz正弦波添加到信号中(以模拟电力线干扰)。第五,注意巴特沃斯过滤器将有一个与之相关的启动瞬态。这种瞬态降低了模拟的保真度。因此,由randn()创建的初始随机序列的长度必须等于所需的EMG序列长度加上启动瞬态的长度。在第五步中,“切断”第四阶段序列的启动瞬态。您的模拟已完成。注意,EMG信号的绝对缩放对于这个问题并不重要。仅EMG信号相对于60Hz干扰的相对振幅。由于肌电信号是随机的,通常最好将60 Hz干扰的幅度缩放到模拟“干净”肌电的RMS值(低通滤波后)。

使用matlab中自带的randn函数产生一组随机数,作为EMG信号,然后EMG信号的采样率为2048hz。这里随机数产生的随机数种子采用的机遇系统时钟的随机数种子。系统输入有两个,一个是仿真时间,单位为s,一个是干扰值,输出有两个,一个为EMG信号,一格式带60hz正弦干扰的EMG信号。系统的设计步骤如下所示:

首先使用randn产生一组随机数,然后设计一个低通的巴特沃斯滤波器,其截止频率为150hz,将建立的随机数EMG信号输入到巴特沃斯滤波器。再将滤波得到的信号添加一个60hz的sin信号作为干扰。从而实现函数一个主要功能。

由于信号只保留EMG信号中的150hz,而对于150hz之外的频率信号需要滤除,巴特沃斯(Butterworth)滤波器是一种具有最大平坦幅度响应的低通滤波器,它在通信领域里已有广泛应用,在电测中也具有广泛的用途,可以作检测信号的滤波器。

巴特沃斯低通滤波器的平方幅度响应为:

EMG信号的低通滤波器的matlab仿真实现_随机数

buttord和butter来设计巴特沃斯滤波器。buttord函数可在给定滤波器性能的情况下,选择巴特沃斯滤波器的阶数n和截止频率,从而可利用butter函数设计巴特沃斯滤波器的传递函数。

1.2 陷波器

陷波器是一种特殊的带阻滤波器,其阻带在理想情况下只有一个频率点,因此也被称为点阻滤波器。这种滤波器主要用于消除某个特定频率的干扰,由于陷波器频率特性的特殊性,它除了可采用双线性变换进行设计外,还可以采用所谓零极点配置的方法进行设计。

一个理想的陷波滤波器的频率特性要在消除的信号频率点处,其值等于零;而在其他频率点处,其值等于1。由于数字滤波器的频率特性就是其单位冲激响应在单位圆上的Z变换,因此只需要在单位圆上相应于所需带阻滤波器阻带位置的频率处设置零点,就可以使滤波器的频率特性在所需阻带频率处为零。但是仅仅进行零点设置只考虑到了滤波器的阻带特性。为了得到非常陡峭的过渡带和常数幅度的通带特性,必须在Z平面上为每一个零点再配置一个相应的极点。Z平面单位圆附近的零点会在滤波器幅频特性的相应频率处产生陷落,零点离单位圆越近,陷落越深;而Z平面单位圆附近的极点会在滤波器幅频特性的相应频率处产生凸峰,极点离单位圆越近,凸峰越高。因此在完成了零点的配置后,为了抵消零点引起的陷落对滤波器通带范围内幅频特性的影响,还需要再配置相应的极点,由于滤波器稳定性的要求,极点必需配置在单位圆内,显然极点离单位圆越近则极点对零点的抵消作用越明显,得到的滤波器的阻带就越窄,过渡带就越陡峭。

二、核心程序

登录后复制

clc;clear;close all;times                   = 1;power_line_interference = 1;order                   = 1;%function 1:generator EMG[EMG_vector60,EMG_vector] = emg_sim(times,power_line_interference);%function 2:notch_filterEMG_notch_Filter          = emg_notch60(EMG_vector60,order);%function 3EMG_notch                 = emg_freq_null(EMG_vector60);%function 4RMS                       = emg_compare(EMG_vector,EMG_notch);1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.



登录后复制

function EMG_notch_Filter = emg_notch60(EMG_vector60,order);%EMG_60hz:输入60hz的MEG信号%order   :notch滤波器的阶数fs = 2048;N  = length(EMG_vector60);Wp = [1 150]/1000; Ws = [59 61]/1000;Rp = 1; Rs = 15;[n,Wn]  = buttord(Wp,Ws,Rp,Rs);[b2,a2] = butter(order,Wn,'stop');figurefreqz(b2,a2,1000,2000)title('n=2 Butterworth Bandstop Filter')EMG_notch_Filter=filter(b2,a2,EMG_vector60);figure%加入一个60hz的sinsubplot(211);plot(EMG_vector60);title('EMG+sin');grid on;axis([0,N,1.2*min(EMG_vector60),1.2*max(EMG_vector60)]);subplot(212);plot(EMG_notch_Filter);title('EMG-sin');grid on;axis([0,N,1.2*min(EMG_notch_Filter),1.2*max(EMG_notch_Filter)]);1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.

三、测试结果

EMG信号的低通滤波器的matlab仿真实现_matlab_02

EMG信号的低通滤波器的matlab仿真实现_滤波器_03

EMG信号的低通滤波器的matlab仿真实现_滤波器_04

EMG信号的低通滤波器的matlab仿真实现_滤波器_05

EMG信号的低通滤波器的matlab仿真实现_EMG信号_06

EMG信号的低通滤波器的matlab仿真实现_陷波滤波器_07




免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空