在信号调理中加入Teager-Kaiser能量算子(TKEO)提高了流行的肌电图(EMG)发病检测方法的准确性研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客    

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

准确识别肌肉活动的开始是人体运动生物力学分析的重要因素。在信号调理中加入Teager-Kaiser能量算子(TKEO)提高了流行的肌电图(EMG)发病检测方法的准确性。 非线性TKEO,由凯撒引入(凯撒1990;Kaiser 1993),测量由单个时变频率组成的信号的瞬时能量变化。 与其他起始检测方法相比,TKEO输出的一个优点是计算的能量来自信号的瞬时幅度和瞬时频率。因此,TKEO可以提高我们分析肌肉活动的能力,因为收缩过程中肌肉细胞膜的去极化会产生信号幅度和频率的快速波动。因此,TKEO强调了运动单元动作电位、幅度和频率的两个特性,从而改善了SNR,理论上开始检测变得更加准确。 Teager-Kaiser 算子的离散版本根据以下公式计算: y[n] = x[n]^{2/m} - (x[n-M]*x[n+M])^{1/m} m 是指数参数,M 是滞后参数,对于常规运算符,它们通常都等于 1。

Accurate identification of the onset of muscle activity is an important element in the biomechanical analysis of human movement.  Inclusion of the Teager–Kaiser energy operator (TKEO) in signal conditioning increases the accuracy of popular electromyography (EMG) onset detection methods.

The non-linear TKEO, introduced by Kaiser (Kaiser 1990; Kaiser 1993), measures instantaneous energy changes of signals composed of a single time-varying frequency.

One advantage of TKEO output, compared with other onset detection methods, is that the calculated energy is derived from instantaneous amplitude and instantaneous frequency of the signal. Therefore, TKEO may improve our ability to analyze muscle activity as depolarization of the muscle cell membrane during contraction produces rapid fluctuations in signal’s amplitude and frequency. TKEO, thus, emphasizes both properties of motor unit action potentials, amplitude and frequency, whereby SNR is improved and onset detection, theoretically, becomes more accurate.

The discrete version of the Teager-Kaiser operator is computed according to:

y[n] = x[n]^{2/m} - (x[n-M]*x[n+M])^{1/m}

with m the exponent parameter and M the lag parameter which both are usually equal to 1 for a conventional operator.

📚2 运行结果

部分代码:

%% 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') 

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]帅国彬,胡伟波.基于新型能量算子和多尺度熵的癫痫自动检测[J].计算机应用与软件,2023,40(03):137-141.

[2]黄梓幸,宋冬利,董俭雄,田光荣.基于改进VMD和Teager能量算子解调的轴箱轴承故障诊断方法[J].机械,2022,49(12):39-47.

🌈4 Matlab代码实现

内附详细安装教程,亲测搭建无问题。 一、乐步交易流程----购买乐步糖果 方法一:在卖方市场选择合适的卖家或者用手机号定向查询特定卖家 步骤一:点击首页下方【交易中心】。 步骤二:点击【卖单列表】,选择合适的卖家或者用手机号搜索特定卖家,确定卖家之后点击该卖家后方的【购买】。 步骤三:点击之后,系统会显示该卖家的收款信息。按照系统显示的收款信息付款,(付款备注交易订单号)付款完成之后上传凭证,等待卖家确认收款并且支付糖果。 方法二:挂单买入糖果 步骤一:点击首页下方【交易中心】。 步骤二:点击【买单列表】--【发布买单】,填写购买糖果单价、数量、交易密码,点击【确定】,买单发布,等待匹配成交。 二、乐步交易流程----出售乐步糖果 方法一:在买方市场选择合适的买家或者用手机号定向查询特定买家 步骤一:点击首页下方【交易中心】。 步骤二:点击【买单列表】,选择合适的买家或者用手机号搜索特定买家,确定买家之后点击该买家后方的【出售】。 步骤三:点击之后,系统会提示买家付款,买家按照系统提示的账号给卖家付款(付款备注交易订单号),付款完成之后上传凭证,等待卖家确定并且支付糖果。 方法二:挂单卖出糖果 步骤一:点击首页下方【交易中心】。 步骤二:点击【卖单列表】--【发布卖单】,填写出售糖果单价、数量、验证码、交易密码,点击【确定】,卖单发布,等待匹配成交。
### 华为OD机考数大雁真题及答案解析 #### 题目描述 给定一个字符串 `croakOfFrogs`,表示不同时间点听到的大雁叫声。每只大雁发出的声音序列严格遵循 "quack" 的顺序。返回能够产生所给字符串的最少大雁数量。如果该字符串不是有效的组合,则返回 `-1`。 条件如下: - 输入字符串长度范围:\( 1 \leq croakOfFrogs.length \leq 10^5 \) - 字符串中的字符仅限于 'q', 'u', 'a', 'c' 或者 'k' #### 解决方案 为了计算最小的大雁数量,可以维护五个计数器来跟踪当前正在发声的不同阶段的大雁数目。每当遇到一个新的起始字母(即 'q'),增加相应计数器;当完成一次完整的 “quack” 声音循环时减少这些计数器。还需要确保任何时候后面的字母不会超过前面的字母的数量,否则就不是一个合法的输入[^1]。 下面是具体的实现方法: ```cpp class Solution { public: int minNumberOfGeese(string croakOfGeese) { unordered_map<char, int> count{{'q', 0}, {'u', 0}, {'a', 0}, {'c', 0}, {'k', 0}}; int max_geese = 0; for (char ch : croakOfGeese) { ++count[ch]; // Check the order of characters to ensure validity. if (!(count['q'] >= count['u'] && count['u'] >= count['a'] && count['a'] >= count['c'] && count['c'] >= count['k'])) { return -1; } // Update maximum number of geese at any point in time. max_geese = std::max(max_geese, *std::max_element(count.begin(), count.end(), [](const auto& p1, const auto& p2) { return p1.second < p2.second; })); // When a full sequence is completed ('quack'), decrement all counters by one. if (ch == 'k') { for (auto& pair : count) { --pair.second; } } } // Ensure no incomplete sequences are left over. for (int val : count.values()) { if (val != 0) return -1; } return max_geese; } }; ``` 此代码通过遍历整个字符串并保持对每个声音部分的追踪来解决问题。它还验证了每次读取新字符后的合法性,并在检测到完整的一轮发音后重置计数器。最后检查是否有未完成的序列存在,如果有则返回错误码 `-1`,否则返回最大并发大雁数量作为结果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值