MATLAB与CCSmemory通过dat文件交换数据方法

下面以雷达回波数据进行距离向FFT来进行详细讲解:
MATLAB程序:range_fft.m (可通过搜索evething搜索)
6678工程:range_fft
6678 to MATLAB的matlab程序:sig_dat_matlabread.m ,rangefft_amp_matlabread.m

下面以rangefft_amp_matlabread.m中传fft_amp(131072*1个数据)为例,若要传像sig这样的复数数据,需要分别传复数的实部和虚部,当然若只需要复数的模,CCS中可以用cabsf(单精度复数求模函数)函数来求好复数的模,再传。

1、MATLAB写dat文件

sig1 = sig.';
sig_real = real(sig1);
sig_real1 = reshape(sig_real,1,[]);
sig_imag = imag(sig1);
sig_imag1 = reshape(sig_imag,1,[]);
sig_chuan = combine(sig_real1,sig_imag1);
sig_chuan1 = reshape(sig_chuan,1,[]);
sig_chuan1 = typecast(single(sig_chuan1),'uint32');          %首先将x强制转换成single型,然后再转换成具有相同二进制形式的uint32型 这样做是为了方便dat文件存储
fid=fopen('D:\Desktop\code\DATA_6678_to_MATLAB\matlab to CCS\sig.dat','wt');                  %以写文本的方式打开一个叫input_file的dat文件(如果没有会自行创建一个)
fprintf(fid,'1651 1 90000000 0 %x\n',length(sig_chuan1));   %输出文件头,文件头必须是dsp所能识别的,
                                                   %属性分别是固定标识、数据类型(十六进制)、基地址(根据你要存储在DSP什么地址处决定)、数据长度
fprintf(fid,'0x%08x\n',sig_chuan1);                         %输出y数组,并写到与fid标示符相同的文件
fclose(fid);                                       %关闭fid标示符的文件。

2、debug后将鼠标放在要传输变量上面得到变量的起始地址:

3、在memeory观察窗口找到变量所在地址区域:

4、在memory出右键选择save memory,并选择一个保存dat文件的文件夹地址以及给dat文件命名,点击next

5、Format 选择32-Bit Hex-C Style或者那个32-Bit Hex-TI Style也行,并填写要传出变量的起始地址,以及变量的长度,该工程中fft_amp的起始地址为0x80D000,长度为256*512=131072个数据,点击finish即将fft_amp的131072个数传到了你指定文件夹的dat文件中

6、MATLAB读取:

clear all;
close all
clc;
fid=fopen('D:\Desktop\code\C6678\DATA\fft_amp.dat','r');                 %以读的方式打开
read_data = fscanf(fid,'%x\n');                   %16进制的方式读进来
fclose(fid);                                      %关闭文件
data = read_data(7:end);                          %去掉文件头,留下有用数据 如果不知道文件头占用多少个数据,可查看后再修改去掉的个数
z = typecast(uint32(data),'single');             %首先将data强制转换成uint32型,然后再转换成具有相同二进制形式的single型,这样就实现了还原
fft_amp = reshape(z,512,256);         %这里注意MATLAB中的rashape函数是按列来填充元素的
fft_amp = fft_amp.';
figure('Name','距离向FFT处理后');
imagesc(fft_amp);
title('距离向FFT处理后');
xlabel('距离向(采样点)');
ylabel('方位向(采样点)');

其中fid=fopen(‘D:\Desktop\code\C6678\DATA\fft_amp.dat’,‘r’); 代码为打开dat文件,注意文件路径
注意从dat文件中读出来的数据(程序中的z矩阵)为一个1310721的数据,且后面的reshape函数也是按列来摆放数据,所以只有先将数据reshape为512256的矩阵,再给矩阵信号fft_amp转置成(256512)才会与range_fft.m 中的sig_rd矩阵信号一致,因为CCS处理回波信号矩阵的第二个数据为256512回波信号的第一行第二列的数据,所以从CCS传到MATLAB的列向量数据要进行如此操作。

参考文献:
[1] https://blog.csdn.net/HJ199404182515/article/details/60958304

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

embrace_the_sunhaha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值