classdef DoubleComper < handle
properties
%% 比较器实例
Comper1_Point
Comper2_Point
%% 比较器相关参数
DoubleComperMap % 输出值
len % 长度
RawData1 % 频点1 原始数据
RawData2 % 频点2 原始数据
%% 频点1 基础比较器相关参数
% 阈值相关
Comper1_MAXIMUM_VALUE_OF_BURRS = 2; % 毛刺的最大值
Comper1_TOUCH_THRESHOLD = 5; % 触摸阈值
Comper1_CONFIRM_THE_TIME_SLICE_THRESHOLD = 3; % 确认稳定的触摸阈值
% 确认参数相关
Comper1_TIME_SLICE_CONFIRMATION_TIMES = 5; % 时间片确认次数阈值
Comper1_THE_THRESHOLD_FOR_THE_OSCILLATING_FIFO = 14; % 震荡FIFO确认的阈值
Comper1_IDLE_FIFO_THRESHOLD = 9; % 空闲FIFO确认的阈值
Comper1_MAXIMUM_VALUE_CONFIRMATION_TIME = 3; % 最大值确认次数阈值
Comper1_MINIMUM_STABLE_FREQUENCY = 10; % 确认稳定的次数阈值
% 窗口大小
Comper1_THE_SIZE_OF_THE_OSCILLATING_FIFO = 16; % 震荡FIFO的窗口大小
Comper1_IDLE_FIFO_WINDOW_TIME = 6; % 空闲FIFO的窗口大小
% 时间相关
Comper1_LONGEST_INITIAL_DETECTION_TIME = 48; % 最长初次检测时间
Comper1_LONGEST_MATCH_WAITING_TIME = 80; % 最长匹配等待时间
Comper1_COOLING_TIME_AFTER_TOUCH = 25; % 触摸后冷却时间
Comper1_MAXIMUM_LONG_PRESS_DURATION = uint16(2000/7) % 最长长按时间
%% 频点2 基础比较器相关参数
% 阈值相关
Comper2_MAXIMUM_VALUE_OF_BURRS = 2; % 毛刺的最大值
Comper2_TOUCH_THRESHOLD = 5; % 触摸阈值
Comper2_CONFIRM_THE_TIME_SLICE_THRESHOLD = 3; % 确认稳定的触摸阈值
% 确认参数相关
Comper2_TIME_SLICE_CONFIRMATION_TIMES = 5; % 时间片确认次数阈值
Comper2_THE_THRESHOLD_FOR_THE_OSCILLATING_FIFO = 14; % 震荡FIFO确认的阈值
Comper2_IDLE_FIFO_THRESHOLD = 9; % 空闲FIFO确认的阈值
Comper2_MAXIMUM_VALUE_CONFIRMATION_TIME = 3; % 最大值确认次数阈值
Comper2_MINIMUM_STABLE_FREQUENCY = 10; % 确认稳定的次数阈值
% 窗口大小
Comper2_THE_SIZE_OF_THE_OSCILLATING_FIFO = 16; % 震荡FIFO的窗口大小
Comper2_IDLE_FIFO_WINDOW_TIME = 6; % 空闲FIFO的窗口大小
% 时间相关
Comper2_LONGEST_INITIAL_DETECTION_TIME = 48; % 最长初次检测时间
Comper2_LONGEST_MATCH_WAITING_TIME = 80; % 最长匹配等待时间
Comper2_COOLING_TIME_AFTER_TOUCH = 25; % 触摸后冷却时间
Comper2_MAXIMUM_LONG_PRESS_DURATION = uint16(2000/7) % 最长长按时间
end
methods
%% 构造函数
function obj = DoubleComper(RawData1 , RawData2)
obj.Comper1_Point = TouchComper();
obj.Comper2_Point = TouchComper();
obj.len = length(RawData1);
obj.len = length(RawData2);
obj.RawData1 = RawData1;
obj.RawData2 = RawData2;
end
%% 处理函数
function Map = DoubleComper_Process(obj)
% 峰值
Comper1MHz_Point_PeakValue = zeros(obj.len,1,"double");
Comper13MHz_Point_PeakValue = zeros(obj.len,1,"double");
% 极性
Comper1MHz_Point_hiddenPolarity = zeros(obj.len,1,"double");
Comper13MHz_Point_hiddenPolarity = zeros(obj.len,1,"double");
% 计时器
Comper1MHz_Point_TimeCount = zeros(obj.len,1,"double");
Comper13MHz_Point_TimeCount = zeros(obj.len,1,"double");
% 震荡计数器
Comper1MHz_Point_TSD_ShakeCnt = zeros(obj.len,1,"double");
Comper13MHz_Point_TSD_ShakeCnt = zeros(obj.len,1,"double");
% FIFO的和
Comper1MHz_Point_FifoSum = zeros(obj.len,1,"double");
Comper13MHz_Point_FifoSum = zeros(obj.len,1,"double");
% 当前触摸状态
Comper1MHz_Point_CurrentTouchSt = zeros(obj.len,1,"double");
Comper13MHz_Point_CurrentTouchSt = zeros(obj.len,1,"double");
% 过去触摸状态
Comper1MHz_Point_PurrentTouchSt = zeros(obj.len,1,"double");
Comper13MHz_Point_PurrentTouchSt = zeros(obj.len,1,"double");
% 运算
for i = 1 : obj.len
FilterResult1 = obj.RawData1(i);
obj.Comper1_Point.New_TouchTheComparatorFunction(FilterResult1);
% 峰值
Comper1MHz_Point_PeakValue(i) = obj.Comper1_Point.PeakValue;
% 极性
Comper1MHz_Point_hiddenPolarity(i) = obj.Comper1_Point.hiddenPolarity;
% 计时器
Comper1MHz_Point_TimeCount(i) = obj.Comper1_Point.TimeCount;
% 震荡计数器
Comper1MHz_Point_TSD_ShakeCnt(i) = obj.Comper1_Point.TSD_ShakeCnt;
% FIFO的和
Comper1MHz_Point_FifoSum(i) = obj.Comper1_Point.Fifo_Sum;
% 当前触摸状态
Comper1MHz_Point_CurrentTouchSt(i) = obj.Comper1_Point.Current_TouchSt;
% 过去触摸状态
Comper1MHz_Point_PurrentTouchSt(i) = obj.Comper1_Point.previous_TouchSt;
end
for i = 1 : obj.len
FilterResult2 = obj.RawData1(i);
obj.Comper1_Point.New_TouchTheComparatorFunction(FilterResult2);
% 峰值
Comper13MHz_Point_PeakValue(i) = obj.Comper1_Point.PeakValue + 100 ;
% 极性
Comper13MHz_Point_hiddenPolarity(i) = obj.Comper1_Point.hiddenPolarity + 100 ;
% 计时器
Comper13MHz_Point_TimeCount(i) = obj.Comper1_Point.TimeCount + 100 ;
% 震荡计数器
Comper13MHz_Point_TSD_ShakeCnt(i) = obj.Comper1_Point.TSD_ShakeCnt + 100 ;
% FIFO的和
Comper13MHz_Point_FifoSum(i) = obj.Comper1_Point.Fifo_Sum + 100 ;
% 当前触摸状态
Comper13MHz_Point_CurrentTouchSt(i) = obj.Comper1_Point.Current_TouchSt + 100 ;
% 过去触摸状态
Comper13MHz_Point_PurrentTouchSt(i) = obj.Comper1_Point.previous_TouchSt + 100 ;
end
obj.DoubleComperMap = containers.Map();
obj.DoubleComperMap('1MHz的峰值') = Comper1MHz_Point_PeakValue;
obj.DoubleComperMap('1MHz的极性') = Comper1MHz_Point_hiddenPolarity;
obj.DoubleComperMap('1MHz的计时计数器') = Comper1MHz_Point_TimeCount;
obj.DoubleComperMap('1MHz的FIFO的和') = Comper1MHz_Point_FifoSum;
obj.DoubleComperMap('1MHz的超过阈值计数器') = Comper1MHz_Point_TSD_ShakeCnt;
obj.DoubleComperMap('1MHz的比较器当前状态') = Comper1MHz_Point_CurrentTouchSt;
obj.DoubleComperMap('1MHz的比较器过去状态') = Comper1MHz_Point_PurrentTouchSt;
obj.DoubleComperMap('13MHz的峰值') = Comper13MHz_Point_PeakValue;
obj.DoubleComperMap('13MHz的极性') = Comper13MHz_Point_hiddenPolarity;
obj.DoubleComperMap('13MHz的计时计数器') = Comper13MHz_Point_TimeCount;
obj.DoubleComperMap('13MHz的FIFO的和') = Comper13MHz_Point_FifoSum;
obj.DoubleComperMap('13MHz的超过阈值计数器') = Comper13MHz_Point_TSD_ShakeCnt;
obj.DoubleComperMap('13MHz的比较器当前状态') = Comper13MHz_Point_CurrentTouchSt;
obj.DoubleComperMap('13MHz的比较器过去状态') = Comper13MHz_Point_PurrentTouchSt;
Map = obj.DoubleComperMap;
end
%% 修改频点1 各种阈值修改函数
function Map = ChangeComper1yuzhi(obj,Comper_MAXIMUM_VALUE_OF_BURRS, ...
Comper_TOUCH_THRESHOLD, ...
Comper_CONFIRM_THE_TIME_SLICE_THRESHOLD)
obj.Comper1_Point.Changeyuzhi(Comper_MAXIMUM_VALUE_OF_BURRS, ...
Comper_TOUCH_THRESHOLD, ...
Comper_CONFIRM_THE_TIME_SLICE_THRESHOLD);
obj.DoubleComperMap = obj.DoubleComper_Process();
Map = obj.DoubleComperMap;
end
%% 修改频点1 各种确认参数修改函数
function Map = ChangeComper1queren(obj, ...
Comper_TIME_SLICE_CONFIRMATION_TIMES, ...
Comper_THE_THRESHOLD_FOR_THE_OSCILLATING_FIFO, ...
Comper_IDLE_FIFO_THRESHOLD, ...
Comper_MAXIMUM_VALUE_CONFIRMATION_TIME, ...
Comper_MINIMUM_STABLE_FREQUENCY)
obj.Comper1_Point.Changequerencanshu(Comper_TIME_SLICE_CONFIRMATION_TIMES, ...
Comper_THE_THRESHOLD_FOR_THE_OSCILLATING_FIFO, ...
Comper_IDLE_FIFO_THRESHOLD, ...
Comper_MAXIMUM_VALUE_CONFIRMATION_TIME, ...
Comper_MINIMUM_STABLE_FREQUENCY)
obj.DoubleComperMap = obj.DoubleComper_Process();
Map = obj.DoubleComperMap;
end
%% 修改频点1 各种窗口大小修改函数
function Map = ChangeComper1Window(obj, ...
Comper_THE_SIZE_OF_THE_OSCILLATING_FIFO, ...
Comper_IDLE_FIFO_WINDOW_TIME)
obj.Comper1_Point.Changechuangkou(Comper_THE_SIZE_OF_THE_OSCILLATING_FIFO, ...
Comper_IDLE_FIFO_WINDOW_TIME);
obj.DoubleComperMap = obj.DoubleComper_Process();
Map = obj.DoubleComperMap;
end
%% 修改频点2 各种阈值修改函数
function Map = ChangeComper2yuzhi(obj,Comper_MAXIMUM_VALUE_OF_BURRS, ...
Comper_TOUCH_THRESHOLD, ...
Comper_CONFIRM_THE_TIME_SLICE_THRESHOLD)
obj.Comper2_Point.Changeyuzhi(Comper_MAXIMUM_VALUE_OF_BURRS, ...
Comper_TOUCH_THRESHOLD, ...
Comper_CONFIRM_THE_TIME_SLICE_THRESHOLD);
obj.DoubleComperMap = obj.DoubleComper_Process();
Map = obj.DoubleComperMap;
end
%% 修改频点2 各种确认参数修改函数
function Map = ChangeComper2queren(obj, ...
Comper_TIME_SLICE_CONFIRMATION_TIMES, ...
Comper_THE_THRESHOLD_FOR_THE_OSCILLATING_FIFO, ...
Comper_IDLE_FIFO_THRESHOLD, ...
Comper_MAXIMUM_VALUE_CONFIRMATION_TIME, ...
Comper_MINIMUM_STABLE_FREQUENCY)
obj.Comper2_Point.Changequerencanshu(Comper_TIME_SLICE_CONFIRMATION_TIMES, ...
Comper_THE_THRESHOLD_FOR_THE_OSCILLATING_FIFO, ...
Comper_IDLE_FIFO_THRESHOLD, ...
Comper_MAXIMUM_VALUE_CONFIRMATION_TIME, ...
Comper_MINIMUM_STABLE_FREQUENCY)
obj.DoubleComperMap = obj.DoubleComper_Process();
Map = obj.DoubleComperMap;
end
%% 修改频点2 各种窗口大小修改函数
function Map = ChangeComper2Window(obj, ...
Comper_THE_SIZE_OF_THE_OSCILLATING_FIFO, ...
Comper_IDLE_FIFO_WINDOW_TIME)
obj.Comper2_Point.Changechuangkou(Comper_THE_SIZE_OF_THE_OSCILLATING_FIFO, ...
Comper_IDLE_FIFO_WINDOW_TIME);
obj.DoubleComperMap = obj.DoubleComper_Process();
Map = obj.DoubleComperMap;
end
end
end
检查代码中存在的问题
最新发布