csv文件的格式如下图,第一行为对象描述行,前面几列(下图中是3列)为采样序号以及触发说明,之后就是采样的数据,从图中可以看出所有数据都是以二进制格式存放的,而且是按10进制表示的(无论怎么调整波形图中数据格式出来的都是一样的)基本无法适用于常规的分析软件。
鉴于此,只能先借用MATLAB强大的数据分析能力,先把数据解析出来。以waveform.csv文件为例进行解析,waveform.csv中的有效数据为第4列到第11列,有效数据是从左到右、从上至下排列的正弦波采样数据,16位有符号数(补码),采样点排列顺序为: E2->F2->G2....L2->E3->F3->G3…. 解析源码如下: clc; clear; close all; fclose('all'); %% 设置CSV文件读取范围 srow = 1; %起始行(行标从0开始); scol = 4; %起始列(列标从0开始); erow = 2048; %结束行(一般为采样深度); ecol = 11; %结束列; %% 获取csv文件 [filename, pathname] = uigetfile('E:\pl_b3\trunk\tmp\mat\*.csv','读取数据'); csv_file = [pathname filename]; %% 读取csv文件 csv_data = csvread(csv_file,srow,scol,[srow,scol,erow,ecol]); %% 矩阵重排为一列 csv_data_resp = reshape(csv_data',[],1); %% 矩阵转换为二进制文本 csv_data_str = num2str(csv_data_resp); %% 矩阵转换为有16位有符号数 csv_data_sign = typecast(uint16(bin2dec(csv_data_str)), 'int16'); %% 有符号数写入文本文档 fid_w = fopen([pathname 'csv_convt.txt'],'w'); fprintf(fid_w,'%d\n',csv_data_sign); fclose(fid_w); 复制代码
解析结果如下,顺序存放的文本数据: