基于Teager-Kaiser能量算子的肌电信号降噪方法(MATLAB)

185 篇文章 1 订阅
46 篇文章 0 订阅

Teager-Kaiser能量算子是一种非线性算子,它能有效提取信号的瞬时能量,对信号瞬时变化具有良好的时间分辨率。Teager-Kaiser能量算子只需信号三个采样点,即可快速跟踪信号的幅值和角频率变化,计算实现简单、运算量小。

clc
clear all 
close all

load emg4TKEO.mat %import data

%% Apply TKEO
emgfilt=emg; %initialize filtered signal
for i=2:length(emgfilt)-1 %do not consider first and last time points to avoid edge effects
    emgfilt(i)=emg(i)^2-emg(i-1)*emg(i+1); %TKEO
end

%% Convert to zscore
time0=dsearchn(emgtime',0); %find timepoint 0
emgZ=(emg-mean(emg(1:time0)))/std(emg(1:time0)); %zscore of original emg signal
emgfiltZ=(emgfilt-mean(emgfilt(1:time0)))/std(emgfilt(1:time0)); %zscore of filtered emg signal

%% Plot
emgnorm=emg./max(emg); %normalize original emg signal
emgfiltnorm=emgfilt./max(emgfilt); %normalize filtered emg signal
subplot(211)
plot(emgtime,emgnorm,'k')
hold on
plot(emgtime,emgfiltnorm,'r')
legend('Original','Filtered')
title('EMG energy (TKEO)')
xlabel('Time (ms)')
ylabel('Amplitude')
subplot(212)
plot(emgtime,emgZ,'k') %plot zscore of original emg signal
hold on
plot(emgtime,emgfiltZ,'r') %plot zscore of filtered emg signal
legend('Original','Filtered')
title('Zscore of EMG')
xlabel('Time (ms)')
ylabel('Zscore')

区别于传统的信号能量定义,Teager-Kaiser 能量算子在考虑信号幅值效应的基础上,还考虑了信号瞬时频率的影响,是幅值的平方与瞬时频率平方的乘积,且与信号初始相位无关,可以很好地跟随信号的幅值及频率的变化,并在一定程度上可避免由于运动误差以及信号串扰造成的干扰,提高肌电信号信噪比。

知乎学术咨询:https://www.zhihu.com/consult/people/792359672131756032?isMe=1
擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哥廷根数学学派

码字不易,且行且珍惜

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值