赞
踩
ILA导出的是csv文件,如下所示,
在matlab使用sscanf函数对文件的每行进行处理,
% 从文件中读入数据 file_path = 'iladata.csv'; fid = fopen(file_path); data_width = 8; %实际未使用到,数据是以16进制的形式存储的,位宽为8Bits data_col_num = 16; data_row_num = 1024; line=fgetl(fid); %读入首行,该行中不包括有效数据 A=zeros(data_row_num,data_col_num); B=zeros(1,data_col_num); for i=1:data_row_num line=fgetl(fid); K=strfind(line,','); data_offset = K(3); %有效数据所在列的位置 for j=1:data_col_num B(j)=sscanf(line(j*2-1+data_offset:j*2+data_offset),'%x'); end A(i,:)=B(1,:); end fclose(fid); %将无符号数转换为有符号数 C = A; C(find(A>=128)) = C(find(A>=128))-256;
始终觉得Matlab处理字符串不够方便,还是在matlab中调用perl处理文本更爽~
use strict; use warnings; use Text::CSV_XS; my $csv_file = $ARGV[0]; my $txt_file = $ARGV[1]; my $csv = Text::CSV_XS->new({ sep_char => ',' }); open(my $csv_fid, '<', $csv_file); open(my $txt_fid, '>', $txt_file); my $line_num = 0; while (my $line = <$csv_fid>) { chomp $line; if($line_num>0) { if ($csv->parse($line)) { my @fields = $csv->fields(); my $str_datas = $fields[3]; my @datas = unpack("(A2)*",$str_datas); for(@datas) { print $txt_fid hex($_)," "; } print $txt_fid "\n"; } else { warn "Line could not be parsed: $line\n"; } } $line_num=$line_num+1; }
csv_file = 'iladata.csv';
txt_file = 'data.txt';
perl('deal_ila.pl',csv_file,txt_file)
load(txt_file);
% 无符号数转成有符号数
s_data = data;
s_data(find(s_data>=128)) = s_data(find(s_data>=128))-256;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。