📄 serialtest.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 + -