计算并统计信号采样值发生变化的间隔时间的简单程序

(实现方式:octave/matlab)

以下是一个简单的MATLAB代码示例,用于统计信号采样值S0(采样周期固定)发生变化的时间间隔并绘制统计直方图:

% 数据S0示例
S0 = [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4];

% 数据预处理
S = round(S0,2); % 可选附加处理,将原始数据保留2位小数,以提高检测鲁棒性

% 计算时间间隔
time_intervals = diff(find(diff(S) ~= 0)); %思路:计算变化时刻对应序号(即对应时间点)的差值

%计算时间间隔时,若需要设定检测灵敏范围,则可改为:(以灵敏范围为±0.5之外为例)
%time_intervals = diff(find( (diff(X)<-0.5) | (diff(X)>0.5) ));

% 绘制直方图
histogram(time_intervals,0:1:200); %这里设置绘图范围为0~200,绘制时间间隔为1
xlabel('时间间隔');
ylabel('频数');
title('变化时间间隔统计'); 

(这段代码假设数据P已经按照时间顺序排列。如果数据P中的采样时间不是均匀的,可能需要进行额外处理。)

 

若需要绘制数据,并单独绘制某个变化范围之外的值:

figure;plot(time,X);grid on;

% 只绘制在-5~5变化范围外的值
% 筛选序号
ii = find( (diff(X)<-5) | (diff(X)>5) );
z=zeros(length(X),1);
z(ii)=X(ii+1);

% 新数据 X1
X1 = zeros(size(z)); % 初始化新数据为全0
prev_value = 0; % 初始化上一个非零值为0
 for i = 1:length(z)
    if z(i) ~= 0 % 如果当前值非零
        prev_value = z(i); % 更新上一个非零值为当前值
    end
    X1(i) = prev_value; % 将新数据的当前位置设置为上一个非零值
 end
%将刚开始的0值替换为X第1个值
X1(X1==0)=X(1);
% 输出结果
figure;plot(time,X);hold on;plot(time,X1);
legend('原始值','筛选值'); grid on;

  

posted @ 2023-07-26 16:36  静即青争  阅读(29)  评论(0编辑  收藏  举报