信号分析之心电信号处理

任选下面的一组数据,利用自适应滤波中LMS和RLS方法进行处理,分析不同阶数、步长及指数加权因子对滤波结果的影响。同时给出迭代次数与滤波器系数,迭代次数与均方误差之间的关系曲线。(20分)
(1)消除心电图的电源干扰(数据源∶x1子目录)
(序号为偶数)
(2)胎儿心电监护(数据源∶ x2子目录)
(序号为奇数)

解答:胎儿心电监护

图 4.1 胎儿心电监护原理图
胎儿心电监护原理:监测胎儿心电,需要将母亲的心音及背景干扰去除。母亲的心音强度通常是胎儿心音的 2-10 倍,肌肉活动及胎儿运动产生的背景干扰 也常常大于胎儿心音的强度。所以采用自适应对消的方法来监护胎儿心电,将母亲胸部的信号作为参考信号,主要包括母亲的胸部心音和背景噪声,母亲腹部取出的信号作为输入信号,包括母亲、胎儿心音和背景干扰。
系统是一个有信号分量泄露到参考输入端的自适应对消系统。希望的结果是对消后母亲的心电信号的强度小于胎儿的心电信号强度,且胎儿的心电信号要比较清楚。利用 Matlab 进行数据分析,首先将原始心电数据导入Matlab并绘制如下图所示的心电信号波形图。

绘制母亲心电信号Matlab 代码:close all; % 清除工作空间的所有变量,函数,和MEX文件
clear all;% 加载数据文件,并命名为Achest=load('chestt.txt');%读取胸部数据
abdomen=load('abdomenn.txt');%读取腹部数据
test_chest = chest.';
test_abdomen = abdomen.'; % 绘制txt文件第一列的数据
subplot(211);
plot(test_chest );
% 横坐标
xlabel('采样点数(个)');
% 纵坐标
ylabel('幅值(A)');
% 标题
title('胸部心电波形图');subplot(212);plot(test_abdomen );
% 横坐标
xlabel('采样点数(个)');
% 纵坐标
ylabel('幅值(A)');
% 标题
title('腹部心电波形图');

图 4.2 心电图

1)LMS滤波器

最小均方误差(LMS)算法是由Widrow和Hoff提出的,具有计算量小、易于实现等优点在实践中广泛应用。LMS算法的基本思想:调整滤波器自身的参数,使滤波器的输出信号与期望输出信号之间的均方误差最小,系统输出为有用信号的最佳估计。实质上LMS可以看成是一种随机梯度或者随机逼近算法,可以写成如下的基本迭代方程:

其中μ为步长因子,是控制稳定性和收敛速度的参量,X(k)表示第k时刻参考信号矢量,,k为迭代次数,M为滤波器的阶数。d(k)表示第k时刻的输入信号矢量,y(k)、e(k)分别表示第k时刻的输出信号与输出误差,W(k)表示k时刻权系数矢量,W(k)=[W(k,0),W(k,1)…W(k,M-1)]。从上式可以看出其结构简单、计算量小且稳定性好等优点,但固定步长的LMS算法在收敛速度、跟踪速率及权失调噪声之间的要求是相互矛盾的,为了克服其缺点,人们提出了各种变步长的LMS改进算法,主要是采用减小均方误差或者以某种规则基于时变步长因子跟踪信号的时变,其中有正规LMS算法(NLMS)、梯度自适应步长算法、自动增益控制自适应算法、符号-误差LMS算法、符号-数据LMS算法、数据复用LMS算法等。
自适应滤波器收敛的条件是。其中是输入信号的自相关矩阵R的最大特征值。μ的选取必须在收敛速度和失调之间取得较好的折中,既要具有较快的收敛速度,又要使稳态误差最小。它控制了算法稳定性和自适应速度,如果μ很小,算法的自适应速度会很慢;如果μ很大,算法会变得不稳定。
为了分析不同阶数对滤波结果的影响,设置滤波器阶数分别为 10、20、
30,同时步长固定设置为 0.05,对数据进行处理分析。在画图分析中仅画出前三个系数与迭代次数的关系曲线图。
LMS算法Matlab代码:

