读取出来的量的具体含义可以查阅力科官方有关 trace 的定义文件 LeCroyWaveformTemplate_2_3.pdf

使用方法:

1、用下面的类定义,声明一个 Trace 对象

2、用 Read 方法读取即可

3、用 ADCSamples2Voltage 方法提取波形数据(原始数据为 ADC 采样数值)

4、如需回写,需要先用 Voltage2ADCSamples 方法将已有的波形数据转换为 ADC 采样值,再用 Write 方法写入到新文件

Trace 类定义(文件头+数据段):

classdef Trace < handlepropertiesHeadOffset       = 11HEADER         = '#9020000350'      %文件头,主要用于指示文件大小,数值为9e10+文件字节长度(不包括此文件头的11个字节)DESCRIPTOR_NAME = 'WAVEDESC'       %解释器, 16B, s, 0-15TEMPLATE_NAME = 'LECROY_2_3'       %模板名, 16B, s, 16-31COMM_TYPE        = 1                    %2B, enum, 32-33COMM_ORDER      = 1                    %2B, enum, 34-35 小端%各块长度(字节)WAVE_DESCRIPTOR   = 346              %文件头WAVEDSEC块的长度,4B, long, 36-39USER_TEXT        = 0                    %用户文本块的长度,4B, long, 40-43RES_DESC1       = 0                    %保留,4B, long, 44-47%各序列长度(字节)TRIGTIME_ARRAY   = 0                    %4B,long,48-51RIS_TIME_ARRAY    = 0                    %4B,long,52-55RES_ARRAY_1       = 0                    %保留,4B,long,56-59WAVE_ARRAY_1    = 20000004         %4B,long,60-63,数据列1WAVE_ARRAY_2  = 0                    %4B,long,64-67,数据列2RES_ARRAY_2       = 0                    %4B,long,68-71,保留2RES_ARRAY_3        = 0                    %4B,long,72-75,保留3%仪器信息INSTRUMENT_NAME   = 'LECROYWaveRunner'%16B,s,76-91INSTRUMENT_NUMBER                    %4B, long, 92-95 仪器编号TRACE_LABEL        = repmat(char(0),1,16) %16B, s, 96-111RESERVED1        = 10000002         %4B, 保留, 112-115,数值等于WAVE_ARRAY_COUNT,原因我也不知道%波形信息WAVE_ARRAY_COUNT= 10000002         %数据长度,4B, long, 116-119PNTS_PER_SCREEN   = 10000000         %屏幕上的数据长度,等于上面的值-2, 4B, long, 120-123FIRST_VALID_PNT = 0                    %需要跳过的数据点数,置0即可,4B, long, 124-127LAST_VALID_PNT   = 10000001         %WAVE_ARRAY_COUNT-1,4B, long, 128-131FIRST_POINT     = 0                    %第一个数据点,填0即可,4B,132-135SPARSING_FACTOR = 1                    %填1即可,4B ,136-139SEGMENT_INDEX   = 0                    %数据段索引,填0即可,4B, 140-143SUBARRAY_COUNT = 1                    %获取到的数据段数,4B, 144-147SWEEPS_PER_ACQ  = 1                    %Average或Extrema专用,否则填1, 4B, 148-151POINTS_PER_PAIR  = 0                    %2B, 152-153,峰值检测专用,这两个不用改PAIR_OFFSET     = 0                    %2B, 154-155VERTICAL_GAIN   = 1.373120030621067e-04    %4B f 156-159 垂直轴增益 原数据=数据*增益+偏移VERTICAL_OFFSET   = 0                    %4B f 160-163 垂直轴偏移MAX_VALUE        = 28875                %波形图网格的最大最小值, 4B f 164-167MIN_VALUE     = -29131           %4B f 168-171NOMINAL_BITS   = 8                    %2B 172-173 不用改NOM_SUBARRAY_COUNT = 1              %2B 174-175HORIZ_INTERVAL   = 1e-10                %4B f 176-179 采样点间隔HORIZ_OFFSET = -5e-4                %8B double 180-187PIXEL_OFFSET  = -5e-4                %8B d 188-195VERTUNIT       = ['V', repmat(char(0),1,47)]        %196-243 单位定义, 48BHORUNIT           = ['S', repmat(char(0),1,47)]        %244-291 单位定义, 48BHORIZ_UNCERTAINTY = 1e-12            %4B f 292-295 不确定性 单位为秒TRIGGER_TIME                     %24B f 296-311触发时间戳ACQ_DURATION = 0                    %4B f 312-315RECORD_TYPE        = 0                    %2B 316-317 波形类型,一般填0即可PROCESSING_DONE   = 0                    %2B 318-319RESERVED5        = 0                    %2B 320-321RIS_SWEEPS       = 1                    %2B 322-323TIMEBASE     = 24               %2B 324-325 水平轴栅格时长VERT_COUPLING    = 0                    %2B 326-327 耦合方式PROBE_ATT       = 1                    %4B f 328-331 探针衰减FIXED_VERT_GAIN   = 18               %2B 332-333 垂直轴固定增益BANDWIDTH_LIMIT  = 0                    %2B 334-335 带宽显示,填0即可VERTICAL_VERNIER= 1                %4B f 336-339ACQ_VERT_OFFSET    = 0                    %4B f 340-343WAVE_SOURCE        = -1               %2B 344-345 波形通道%用户文本块TEXT                              %视上面定义的长度而定%TRIGTIMETRIGGER_T                           %8B f 原名结尾是TIME,但与前面定义重复,故改为TTRIGGER_OFFSET                       %8B f%RISTIMERIS_OFFSET                         %8B f%DATA_ARRAY_1DATA_ARRAY_1%DATA_ARRAT_2DATA_ARRAY_2%SIMPLESIMPLE%DUALDUALendmethodsfunction self = Trace()return;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function Read(self,fn)fid=fopen(fn,'r');if fid==-1 fprintf('ERROR: file not found: %s\n', fn);return;enddata = fread(fid,50);self.HeadOffset = strfind(char(data(1:50)'), self.DESCRIPTOR_NAME) - 1;  %找到文件头并返回偏移量fseek(fid, self.HeadOffset+34, 'bof');   %指针定位到指定项self.COMM_ORDER = fread(fid,1,'int16');fclose(fid);if self.COMM_ORDER   %根据文件数据格式重新读入fid = fopen(fn,'r','ieee-le');        % LOFIRST ,小端数据else fid = fopen(fn,'r','ieee-be');      % HIFIRST ,大端数据endfseek(fid, 0 ,'bof');self.HEADER = ReadStringN(fid, 0, 11);templateName = ReadString(fid, self.HeadOffset+16);if ~strcmp( deblank(templateName), self.TEMPLATE_NAME)error('Unsupported Template');end%开始读入文件信息self.COMM_TYPE            = ReadWord(fid, self.HeadOffset+32);self.WAVE_DESCRIPTOR  = ReadLong(fid, self.HeadOffset+36);self.USER_TEXT            = ReadLong(fid, self.HeadOffset+40);self.RES_DESC1            = ReadLong(fid, self.HeadOffset+44);self.TRIGTIME_ARRAY       = ReadLong(fid, self.HeadOffset+48);self.RIS_TIME_ARRAY       = ReadLong(fid, self.HeadOffset+52);self.RES_ARRAY_1      = ReadLong(fid, self.HeadOffset+56);self.WAVE_ARRAY_1     = ReadLong(fid, self.HeadOffset+60);self.WAVE_ARRAY_2     = ReadLong(fid, self.HeadOffset+64);self.RES_ARRAY_2      = ReadLong(fid, self.HeadOffset+68);self.RES_ARRAY_3      = ReadLong(fid, self.HeadOffset+72);%开始读入仪器信息self.INSTRUMENT_NAME = ReadString(fid, self.HeadOffset+76);self.INSTRUMENT_NUMBER  = ReadLong(fid, self.HeadOffset+92);self.TRACE_LABEL      = ReadString(fid, self.HeadOffset+96);self.RESERVED1          = ReadLong(fid, self.HeadOffset+112);%开始读入波形信息self.WAVE_ARRAY_COUNT   = ReadLong(fid, self.HeadOffset+116);self.PNTS_PER_SCREEN = ReadLong(fid, self.HeadOffset+120);self.FIRST_VALID_PNT = ReadLong(fid, self.HeadOffset+124);self.LAST_VALID_PNT      = ReadLong(fid, self.HeadOffset+128);self.FIRST_POINT     = ReadLong(fid, self.HeadOffset+132);self.SPARSING_FACTOR = ReadLong(fid, self.HeadOffset+136);self.SEGMENT_INDEX       = ReadLong(fid, self.HeadOffset+140);self.SUBARRAY_COUNT      = ReadLong(fid, self.HeadOffset+144);self.SWEEPS_PER_ACQ      = ReadLong(fid, self.HeadOffset+148);self.POINTS_PER_PAIR = ReadWord(fid, self.HeadOffset+152);self.PAIR_OFFSET     = ReadWord(fid, self.HeadOffset+154);self.VERTICAL_GAIN       = ReadFloat(fid, self.HeadOffset+156);self.VERTICAL_OFFSET    = ReadFloat(fid, self.HeadOffset+160);self.MAX_VALUE          = ReadFloat(fid, self.HeadOffset+164);self.MIN_VALUE          = ReadFloat(fid, self.HeadOffset+168);self.NOMINAL_BITS       = ReadWord(fid, self.HeadOffset+172);self.NOM_SUBARRAY_COUNT = ReadWord(fid, self.HeadOffset+174);self.HORIZ_INTERVAL       = ReadFloat(fid, self.HeadOffset+176);self.HORIZ_OFFSET       = ReadDouble(fid, self.HeadOffset+180);self.PIXEL_OFFSET      = ReadDouble(fid, self.HeadOffset+188);self.VERTUNIT          = ReadStringN(fid, self.HeadOffset+196, 48);self.HORUNIT          = ReadStringN(fid, self.HeadOffset+244, 48);self.HORIZ_UNCERTAINTY    = ReadFloat(fid, self.HeadOffset+292);self.TRIGGER_TIME       = ReadTimestamp(fid,self.HeadOffset+296);self.ACQ_DURATION        = ReadLong(fid, self.HeadOffset+312);self.RECORD_TYPE     = ReadWord(fid, self.HeadOffset+316);self.PROCESSING_DONE = ReadWord(fid, self.HeadOffset+318);self.RESERVED5           = ReadWord(fid, self.HeadOffset+320);self.RIS_SWEEPS          = ReadWord(fid, self.HeadOffset+322);self.TIMEBASE            = ReadWord(fid, self.HeadOffset+324);self.VERT_COUPLING       = ReadWord(fid, self.HeadOffset+326);self.PROBE_ATT           = ReadFloat(fid, self.HeadOffset+328);self.FIXED_VERT_GAIN    = ReadWord(fid, self.HeadOffset+332);self.BANDWIDTH_LIMIT = ReadWord(fid, self.HeadOffset+334);self.VERTICAL_VERNIER    = ReadFloat(fid, self.HeadOffset+336);self.ACQ_VERT_OFFSET    = ReadFloat(fid, self.HeadOffset+340);self.WAVE_SOURCE        = ReadWord(fid, self.HeadOffset+344);%开始读入数据self.TEXT             = ReadStringN(fid, self.HeadOffset+346, self.USER_TEXT);if self.RECORD_TYPE == 0 %single sweepfseek(fid, self.HeadOffset + self.WAVE_DESCRIPTOR + self.USER_TEXT, 'bof');if self.COMM_TYPE %2Bself.DATA_ARRAY_1 = fread(fid, self.WAVE_ARRAY_1, 'int16');else %1Bself.DATA_ARRAY_1 = fread(fid, self.WAVE_ARRAY_1, 'int8');endelse error('Unsupported Record Type');endfclose(fid);end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function Write(self,fn,wvfm)self.Voltage2ADCSamples(wvfm); %转换数据if self.COMM_ORDERfid = fopen(fn,'w','ieee-le');elsefid = fopen(fn,'w','ieee-be');endfseek(fid,0,'bof');self.HEADER = strcat('#', num2str( 9000000000 + self.WAVE_DESCRIPTOR + self.WAVE_ARRAY_1 ));fwrite(fid, self.HEADER, 'char*1');fwrite(fid, self.DESCRIPTOR_NAME,'char*1');fwrite(fid, repmat(char(0),1,8),'char*1');    %补\0fwrite(fid, self.TEMPLATE_NAME,'char*1');fwrite(fid, repmat(char(0),1,6),'char*1');fwrite(fid, self.COMM_TYPE, 'int16');fwrite(fid, self.COMM_ORDER, 'int16');fwrite(fid, self.WAVE_DESCRIPTOR, 'int32');fwrite(fid, self.USER_TEXT, 'int32');fwrite(fid, self.RES_DESC1, 'int32');fwrite(fid, self.TRIGTIME_ARRAY, 'int32');fwrite(fid, self.RIS_TIME_ARRAY, 'int32');fwrite(fid, self.RES_ARRAY_1, 'int32');fwrite(fid, self.WAVE_ARRAY_1, 'int32');fwrite(fid, self.WAVE_ARRAY_2, 'int32');fwrite(fid, self.RES_ARRAY_2, 'int32');fwrite(fid, self.RES_ARRAY_3, 'int32');fwrite(fid, self.INSTRUMENT_NAME, 'char*1');fwrite(fid, self.INSTRUMENT_NUMBER, 'int32');fwrite(fid, self.TRACE_LABEL, 'char*1');fwrite(fid, self.RESERVED1, 'int32');fwrite(fid, self.WAVE_ARRAY_COUNT, 'int32');fwrite(fid, self.PNTS_PER_SCREEN, 'int32');fwrite(fid, self.FIRST_VALID_PNT, 'int32');fwrite(fid, self.LAST_VALID_PNT, 'int32');fwrite(fid, self.FIRST_POINT, 'int32');fwrite(fid, self.SPARSING_FACTOR, 'int32');fwrite(fid, self.SEGMENT_INDEX, 'int32');fwrite(fid, self.SUBARRAY_COUNT, 'int32');fwrite(fid, self.SWEEPS_PER_ACQ, 'int32');fwrite(fid, self.POINTS_PER_PAIR, 'int16');fwrite(fid, self.PAIR_OFFSET, 'int16');fwrite(fid, self.VERTICAL_GAIN, 'float');fwrite(fid, self.VERTICAL_OFFSET, 'float');fwrite(fid, self.MAX_VALUE, 'float');fwrite(fid, self.MIN_VALUE, 'float');fwrite(fid, self.NOMINAL_BITS, 'int16');fwrite(fid, self.NOM_SUBARRAY_COUNT, 'int16');fwrite(fid, self.HORIZ_INTERVAL, 'float');fwrite(fid, self.HORIZ_OFFSET, 'double');fwrite(fid, self.PIXEL_OFFSET, 'double');fwrite(fid, self.VERTUNIT, 'char*1');fwrite(fid, self.HORUNIT, 'char*1');fwrite(fid, self.HORIZ_UNCERTAINTY, 'float');timestamp = datetime('now');fwrite(fid, second(timestamp), 'float64'); %时间戳fwrite(fid, minute(timestamp), 'int8');fwrite(fid, hour(timestamp), 'int8');fwrite(fid, day(timestamp), 'int8');fwrite(fid, month(timestamp), 'int8');fwrite(fid, year(timestamp), 'int32');fwrite(fid, self.ACQ_DURATION, 'int32');fwrite(fid, self.RECORD_TYPE, 'int16');fwrite(fid, self.PROCESSING_DONE, 'int16');fwrite(fid, self.RESERVED5, 'int16');fwrite(fid, self.RIS_SWEEPS, 'int16');fwrite(fid, self.TIMEBASE, 'int16');fwrite(fid, self.VERT_COUPLING, 'int16');fwrite(fid, self.PROBE_ATT, 'float');fwrite(fid, self.FIXED_VERT_GAIN, 'int16');fwrite(fid, self.BANDWIDTH_LIMIT, 'int16');fwrite(fid, self.VERTICAL_VERNIER, 'float');fwrite(fid, self.ACQ_VERT_OFFSET, 'float');fwrite(fid, self.WAVE_SOURCE, 'int16');if self.USER_TEXT ~= 0fwrite(fid, self.TEXT, 'char*1');endif self.COMM_ORDERfwrite(fid, self.DATA_ARRAY_1, 'int16');elsefwrite(fid, self.DATA_ARRAY_1, 'int8');endfclose(fid);end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 恢复波形数据function [x,y] = ADCSamples2Voltage(self)y = self.VERTICAL_GAIN * self.DATA_ARRAY_1 - self.VERTICAL_OFFSET;x = (0:self.WAVE_ARRAY_COUNT-1)'*self.HORIZ_INTERVAL + self.HORIZ_OFFSET;end% 将浮点数波形数据转换为ADC采样值,会覆盖对象中的数值function Voltage2ADCSamples(self,wvfm)self.DATA_ARRAY_1 = int16( (wvfm + self.VERTICAL_OFFSET) / self.VERTICAL_GAIN );end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%end
end

下面是一些辅助函数(为每个函数定义一个文件,并将所有文件放至同一目录即可正常运行):

% Read 8Bit signed Byte (not used)
function b=ReadByte(fid, Addr)fseek(fid,Addr,'bof');b=fread(fid,1,'int8');
end% Read 16Bit signed Word
function w=ReadWord(fid, Addr)fseek(fid,Addr,'bof');w=fread(fid,1,'int16');
end% Read 32Bit signed Long
function l=ReadLong(fid, Addr)fseek(fid,Addr,'bof');l=fread(fid,1,'int32');
end% Read 32Bit IEEE Float
function f=ReadFloat(fid, Addr)fseek(fid,Addr,'bof');f=fread(fid,1,'float32');
end% Read 64Bit IEEE Double
function d=ReadDouble(fid, Addr)fseek(fid,Addr,'bof');d=fread(fid,1,'float64');
end % Read timestamp
function t=ReadTimestamp(fid, Addr)fseek(fid,Addr,'bof');t.Seconds   = fread(fid,1,'float64');t.Minutes   = fread(fid,1,'int8');t.Hours        = fread(fid,1,'int8');t.Days     = fread(fid,1,'int8');t.Months   = fread(fid,1,'int8');t.Year     = fread(fid,1,'int16');
end% Read string (up to 16 characters)
function s=ReadString(fid, Addr)fseek(fid,Addr,'bof');s=fgets(fid,16);
end% Read string (N characters)
function s=ReadStringN(fid, Addr, n)fseek(fid,Addr,'bof');s=fgets(fid,n);
end

回写后的文件在力科的 WaveStudio 中的显示效果:

力科(Lecroy)示波器专用波形文件(轨迹文件/trace文件/.trc文件)在MATLAB上的解析与回写相关推荐

  1. 推荐一款FPGA lattice 深力科电子LCMXO3LF-4300C-5BG324C 使得您的控制PLD和桥接设计能够跟上技术发展

    推荐一款FPGA lattice 深力科电子LCMXO3LF-4300C-5BG324C 使得您的控制PLD和桥接设计能够跟上技术发展 FPGA lattice深力科电子LCMXO3LF-4300C- ...

  2. 泰克|是德|普源|力科|RS示波器软件下载

    NS-Scope示波器程控软件 *主要功能:硬件连接:参数配置:运行参数:数据查询. *程控对象:示波器. *程控接口:兼容市面上所有具有GPIB.USB.RS232.LAN.RS485.TTL任意一 ...

  3. win oracle trc文件怎么打开,trc文件打开工具

    trc文件打开工具也就是Anritsu TraceView,安装之后就可自动关联TRC文件格式,这样就可以进行trc文件的查看和编辑了.还可进行trc文件的翻转.对齐.修改等操作,需要的朋友可以来本站 ...

  4. 力科的示波器离线波形查看工具

    上面这张是它的最新版,叫MAUI.终于能在一屏上对比查看多个通道的波形了. 下面的这个是老的远程和离线工具, WaveStudio: 我的一个同事,私人买了一款XP时代的示波器,2G采样率,极深的存储 ...

  5. 力科示波器上位机软件NS-Scope功能介绍

       1.软件概述 ◆为了解决示波器测试操作流程繁琐.参数配置复杂等问题,Namisoft开发的NS-Scope示波器自动化测试程控软件,通过对示波器的程序控制,实现自动化参数配置.数据采集和数据存储 ...

  6. matlab meas 函数_力科示波器Matlab使用指南

    自定义示波器系列之一 自定义示波器系列之一 -- --力科示波器 力科示波器 MATLAB 使用指南 使用指南 美国力科公司 万力劢 基于 X-Stream 技术的力科示波器既是一个高速信号采集平台, ...

  7. 力科示波器 matlab,自定义眼图模板

    Teledyne LeCroy 万力劢 一.眼图模板的电气特性意义 眼图模板测试是评估高速串行信号质量的重要方法.力科示波器串行数据分析功能已经内置了业界主流高速信号的模板,多达50种以上.但是以下几 ...

  8. 力科示波器 matlab,力科周末文章四周年180期合集目录

    力科周末文章四周年180期合集 一.示波器基础系列 01 关于示波器的带宽-Frankie 01-1calibrating scopes 02 采样率和存储深度-Rick 03 DSO中的内插技术-P ...

  9. 横河、力科、泰克三种示波器的触发功能对比

    横河和泰克都有run/stop键,run起来之后自动启用触发功能,横河在single下还可以滚动,泰克是增加单位时间长度后自动进入滚动模式,滚动下也可以进行触发.力科没有run键,但在时间设置较长后可 ...

  10. 泰科MDO3034示波器波形FFT分析及数据导出

    一:FFT波形获取 获取波形,下图依电流波形为例 选择M(Math)按钮,出现菜单处选择FFT 再点击M Label标签,出现如下菜单 选择Vertical菜单,选择Linear RMS,此时会显示各 ...

最新文章

  1. 2018 Multi-University Training Contest 7
  2. 进一步认识golang中的并发
  3. Select()系统调用及文件描述符集fd_set的应用
  4. 安装库_免费软件安装库
  5. Laravel Auth 自定义user 模型目录结构
  6. c/c++宏函数的定义与使用(宏定义函数)(macro definition)
  7. java中四类八中_JAVA中的八中基本数据类型
  8. 基于JAVA+Swing+MYSQL的汽车租赁系统
  9. linux规定ip使用网卡,使用TC 对LINUX服务器网卡进行带宽限制的办法
  10. 【学术分享】发顶会论文,怎么就那么难?
  11. Flutter mixin用法详解
  12. sqlserver行列转换,动态行转换
  13. ELK日志分析系统理论加实操演练!!
  14. 计算机专业法语怎么读,计算机专业法语词汇
  15. Liunx修改用户密码
  16. 字体设计编辑软件Glyphs 2 for mac中文版v2.6.6(1350)
  17. 调出夕阳日落照片效果
  18. 计算机英语软件系统介绍ppt,ppt软件电脑上显示英文
  19. | 应用打包还是测试团队老大难问题?
  20. MySQL DBA的修炼与未来(参考篇)

热门文章

  1. JEECG架构讲解及使用
  2. ORA-01790 expression must have same datatype as corresponding expression 问题解决
  3. linux目录和文件
  4. Ant Design Pro学习记录—默认主题配色修改
  5. VScode的代码截图插件CodeSnap
  6. 用c语言屏蔽鼠标键盘,用VBS屏蔽键盘和鼠标
  7. 利用ICommand和ITool重写Arcengine中控件的事件
  8. 微信付款到个人银行卡php,微信企业付款到银行卡(下)
  9. Qt 教程(传智教育)
  10. Android专业DJ,著名音乐游戏《DJ英雄》登陆Android Market