首先,谈谈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]);
复制去Google翻译翻译结果
垫