DSP

用matlab处理CCS中导出的数据

2019-07-13 15:25发布

首先,谈谈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翻译翻译结果