|
本帖最后由 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)+"次"); |
-
幅頻特性.png
(12 KB, 下載次數: 55)
下載附件
2022-12-23 19:10 上傳
振幅圖
-
代碼截圖.png
(22.69 KB, 下載次數: 59)
下載附件
2022-12-23 19:10 上傳
代碼截圖
-
-
DataFIR.zip
2022-12-23 19:09 上傳
點擊文件名下載附件
588 Bytes, 下載次數: 3
心電數據
|