%%%LMS滤波器%%%%%%%%%%%%%%%
%%2022年6月20日%%
close all;
chest=load('chestt.txt');%读取胸部数据数据
abdomen=load('abdomenn.txt');%读取腹部数据数据
test_chest = chest'; %转置
test_abdomen = abdomen'; %转置
M = 10; %阶数可改为10,20,40
itr = 2000; %迭代次数2000
en = zeros(itr,1); % 误差序列初值
W = zeros(M,itr); % 权系数
mu = 0.05; % 步长因子可更改
s = zeros(itr,1); % 均方误差初值
% LMS 迭代
for k = M:itr
x = test_chest(k:-1:k-M+1); %胸部信号为参考信号
y = W(:,k-1).' * x;  %滤波处理后胸部信号
en(k) = test_abdomen(k) - y; %腹部信号减去滤波处理后胸部信号
W(:,k) = W(:,k-1) + 2 * mu * en(k) * x; %迭代
s(k) = s(k-1) + abs(en(k)).^2; %误差迭代
c(k) = (s(k)/k);
end
yn = inf * ones(size(test_chest));
for k = M:length(test_chest)
x= test_chest(k:-1:k-M+1);
yn(k) = W(:,end).' * x;
end
subplot(311);
plot((1:2000),test_abdomen-yn,'r',(1:2000),test_chest,'g');
legend('胎儿心电图','母亲心电图');xlabel('采样点数');ylabel('幅度');
subplot(312);
plot(c);
xlabel('迭代次数');ylabel('均方误差');
subplot(313);
plot(W(1,:),'r');hold on;
plot(W(2,:));
plot(W(3,:),'k');
xlabel('迭代次数');ylabel('滤波器系数');
legend('权限系 1','权限系 2','权限系 3');grid on;

当阶数M为10时:

图 4.3 a) 阶数为 10,步长为 0.05 时的胎儿心电图 b) 阶数为 10,步长为 0.05 时采样点数与均方误差关系曲线 c) 阶数为 10,步长为 0.05 时采样点数与滤波器系数关系曲线
当阶数M为20时:

图 4.4 a) 阶数为 20,步长为 0.05 时的心电图 b) 阶数为 20,步长为 0.05 时采样点数与均方误差关系曲线 c) 阶数为 20,步长为 0.05 时采样点数与滤波器系数关系曲线
当阶数M为40时:

图 4.5 a)阶数为 40,步长为 0.05 时的心电图 b) 阶数为 40,步长为 0.05 时采样点数与均方误差关系曲线 c) 阶数为40,步长为 0.05 时采样点数与滤波器系数关系曲线
由以上图可看出,当阶数增加时,胎儿心电信号幅值有一定增大,均方误差收敛速度变快,但是前期收敛稳定性较差,因此自适应滤波器的阶数取值并不是越大越好,不可任意选取,而是需要根据经验和实际仿真验证比较才能最终确定。当阶数大到一定程度时,收敛速度变化不明显了,而且还有可能引起系数迭代过程不收敛。
下面分析不同步长因子对滤波结果的影响,我们选取滤波器阶数固定为20 阶,同时步长分别设置为 0.05、0.01、0.1,对数据进行处理分析,步长为0.05时,图4.4已给出,其他两种情况如下图所示:
当步长为0.01时:

图 4.6 a) 阶数为 20,步长为 0.01 时的心电图 b) 阶数为 20,步长为 0.01 时采样点数与均方误差关系曲线 c) 阶数为20,步长为 0.01 时采样点数与滤波器系数关系曲线
当步长为0.1时:

图 4.7 a) 阶数为 20,步长为 0.1 时的心电图 b) 阶数为 20,步长为 0.1 时采样点数与均方误差关系曲线 c) 阶数为20,步长为 0.1 时采样点数与滤波器系数关系曲线
根据以上分析可以看出,当步长为0.1时,胎儿心电幅值更大,更为明显,步长影响系统的收敛速度和均方误差曲线的超调量。步长越大时从均方误差曲线图可以看出系统收敛速度变快,但是对应均方误差曲线超调量变大。另外步长越大,滤波性能越差。实际应用中应结合精度要求和收敛时间要求设置步长。

2)RLS滤波器

RLS(Recursive Least-Square)算法是通过矩阵求逆引理而导出的,它对输入信号的自相关矩阵的逆矩阵进行递推估计更新,其迭代公式如下:

