⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serialtest.m

📁 使用C8051F实现脉搏及血氧饱和度测量 包括均值滤波
💻 M
字号:
function SerialTest
ser = serial('COM1','BaudRate',9600,'InputBufferSize',2048,'Timeout',1000);
fopen(ser)
Data=fread(ser,2048,'uint8')
fclose(ser)
%串口输入
datared=Data(1:length(Data)/2)'
dataired=Data(length(Data)/2+1:length(Data))'

%绘制原始数据
subplot(6,1,1)
plot(datared)
axis([1 length(datared) 0 255])
%绘制整形数据
x=(datared-min(datared)).*255/(max(datared)-min(datared))
y=zeros(1,length(x)+7)
for i=0:1:7
    temp=[zeros(1,i),x,zeros(1,7-i)]
    y=y+temp
end
y=round(y./8)
for i=1:1:7
    y(i)=x(i)
end
y=y( 1:length(x) )
% y=datared
subplot(6,1,2)
plot(y)
axis([1 length(y) 0 255])
%绘制微分阈值数据
s=zeros(1,length(y))
H=30
k=7
for i=k+1:length(y)
    if y(i-k)-y(i)>H
        s(i)=y(i-k)-y(i)
    end 
end
subplot(6,1,3)
plot(s)
axis([1 length(y) 0 max(s)+H/2])
%计算周期,极大极小值
d=0
j=1;
peakvalue=0;
for i=1:length(s)
    if s(i)>peakvalue
        peakvalue=s(i);
        d(j)=i;
    end
    if peakvalue>0 && s(i)<H
        peakvalue=0  
        j=j+1;
    end
end
td=0
for i=1:j-2
    td=td+d(i+1)-d(i)
end
FreqRed=round( 12000/( td/(length(d)-1) ) )

minvalue=255;
maxvalue=0;
minpos=0;
maxpos=0;
for i=1:length(d)-1
    minvalue(i)=255;
    maxvalue(i)=0;
    minpos(i)=0;
    maxpos(i)=0;
    for j=d(i):1:d(i+1)-1
        if y(j)<minvalue(i)
            minvalue(i)=y(j)
            minpos(i)=j
        end
        if y(j)>maxvalue(i)
            maxvalue(i)=y(j)
            maxpos(i)=j
        end
    end
end
dm=0
for i=1:length(maxpos)
    dm=dm+datared( maxpos(i) )-datared( minpos(i) )
end
AC_Red=dm./length(maxpos)
%绘制周期线
mar=zeros(1,length(y))
for i=1:length(d)
    mar(d(i))=y(d(i))
end
subplot(6,1,2)
hold on
stairs(mar,'Color','Green')
axis([1 length(y) 0 255])
%绘制极小值线
mar=zeros(1,length(y))
for i=1:length(d)-1
    mar(minpos(i))=y(minpos(i))
end
subplot(6,1,2)
hold on
stairs(mar,'Color','Yellow')
axis([1 length(y) 0 255])
%绘制极大值线
mar=zeros(1,length(y))
for i=1:length(d)-1
    mar(maxpos(i))=y(maxpos(i))
end
subplot(6,1,2)
hold on
stairs(mar,'Color','Red')
axis([1 length(y) 0 255])























%绘制原始数据
subplot(6,1,4)
plot(dataired)
axis([1 length(datared) 0 255])
%绘制整形数据
x=(dataired-min(dataired)).*255/(max(dataired)-min(dataired))
y=zeros(1,length(x)+7)
for i=0:1:7
    temp=[zeros(1,i),x,zeros(1,7-i)]
    y=y+temp
end
y=round(y./8)
for i=1:1:7
    y(i)=x(i)
end
y=y( 1:length(x) )
% y=dataired
subplot(6,1,5)
plot(y)
axis([1 length(y) 0 255])
%绘制微分阈值数据
s=zeros(1,length(y))
H=50
k=7
for i=k+1:length(y)
    if y(i-k)-y(i)>H
        s(i)=y(i-k)-y(i)
    end 
end
subplot(6,1,6)
plot(s)
axis([1 length(y) 0 max(s)+H/2])
%计算周期,极大极小值
d=0
j=1;
peakvalue=0;
for i=1:length(s)
    if s(i)>peakvalue
        peakvalue=s(i);
        d(j)=i;
    end
    if peakvalue>0 && s(i)<H
        peakvalue=0  
        j=j+1;
    end
end
td=0
for i=1:j-2
    td=td+d(i+1)-d(i)
end
FreqIRed=round( 12000/( td/(length(d)-1) ) )

minvalue=255;
maxvalue=0;
minpos=0;
maxpos=0;
for i=1:length(d)-1
    minvalue(i)=255;
    maxvalue(i)=0;
    minpos(i)=0;
    maxpos(i)=0;
    for j=d(i):1:d(i+1)-1
        if y(j)<minvalue(i)
            minvalue(i)=y(j)
            minpos(i)=j
        end
        if y(j)>maxvalue(i)
            maxvalue(i)=y(j)
            maxpos(i)=j
        end
    end
end
dm=0
for i=1:length(maxpos)
    dm=dm+dataired( maxpos(i) )-dataired( minpos(i) )
end
AC_IRed=dm./length(maxpos)
%绘制周期线
mar=zeros(1,length(y))
for i=1:length(d)
    mar(d(i))=y(d(i))
end
subplot(6,1,5)
hold on
stairs(mar,'Color','Green')
axis([1 length(y) 0 255])
%绘制极小值线
mar=zeros(1,length(y))
for i=1:length(d)-1
    mar(minpos(i))=y(minpos(i))
end
subplot(6,1,5)
hold on
stairs(mar,'Color','Yellow')
axis([1 length(y) 0 255])
%绘制极大值线
mar=zeros(1,length(y))
for i=1:length(d)-1
    mar(maxpos(i))=y(maxpos(i))
end
subplot(6,1,5)
hold on
stairs(mar,'Color','Red')
axis([1 length(y) 0 255])


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -