用matlab处理CCS中导出的数据

首先,谈谈CCS导出的数据,其保存的文件的扩展名都为.dat型,但是,里面的数据可以分为多种类型,比如整形,hex型,和浮点型,这三个比较常用。其中,当你保存为hex型时,注意,其格式为补码形式,即正数为源码,负数为取反加一,符号位不变。


首先,导出的数据,如何导入matlab中呢?方法有三:

一,用函数textread,不过这个函数matlab提示,要去除了。

二,用textscan,个人感觉还是不太方便。

三,用importdata函数,个人感觉,很好用。如下:

I = importdata('error.dat');  


此时的I是一个元胞数组,用函数cell2mat进行转化,然后,去掉"ox",之后,进行由十六进制到十进制数的转化:利用已有的函数:  hex2dec,不过,该函数只把原数据当做无符号数来进行转化。所以,自己定义的函数为:hex2dec_sign

function val=hex2dec_sign(val_in,length)
a=hex2dec(val_in);
sign=bitget(a,4*length);%得到最高位的数值,即符号位
if (sign==1)
    a=bitshift(a,-1)-1;%bitshift函数,第二个变量为正,*2,为负,/2
    b=2^(4*length-1)-1-a;
    val=-b;
else
    val=a;
end
整体主函数为:

clc;clear all;close all;
I = importdata('error_HEX.dat');    
[M,N] = size(I');
B=cell2mat(I);
%计算
aa=B(:,3:10);
bb=zeros(N,1);
for i=1:N
bb(i,1)=hex2dec_sign(aa(i,:),8);
end
% bb(500,1)=5000000;
 bb(1000,1)=10000000;
%  bb(100,1)=1000000;
cc=zeros(N/2,1);
for i=1:2:N-1
    cc((i+1)/2,1)=complex(bb(i,1),bb(i+1,1));
end
d=20*log10(abs(fft(cc)));
c=d(1:N/4,1);
e=d((N/4+1):N/2,1);
plot([e;c]);





你可能感兴趣的:(用matlab处理CCS中导出的数据)