上式中,n是递推次数,输入为x(n),P(n)为信号自相关矩阵的逆,g(n)为增益矢量,误差为e(n),期望输出为d(n),权重因子为λ。RLS算法能实现快速收敛,且其收敛速率不随输入向量x(n)平均相关矩阵R特征值的扩散度而改变。当工作于时变环境中时,这类算法具有极好的性能,但都以增加计算复杂度和稳定性为代价。
Matlab仿真分析:滤波器的阶数为20,初始化设置为P(0)=δ-1I,其中ߜδ=0.001,w(0)=wi=0,同时改变遗忘因子la,对la分别取 0.1,0.5,0.75、0.9,分别观察滤波结果。同 LMS 算法时一样,由于滤波器系数过多,在画图分析时只画出前三个滤波器的系数与迭代次数的曲线。分析结果如下图,可修改la值。


```c
RLS滤波Matlab代码:
%%%RLS滤波器%%%
%%2022.6.21%%
close all;
chest=load('chestt.txt');%读取胸部数据
abdomen=load('abdomenn.txt');%读取腹部数据
test_chest = chest.';
test_abdomen = abdomen.'; M = 20; %%%阶数
itr = 2000;
en = zeros(itr,1); % 误差序列
W = zeros(M,itr); % 权系数
s = zeros(itr,1); % 均方误差
la = 0.5; % %%可选取不同遗忘因子0.1,0.5,0.9
Rxx = eye(M) * 0.001;
for k = M:itr
x = test_chest(k:-1:k-M+1);y(k) = W(:,k).' * x;
K(:,k) = (Rxx * x)./(la + x.' * Rxx * x);
e(k) = test_abdomen(k) - W(:,k-1).' * x;
W(:,k) = W(:,k-1)+K(:,k) * e(k); %%权系数更新
Rxx = (Rxx - K(:,k) * x.' * Rxx)/la;
s(k) = sum(abs(e).^2); %均方误差
c(k) = (s(k)/k);
end ```c
```c
subplot(311);
plot((1:2000),test_

abdomen - y.','r',(1:2000),test_chest,'g');
legend('胎儿心电图','母亲心电图');xlabel('采样点数');ylabel('幅度'); grid on;
subplot(312);
plot(c);
xlabel('迭代次数');ylabel('均方误差'); grid on;
subplot(313);
plot(W(1,:),'r');hold on;plot(W(2,:));plot(W(3,:),'k');grid on;

采用RLS滤波器分析如下所示,遗忘因子为la=0.5。图 4.4  a) 遗忘因子为la=0.5心电图  b)采样点数与均方误差关系   c)采样点数与滤波器权系数关系
下面分析不同遗忘因子对滤波的影响:
遗忘因子为la=0.1时:图 4.9  a) 遗忘因子为0.1时的心电波形  b) 遗忘因子为0.1时均方误差与迭代次数关系
c) 遗忘因子为0.1时系数与迭代次数关系
当遗忘因子为la=0.75时:图 4.9 遗忘因子为0.75时心电图  b) 遗忘因子为0.75时均方差与迭代次数关系
c) 遗忘因子为0.75时系数与迭代次数关系
当遗忘因子为la=0.9时:图 4.10 遗忘因子为0.9时心电图  b) 遗忘因子为0.9时均方差与迭代次数关系
c) 遗忘因子为0.9时系数与迭代次数关系
根据以上仿真分析可看出,当遗忘因子为0.1、0.5、0.75和0.9时,胎儿心电信号幅值变化不大,都在0.2左右,但均方误差曲线不同。当遗忘因子在 0.9 时,均方误差逐渐收敛,为0.1时明显波动较大。总之,遗忘因子越小,系统的跟踪能力越强,同时对噪声越敏感;其值越大,系统跟踪能力减弱,但对噪声不敏感,收敛时估计误差也越小。根据经验,采用RLS算法时,一定要对la有个准确的取值,才能保证系统性能的最佳状态,所以一般文献要求la的取值范围为0.95-0.995。
总结:相比 LMS 算法和 RLS 算法,RLS 算法在迭代过程中产生的误差明显小于 LMS 算法,由此可以得到 RLS 在提取信号时,收敛速度快,估计精度高而且稳定性好,而 LMS 算法收敛速度慢,估计精度低而且权系数估计值因瞬时梯度估计围绕精确值波动较大,权噪声大,稳定性差。```bash

