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

(实现方式:octave/matlab)

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
% 数据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中的采样时间不是均匀的,可能需要进行额外处理。)

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 @   静即青争  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示