clear all;
close all
clc;
Fs = 150e3; %定义采样率
F1 = 10e3; %定义频率
F2 = 8e3;
sample_num = 500; %定义数据点个数
m = 1:sample_num;
x = sin(2*pi*F1*m/Fs)+sin(2*pi*F2*m/Fs); %生成原始数据
y = typecast(single(x),'uint32'); %首先将x强制转换成single型,然后再转换成具有相同二进制形式的uint32型 这样做是为了方便dat文件存储
figure;
plot(x);
title('Matlab生成的原始数据');
fid=fopen('input_file.dat','wt'); %以写文本的方式打开一个叫input_file的dat文件(如果没有会自行创建一个)
fprintf(fid,'1651 1 c0000000 0 %x
',length(m)); %输出文件头,文件头必须是dsp所能识别的,
%属性分别是固定标识、数据类型(十六进制)、基地址(根据你要存储在DSP什么地址处决定)、数据长度
fprintf(fid,'0x%08x
',y); %输出y数组,并写到与fid标示符相同的文件
fclose(fid); %关闭fid标示符的文件。
在此段代码中,笔者生成了500个数据,数据默认是double型(内存中占8bytes)的,而在DSP中一般都是single型(内存中占4bytes)的,为此需要将double型数据强制转换成single型的,而CCS能够识别的dat数据类型是uint32型(内存中占4bytes)的,因此还需要再将single型数据转换成具有相同二进制形式的uint32型。接下来的数据才是真正要存下来的。文件头中的基地址写的是0xc0000000,这是根据实际你要存储到DSP的内存的地址决定的。
运行一下程序得到一个名叫input_file的dat文件,其保存在当前matlab活动的目录下。用记事本的方式打开此文件里面的内容如下:
clear all;
close all
clc;
fid=fopen('output_file.dat','r'); %以读的方式打开
read_data = fscanf(fid,'%x
'); %以16进制的方式读进来
fclose(fid); %关闭文件
data = read_data(7:end); %去掉文件头,留下有用数据 如果不知道文件头占用多少个数据,可查看后再修改去掉的个数
z = typecast(uint32(data),'single'); %首先将data强制转换成uint32型,然后再转换成具有相同二进制形式的single型,这样就实现了还原
figure;
plot(z);
title('从CCS导出经过Matlab处理还原的数据');
运行一下该程序,可以得到如下的图片:
可见数据被完好无损的传了回来。