• 提取变化占空比的规则如下:

1. 如果占空比发生 >=5% 的变化,则认为占空比发生变化;

2. 正常的1个周期100个,其中连续 <0.1V 变化的点约为40个左右;

3. 那么,40*(1+5%)=42,即理论上连续超过42个点变化<0.1V,认为是占空比发生变化。

  • 代码实现的方法如下:

1. 设置1个参考点;

2. 对比其后面连续44个点的值相对参考点是否 <0.1V变化(为什么用44个点呢,因为如果为43个点,则结果会有无数的波形);

3. 如果超过连续44个点均<0.1V,则认为占空比发生变化。

  • 效果如下图

% 使用Matlab提取ADC数据中占空比变化的波形
% 本代码实现对ADC数据的占空比变化波形提取,并记录噪声的数据编号以及存储噪声图片
% 采样频率为一个波形周期采样100个点
%
% 提取变化占空比的规则如下:
% 1. 如果占空比发生 >=5% 的变化,则认为占空比发生变化;
% 2. 正常的1个周期100个,其中连续 <0.1V 变化的点约为40个左右;
% 3. 那么,40*(1+5%)=42,即理论上连续超过42个点变化<0.1V,认为是占空比发生变化。
%
% 代码实现的方法如下:
% 1. 设置1个参考点VA;
% 2. 对比其后面连续44个点的值相对参考点是否 <0.1V变化(为什么用44个点呢,因为如果为43个点,则结果会有无数的波形);
% 3. 如果超过连续44个点均<0.1V,则认为占空比发生变化。
%
% 使用时可能需要修改的内容
% 1. 须根据实际文件夹的路径进行修改folderpath
% 2. 须根据实际波形的连续高或低电平时,其电压变化Vthreshold
% 3. 须根据实际波形的连续高或低电平时,其连续不变化的点数Number_continuous
% 4. 须根据实际数据文件的数量,file_start_serial和file_end_serial
% 5. 须根据实际数据的名称修改'rBufPt_'字符串
%
% 运行后的结果
% 1. 运行完成后,会在folderpath文件夹下生成一个记录占空比变化的位置的log_width.txt以及存放图片的picture_width% 清理命令行中的内容
clc;
% 清理内存变量
clear;% 手动设置文件路径
folderpath = 'E:\data\001\';
% 自动新建用于存放图片的文件夹
picfolder = [folderpath,'picture_width'];
mkdir(picfolder);% 手动设置2大参数
Vthreshold = 0.1;
Number_continuous = 44;% 自动在log.txt中记录启动时间
fid_log=fopen([folderpath,'\log_width.txt'],'at+');%写入文件路径
fprintf(fid_log,'Start time %s.\n',datestr(now,31));
fclose(fid_log);% 手动设置数据文件编号的范围:文件读到最后一个数据文件
file_start_serial = 13;
file_end_serial = 400;%     % 打开文档,并读取数据到内存中
%     file_serial = 1;%默认的文件编号
%     fid_data = fopen([folderpath,'/rBufPt_',num2str(file_serial),'.bin'],'rb');
%     [rBuf] = fread(fid_data);
%     fclose(fid_data);
%
%     % 仅读取1组数据,每隔8个字节取数据
%     rBuf1 = rBuf(1:8:end);
%
%     % 将有效数字量转换成模拟量
%     parfor i = 1:length(rBuf1)
%         if rBuf1(i)>127
%            rBuf1(i) =  rBuf1(i) - 256 ;
%         end
%         rBuf1(i) = (rBuf1(i) * 8.29)/1000 ;
%         rBuf1(i)=rBuf1(i) + 0.9 ;
%     endfor file_serial = file_start_serial : file_end_serial% 在命令行中打印当前file_serial的值和启动时间,方便查看当前运行进程fprintf('NO %d.\n',file_serial);fprintf('Percent %.2f%%.\n',file_serial/file_end_serial*100);fprintf('%s.\n',datestr(now,31));% 打开文档,并读取数据到内存中fid_data = fopen([folderpath,'/rBufPt_',num2str(file_serial),'.bin'],'rb');[rBuf] = fread(fid_data);fclose(fid_data);% 仅读取1组数据,每隔8个字节取数据rBuf1 = rBuf(1:8:end);% 将有效数字量转换成模拟量parfor i = 1:length(rBuf1) if rBuf1(i)>127rBuf1(i) =  rBuf1(i) - 256 ;endrBuf1(i) = (rBuf1(i) * 8.29)/1000 ; rBuf1(i)=rBuf1(i) + 0.9 ;    end% 启动秒表计时器tic%读取有效模拟量的长度length_rBuf1 = length(rBuf1);%设置变量,用于代表上次出现噪声信号的indexlast_log_index = 0;% STEP = 1,对数据从头到尾进行处理(4200000前采到的数据不正常,不使用)for index = 4200000 : length_rBuf1-Number_continuous     tmp_diff = 0;i = 0;% 每增加一次,进行后面44个点的判断for i = (index+1) : (index + Number_continuous)            if(abs(rBuf1(index) - rBuf1(i)) < 0.1)tmp_diff = tmp_diff + 1;else tmp_diff = 0;                endend% 43是个分界线,如果小于等于43否则不停的扫出来if tmp_diff >= 44%如果与上次保存的数据在图片中位置相差不大,不保存(比如不到50个点)if index > last_log_index +Number_continuous %如果与上次保存的数据在图片中位置相差不大,不保存last_log_index = index;    % 将Noise的编号记录到log中fid_log=fopen([folderpath,'/log_width.txt'],'at+');%写入文件路径fprintf(fid_log,'%d.bin UP index is %.8d.\n',file_serial,index); fclose(fid_log);% 将噪声图片保存figure(1);plot(rBuf1); legend('LVDS-CH4');hold on;   xstart = index - 500;xend = index + 500;xlim([xstart xend]);saveas(gcf,[picfolder,'/rBufPt_',num2str(file_serial),'_',num2str(index),'.jpg']);hold off;            end       endend% 从秒表读取已用时间tfly = toc;% 在命令行打印单次运行的耗时tfly
end% 任务结束,发出火车叫声
for i = 1:10load train;sound(y,Fs);
end% 在log中记录此程序结束的日期与时间
fid_log=fopen([folderpath,'/log_width.txt'],'at+');%写入文件路径
fprintf(fid_log,'End time %s.\n',datestr(now,31));
fclose(fid_log);% 程序运行结束,60s后关闭电脑
% system('shutdown -s -t 60')

