这几天继续不断的看论文和写文章,而且还在射阳老家的书屋里面看了很多书,这可以帮助我排解脑中的郁闷!毕竟算法的进展过程中要死大量的脑细胞。死的再多,只要能出结果那也值,继续讲课!
之前在第六章 智能手环之技术应用(10)—心率算法的优化(LMS算法)文章中给出了LMS算法的函数程序,那么如何应用到具体信号的滤波过程中呢?一起来看程序吧!本文不仅给出理论仿真程序,还会结合理论仿真程序逐步的写出用于PPG信号自适应滤波的程序。两部分程序的比较学习会有助于大家对于理论的掌握!!!
本系列文章的产生伴随着研发过程的深入,所以程序的复杂度是逐渐增加的。强烈建议大家从头开始看起,慢慢的增加难度!突然看本篇,很多人应该理解不了!但本文给出的算法程序的针对性特别强也特别实用!
上菜了!
% example_lms_v1
% data:2021-10-25
%%% 程序说明
% 演示lms算法完成滤波的过程!
close all;
% 周期信号的产生
t = 0:99;
xs = 10*sin(0.5*t);
figure;
subplot(2,1,1);
plot(t,xs);grid;
ylabel(‘幅值’);
title(‘输入周期性信号’);
% 噪声信号的产生
randn(‘state’,sum(100*clock));
xn = randn(1,100);
subplot(2,1,2);
plot(t,xn);grid;
ylabel(‘幅值’);
xlabel(‘时间’);
title(‘随机噪声信号’);
%%% 信号滤波
xn = xs+xn; % 含有噪声的周期信号
xn = xn‘ ; % 输入信号序列
dn = xs’ ; % 预期结果序列
M = 20 ; % 滤波器的阶数
rho_max = max(eig(xn*xn‘)); % 输入信号相关矩阵的最大特征值
mu = rand()*(1/rho_max) ; % 收敛因子 0 《 mu 《 1/rho
[yn,W,en] = function_LMS(xn,dn,M,mu);
% 绘制滤波器输入信号
figure;
subplot(2,1,1);
plot(t,xn);
grid;
ylabel(’幅值‘);
xlabel(’时间‘);
title(’滤波器输入信号‘);
% 绘制自适应滤波器输出信号
subplot(2,1,2);
plot(t,yn);
grid;
ylabel(’幅值‘);
xlabel(’时间‘);
title(’自适应滤波器输出信号‘);
% 绘制自适应滤波器输出信号,预期输出信号和两者的误差
figure
plot(t,yn,’b‘,t,dn,’g‘,t,dn-yn,’r‘);
grid;
legend(’自适应滤波器输出‘,’预期输出‘,’误差‘);
ylabel(’幅值‘);
xlabel(’时间‘);
title(’自适应滤波器‘);
figure
plot(en);
grid;
那么如果不用已知信号作为期望信号,会有什么样的结果呢?这部分内容以后会详细讲,先把实际采集到的PPG信号的LMS滤波程序写出来,丑媳妇总要见公婆!理论联系实际!如果按照之前的写法,程序中就无法把滤波器输出的信号作为期望信号然后计算损失函数的值了!
只能改变函数的用法了!再联系到PPG信号中的实际应用,之前在应用程序中使用这种函数的方法肯定行不通!!!本文内容接近三千字,怎么这么长?因为后面有PPG信号的LMS滤波程序!
责任编辑:haq
全部0条评论
快来发表一下你的评论吧 !