zhujf 发表于 2019-10-8 13:25

求助delphi计算波形数据,感谢各位大神!

,小弟才入门,望各位大神帮帮忙,贴出代码!谢谢!

pzx521521 发表于 2019-10-8 13:53

你的源数据是啥
图片么? 还是其他数据?

zhujf 发表于 2019-10-8 14:06

pzx521521 发表于 2019-10-8 13:53
你的源数据是啥
图片么? 还是其他数据?

源数据是高速采集卡采集的数据

zhujf 发表于 2019-10-8 14:11

pzx521521 发表于 2019-10-8 13:53
你的源数据是啥
图片么? 还是其他数据?

function TMainForm.Calcdhj(Buff, buff1: array of Real; dataSize: integer): real; //buff为转速点,BUFF1为点火信号计算点火角
var
i, k: integer;
t3, d3, d2: array of integer;
dhjd: array of real;
t, t1: array of real;
Trig_Count: integer;
sumjd: real;
dataCount: byte;
begin
Trig_Count := 0;    //当前脉冲个数
dhjdbuff := 0;
for i := 0 to dataSize - 1 do
begin
    t := 0;
    t1 := 0;
end;
for i := 0 to 99 do
begin
    d2 := 0;
    d3 := 0;
    t3 := 0;
    dhjd := 0;
end;
for i := 0 to dataSize - 1 do
begin
    t1 := Buff;
    t := buff1;
end;            
for i := 0 to dataSize - 1 do
begin
    if (t1 > 0.6) and (t1 < 0.6) then //转速触发条件
    begin
      inc(Trig_Count);
      if Trig_Count > 255 then
      break;
      d2 := i;            
      if Trig_Count > 1 then
      begin
      inc(dhjdbuff);
      d3 := i - 1;
      end;
    end;
end;
sumjd := 0;
dataCount := 0;
for k := 2 to dhjdbuff do
begin
    for i := d2 to d3 do
      if (test.IcBuff < 4.4) then //红色触发信号
      begin
      t3 := i - d2;
      break;
      end;
    if t3 > 0 then
    begin
      dhjd := strtoFloat(FormatFloat('0.0', t3 / (d3 - d2) * 360))
    end;
end;
end;

pzx521521 发表于 2019-10-8 15:51

本帖最后由 pzx521521 于 2019-10-8 16:02 编辑

不知道 buff为转速点,BUFF1为点火信号计算点火角 理解的对不对, 没有实际数据和图片对照 特别是红色触发信号 你抄的地方不太对function TForm2.Calcdhj(Buff, buff1: array of Real; dataSize: integer): real;
//buff为转速点,BUFF1为点火信号计算点火角
var
i: integer;
arrA: array of real;
LenB, LenA: integer;
sumjd: real;//A长度的总和
Trig_Count: integer; //脉冲个数
Trig_NoRed_Count: integer;//没有红色信号的脉冲个数
begin
//初始化一些数据
sumjd := 0;
Trig_Count := 0;
Trig_NoRed_Count := 0;
//必须从1开始 因为有t1
for i := 1 to dataSize - 1 do
begin
          //转速触发条件 即蓝线开始的地方(B的开始)
    if (Buff > 0.6) and (Buff < 0.6) then
    begin
      //初始化B的长度和A的长度
      LenA := 0;
      LenB := 0;
      //脉冲个数+1
      Inc(Trig_Count);
          //转速结束触发条件 即蓝线结束的地方(B的结束)
    end else if (Buff > 0.6) and (Buff < 0.6) then
    begin
      //是否存在红色触发信号
      //不存在红色触发信号
      if LenA = 0 then
      Inc(Trig_NoRed_Count)
      else
      //存在红色触发信号
      begin
      //除数不能为0, 防止报错
      if LenB = 0 then Continue;
      //计算A的实际长度 并 统计所有A的实际长度(角度)
      sumjd := sumjd +LenA/LenB * 360;
      end
    end else //两个蓝线之间的部分(即遍历整个B的长度时)
    begin
      Inc(LenA);
      //红色触发信号出现的时候即A的长度
      //使LenB不等于0证明有红色触发信号
      //注意这个地方的修改, 我应该理解的不对
      if buff1 > 4.4 then
      LenB := LenA;
    end;
end;
//返回所有A的实际长度(角度)
Result := sumjd;
end;

zhujf 发表于 2019-10-8 16:53

pzx521521 发表于 2019-10-8 15:51
不知道 buff为转速点,BUFF1为点火信号计算点火角 理解的对不对, 没有实际数据和图片对照 特别是红色触发信 ...

非常感谢,我调试下!谢谢:handshake
页: [1]
查看完整版本: 求助delphi计算波形数据,感谢各位大神!