【信号分析之心电信号处理】相关推荐

  1. 模拟调制—DSB信号及生物电信号特性测量分析实验报告

    MATLAB仿真实验 在MATLAB 中编写程序,产生一个 DSB 信号(具体参数根据自己制定的实验方案设置),绘制信号的时域波形图和频谱结构波形图,并对 DSB 信号的数据统计特性进行分析.     ...

  2. matlab傅里叶变换去噪代码,小波的分析在心电信号去噪中应用(内附Matlab去噪源代码).ppt...

    求职应注意的礼仪 求职时最礼貌的修饰是淡妆 面试时最关键的神情是郑重 无论站还是坐,不能摇动和抖动 对话时目光不能游弋不定 要控制小动作 不要为掩饰紧张情绪而散淡 最优雅的礼仪修养是体现自然 以一种修 ...

  3. 【C4】基于深度学习的心电信号分析

    ★★★ 本文源自AI Studio社区精品项目,[点击此处]查看更多精品内容 >>> 基于深度学习的心电信号分析 一.项目背景 近年来,随着人工智能和算法的发展,以机器学习和深度学习 ...

  4. 基于matlab 的语音信号分析和处理,基于matlab_的语音信号分析和处理

    基于matlab_的语音信号分析和处理 1 基于MATLAB 的语音信号分析和处理 福建师范大学协和学院 信息技术系 电子信息科学与技术专 124122006028 王祯飞 指导老师 黄小芬[摘要]本 ...

  5. MIMIC-IV波形数据库之心电信号

    目录 前言 一.心电信号在现代医学中的重要性 1.心电信号的基本原理 2.心电图的构成 3.心电信号在生物医学工程技术中的应用 4.用于心电信号处理的数据分析工具 二.读取MIMIC-IV心电信号 1 ...

  6. 通信原理随机信号分析

    通信原理第二章 随机信号分析 一 随机过程 定义 测试n台性能相同的接收机,在同样条件下,不加信号测试其输出噪声,波形如图 (1)每一条曲线 ξi(t)\xi_i(t)ξi​(t) 都是一个随机起伏的 ...

  7. QPushButton 点击信号分析

    QPushButton 点击信号分析 QPushButton有三个很重要的信号跟点击有关 pressed clicked toggled 表面上看,pressed和clicked都会在点击按钮时触发, ...

  8. matlab fftshift_matlab下实现FFT信号分析

    奈奎斯特定理: 对于信号分析,我们需要掌握一个定理: 在进行模拟/数字信号的转换过程中,当采样频率 fs.max大于信号中最高频率 fmax 的 2 倍时(fs.max > 2fmax),采样之 ...

  9. matlab语音信号分析实验报告,DSP实验二 语音信号分析与处理,南京理工大学紫金学院实验报告,信号与系统...

    实验二语音信号分析与处理 学号姓名 注:1)此次实验作为<数字信号处理>课程实验成绩的重要依据,请同学们认真.独立完成,不得抄袭. 2)请在授课教师规定的时间内完成: 3)完成作业后,请以 ...

最新文章

  1. dp cf 20190615
  2. 技术图文:集合技术在求解算法题中的应用
  3. 简单的Java处理事务
  4. 原生js的attachEvent和addEventListener解决window.onload在一个页面只能执行一次的问题
  5. leetcode 65. 有效数字(正则表达式)
  6. Linux下安装nginx, php, php-fpm并配置
  7. a/a的4种链接方式
  8. 查询字符串某个字符的个数
  9. 图论 —— 最短路 —— Bellman-Ford 算法与 SPFA
  10. 一个新基民的感叹:人心不足蛇吞象
  11. python anaconda安装redis_Linux下安装python,redis
  12. linux内核的诞生时间,Linux内核诞生已经17年
  13. C# 海康人脸识别设备初开发(一)
  14. Java8 日期时间类
  15. NOIP模拟赛 czy的后宫3
  16. Excel制作+导出
  17. Asible简介及部署
  18. yum 私有仓库搭建
  19. 一、 镜头主要参数工业相机镜头的参数与选型
  20. 信息系统开发与管理 04757

热门文章

  1. java通过jstack命令查询日志深入理解
  2. 杭电ACM-LCY算法进阶培训班-专题训练(强连通分量)
  3. Object不能直接转成int
  4. 新闻推荐系统【DAY1】
  5. 一心多用多线程-线程池ThreadPoolExecutor-看这篇就够了
  6. 面试项目经理,这12个问题一定会被问到(建议收藏)
  7. 关于maven的创建简单的servlet
  8. 阿里云服务器购买合同怎么申请
  9. Android谷歌推送
  10. 将请求返回的图片转为Base64形式显示在页面上