使用Matlab提取ADC数据占空比变化的波形相关推荐

  1. 使用Matlab提取ADC采样数据中的噪声

    正常波形与噪声波形的区别 正常方波信号的特征:一个周期内的数据按时间单调变化,则仅有2种情况:① 数据在上升或下降边沿时,其两边的数据则是一边大一边小(如下图中C和D点):② 数据处于平稳时,则两边大 ...

  2. 利用matlab对rosbag数据,通过matlab提取rosbag数据

    通过matlab提取rosbag数据 代码如下: 最近在做AGV导航实验,导航小车是基于ROS实现的,判断小车导航是否运行稳定,可以直接通过rviz直观看出来.但是如何通过数据定性地分析数据,这就需要 ...

  3. Matlab提取矩阵数据

    首先,Matlab中,()的地位跟Python中[]的地位有点类似. 特别是在提取矩阵数据中的情况 在演示之前,先建立矩阵,并看一下 M = [1,2; 3,4; 5,6] 输出的结果是: M =1 ...

  4. matlab提取矩阵数据:行、列、块

    #2020/4/17 @matlab 矩阵行列和矩阵块的提取: 先随意设定一个6维的随机数矩阵 取矩阵a第2行 a(2,:) 取矩阵a第3列 a(:,3) 取矩阵a第2至第3列 取矩阵a第2至第3行 ...

  5. matlab提取FY4数据CLM

    clc; close all; load 'G:\theone\GeoRef'; load 'G:\theone\latlon_china_4000_grid'; load 'G:\theone\la ...

  6. 使用MATLAB快速提取图片数据

    今天介绍一下如何使用MATLAB提取图片数据.在MATLAB中其实也有很多好用的附加功能可免费使用,而今天介绍的这个就是小编在附加功能中发现所发现,一起来了解下吧! 1.GRABIT下载 MATLAB ...

  7. matlab提取数据的一部分,matlab如何提取数组中的满足一定范围的一段数据

    给定一个数组,如何让matlab生成一个这个数组中的一个随机数? x=[102030];x(randi(length(x)));其中randi(length(x))生成从1~(x的长度)这几个自然数中 ...

  8. matlab输出多个参数到表格固定列,matlab将excle的列提取出来?如何使用Matlab提取Excel中指定列的数据?...

    MATLAB 在txt文件中怎么提取数据,并将那三列数据转化为EXCLE格式? 在matlab中 file import data number of text header lines 改成6 下一 ...

  9. matlab提取数据的一部分,matlab处理excel数据【怎么用MATLAB从excel中提取部分数据】...

    已经把excel的一列导入到matlab的工作区,怎么计算这一列数的均值.标准差.最小值.最大值以及中位数? 把这个EXCEL放到matlab目录下的work里,假设名为1.xls,然后在matlab ...

最新文章

  1. red hat linux ping不通,装了Red Hat Enterprise 5.3 但是ping不通网关和其他机器,具体见贴内。...
  2. 和我一起学《HTTP权威指南》——安全HTTP与HTTPS
  3. 3DSlicer11:体系结构2
  4. nuSVC的使用和解读
  5. JavaScript实现斐波那契数列(Febonacci Array)
  6. 怎么对document.write写出来的内容调整对齐方式_写论文可能用到的各种Word技巧
  7. qt opengl 2d绘图效率_Qt趣味开发之打造一个3D名字渲染小工具
  8. python3爬虫 - cookie登录实战
  9. 【新手速成】菜鸟如何在三天内完成系统开发
  10. Windows下用FFmpeg+nginx+rtmp搭建直播环境 实现推流、拉流
  11. VsCode如何设置成中文
  12. Phonegap 之 iOS银联在线支付(js调用ios端银联支付控件)
  13. python中全部注释_Python中的注释
  14. 2019计算机单招试题,(完整版)2019高职单招计算机类专业练习卷
  15. 职场中该如何自学?看书/看视频
  16. python利用浏览器执行js_浏览器如何执行JS
  17. 为何老人与年轻人都更愿意选择OPPO?这些用户需求值得关注
  18. C# 7.0 SPANS
  19. Translatium for Mac(Google在线翻译工具)的使用说明
  20. BERT与知识图谱的结合——ERNIE模型浅析

热门文章

  1. 计算机键盘被锁怎么解,电脑键盘锁了怎么解锁 电脑键盘解锁方法【详解】
  2. 北斗卫星系统的心脏——中国原子钟发展的历史
  3. javascript第二天课程
  4. django学习问题及解决方法
  5. 实践指南-网页生成PDF
  6. 深度学习实践与大数据实践【二】
  7. Python数据分析 | (27) 重塑和轴向旋转
  8. 工程力学(10)—轴向拉伸与压缩二
  9. 经常用的命令一(linux)
  10. 人力资源管理中的大数据应用之道