|
本帖最后由 permanent 于 2022-12-23 19:11 编辑
现在要在频域用matlab做一个心率计算,我.m文件里是我在arduino滤波完以后的数据,我给这个数组存的变量名是DataFIR,然后我基本思路是先给这个数据去掉直流分量,然后用fft()这个函数给他做了一个傅里叶变换,然后找到最大值处对应的频率,乘以60就是我要的每分钟的心跳次数,但是运行结果差的太多了,竟然是327! ! !求助大佬看看我的程序是哪里有问题么! ! !改了好久了呜呜呜!!附件是心电数据,图片是代码截图和运行结果
clear;
fs=500;
L=fs;
load('DataFIR.mat')
x=DataFIR;
n=1:1:length(x);
y0=x(n)-mean(x);%去掉直流分量
y1=abs(fft(y0));
m = y1(1:length(y1)/2);
N= length(x);
% for i=1:length(m)
% if m(i)==max(m)%找峰值
% f=i*(L/N);
% end
% end
f=find(m==max(m))*L/N;
xinlv=round(f*60)
m = y1(1:length(y1));
x= (0:N-1)*(L/N);
figure;
plot(y0)
figure;
plot(x,m)
xlabel('Frequency (Hz)');ylabel('Magnitude (dB)');title('Filter output');
text(200,2000,"心率"+num2str(xinlv)+"次"); |
|