怎么用matlab处理数据,如何用Matlab处理.wfm格式的数据
從示波器中捕獲的波形處理,此代碼源于https://ww2.mathworks.cn/matlabcentral/fileexchange/14918-tektronix-wfm-file-reader
function:
1 function [out_descript, outdata, timedata] = wfm_ascii_dpo(fname, data_start, data_stop)
2 % Converts TSD5/6/7k and DPO7k/70k .wfm file to ASCII format
3 % with time array
4 %
5 % data_start and data_stop input arguments are optional
6 % and can be used to read parts of file
7 %
8 % To do: implement fast frame, pixel maps
9 %
10 out = [];
11 if nargin==0
12 fname='';
13 end
14 if isempty(fname)
15 [filename,pname]=uigetfile({'*.wfm', 'Tektronix Waveform Files (*.wfm)';'*.*', 'All Files (*.*)'},'Choose Tektronix WFM file');
16 fname=[pname filename];
17 end
18 %---Open file
19 fd = fopen(fname,'r');
20 if fd==-1
21 error('Problem opening file "%s"',fname)
22 end
23 %---Determine byte ordering, then close and reopen with proper byte ordering
24 ByteOrder = fread(fd,1,'ushort');
25 if ByteOrder==61680
26 fclose(fd);
27 fd = fopen(fname,'r','ieee-be');
28 else
29 fclose(fd);
30 fd = fopen(fname,'r','ieee-le');
31 end
32 %---WFM static file information
33 out.ByteOrder = fread(fd, 1,'ushort' );
34 out.VersionNum = fread(fd, 8,'*char' )';
35 if ~any(strcmp(out.VersionNum,{':WFM#001';':WFM#002';':WFM#003'}))
36 fclose(fd);
37 error('File "%s" is not a valid WFM file',fname)
38 end
39 out.NumDigitsInByteCount = fread(fd, 1,'char' );
40 out.NumBytesToEOF = fread(fd, 1,'long' );
41 out.NumBytesPerPoint = fread(fd, 1,'char' );
42 out.ByteOffsetToCurveBuffer = fread(fd, 1,'long' );
43 out.HorZoomScale = fread(fd, 1,'long' );
44 out.HorZoomPos = fread(fd, 1,'float32');
45 out.VerZoomScale = fread(fd, 1,'double' );
46 out.VerZoomPos = fread(fd, 1,'float32');
47 out.WaveformLabel = fread(fd,32,'*char' )';
48 out.N = fread(fd, 1,'ulong' );
49 out.HeaderSize = fread(fd, 1,'ushort' );
50 %---WFM header
51 out.SetType = fread(fd, 1,'int' );
52 out.WfmCnt = fread(fd, 1,'ulong' );
53 jnk = fread(fd,36,'uchar' ); % Skip these for now
54 out.DataType = fread(fd, 1,'int' );
55 jnk = fread(fd,28,'uchar' ); % Skip these for now
56 switch out.VersionNum
57 case {':WFM#002' ':WFM#003'}
58 jnk = fread(fd, 1,'ushort'); % Skip these for now
59 end
60 jnk = fread(fd,12,'uchar' ); % Skip these for now
61 %---Explicit Dimension 1/2
62 s = [];
63 for n=1:2
64 s.DimScale = fread(fd, 1,'double');
65 s.DimOffset = fread(fd, 1,'double');
66 s.DimSize = fread(fd, 1,'ulong' );
67 s.Units = fread(fd,20,'*char' );
68 s.DimExtentMin = fread(fd, 1,'double');
69 s.DimExtentMax = fread(fd, 1,'double');
70 s.DimResolution = fread(fd, 1,'double');
71 s.DimRefPoint = fread(fd, 1,'double');
72 s.Format = fread(fd, 1,'int' );
73 s.StorageType = fread(fd, 1,'int' );
74 jnk = fread(fd,20,'uchar' ); % Skip these for now
75 s.UserScale = fread(fd, 1,'double');
76 s.UserUnits = fread(fd,20,'*char' );
77 s.UserOffset = fread(fd, 1,'double');
78 switch out.VersionNum
79 case ':WFM#003'
80 s.PointDensity = fread(fd, 1,'double');
81 otherwise
82 s.PointDensity = fread(fd, 1,'ulong' );
83 end
84 s.HRef = fread(fd, 1,'double');
85 s.TrigDelay = fread(fd, 1,'double');
86 out.ExplicitDimension(n) = s;
87 end
88 %---Implicit Dimension 1/2
89 s=[];
90 for n=1:2
91 s.DimScale = fread(fd, 1,'double');
92 s.DimOffset = fread(fd, 1,'double');
93 s.DimSize = fread(fd, 1,'ulong' );
94 s.Units = fread(fd,20,'*char' )';
95 jnk = fread(fd,16,'uchar' ); % Skip these for now
96 s.DimResolution = fread(fd, 1,'double');
97 jnk = fread(fd,12,'uchar' ); % Skip these for now
98 s.UserScale = fread(fd, 1,'double');
99 s.UserUnits = fread(fd,20,'*char' );
100 s.UserOffset = fread(fd, 1,'double');
101 switch out.VersionNum
102 case ':WFM#003'
103 s.PointDensity = fread(fd, 1,'double');
104 otherwise
105 s.PointDensity = fread(fd, 1,'ulong' );
106 end
107 s.HRef = fread(fd, 1,'double');
108 s.TrigDelay = fread(fd, 1,'double');
109 out.ImplicitDimension(n) = s;
110 end
111 %---Time Base 1/2 Information
112 s=[];
113 for n=1:2
114 s.RealPointSpacing = fread(fd, 1,'ulong' );
115 s.Sweep = fread(fd, 1,'int' );
116 s.TypeOfBase = fread(fd, 1,'int' );
117 out.TimeBase(n) = s;
118 end
119 %---WFM Update Spec
120 jnk = fread(fd,24,'uchar'); % Skip these for now
121 %---WFM Curve Information
122 jnk = fread(fd,10,'uchar'); % Skip these for now
123 PrechargeStartOffset = fread(fd, 1,'ulong');
124 DataStartOffset = fread(fd, 1,'ulong');
125 PostchargeStartOffset = fread(fd, 1,'ulong');
126 PostchargeStopOffset = fread(fd, 1,'ulong');
127 EndOfCurveBufferOffset = fread(fd, 1,'ulong');
128 %---FastFrame Frames
129 %OPTIONAL
130 %---Curve Buffer
131 out.CurveSizeInBytes = PostchargeStartOffset - DataStartOffset;
132 out.CurveSize = out.CurveSizeInBytes / out.NumBytesPerPoint;
133 jnk = fread(fd,DataStartOffset,'uchar'); % Skip precharge
134 if nargin<3
135 data_start = 1;
136 data_stop = out.CurveSize;
137 end
138 switch out.NumBytesPerPoint
139 case 1
140 if data_start > 1
141 jnk = fread(fd,data_start-1,'*int8');
142 out.CurveData = fread(fd,data_stop-data_start+1,'*int8');
143 else
144 out.CurveData = fread(fd,data_stop,'*int8');
145 end
146 case 2
147 if data_start > 1
148 out.CurveData = fread(fd,data_start-1,'*int16');
149 out.CurveData = fread(fd,data_stop-data_start+1,'*int16');
150 else
151 out.CurveData = fread(fd,data_stop,'*int16');
152 end
153 end
154
155 %---Close file
156 fclose(fd);
157 %E_DimOffset = out.ExplicitDimension(1,1).DimOffset;
158 %E_DimScale = out.ExplicitDimension(1,1).DimScale;
159 %E_CurveData = out.CurveData;
160 %I_DimOffset = out.ImplicitDimension(1,1).DimOffset
161 %I_DimScale = out.ImplicitDimension(1,1).DimScale
162 y = (out.ExplicitDimension(1,1).DimOffset) + (out.ExplicitDimension(1,1).DimScale)*double(out.CurveData);
163 t = out.ImplicitDimension(1,1).DimOffset + out.ImplicitDimension(1,1).DimScale*(data_start:data_stop);
164 out_descript.Fs = 1/out.ImplicitDimension(1,1).DimScale;
165 out_descript.Ts = out.ImplicitDimension(1,1).DimScale;
166 out_descript.N = out.CurveSize;
167 out_descript.byte = out.NumBytesPerPoint;
168 outdata = y;
169 timedata = t;
View Code
調用函數:
1 clc
2 clear all
3 [out_descript,outdata,timedata]= wfm_ascii_dpo('Tek001.wfm') % wfm_ascii_dpo(fname,data_start,data_stop)
4 figure;
5 plot(timedata * 10^9,outdata * 200,'b-');
6 xlabel('x')
7 ylabel('y)')
8 legend('map')
View Code
來源:https://www.cnblogs.com/571328401-/p/12937868.html
總結
以上是生活随笔為你收集整理的怎么用matlab处理数据,如何用Matlab处理.wfm格式的数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸡蛋汉堡五香酱料配方?
- 下一篇: 卡尔曼滤波器求速度matlab,卡尔曼滤