导出CCS3.3数据及使用matlab处理的方法

CCS3.3是一款DSP的集成开发环境(IDE)。在做DSP开发时,为验证算法。经常须要使用matlab进行算法验证,验证算法就须要数据。因此,一种交互的方法是:

  1. 使用DSP开发板连接CCS
  2. 用CCS3.3菜单中的“File->Data->Save..”功能导出DSP内存中的数据到PC的.dat文件里
  3. 使用Matlab读取.dat文件,进行数据处理

以下给出使用Matlab读取CCS导出的dat文件的方法:

% =========================================================================
% Read *dat file of CCS3.3
% xiahouzuoxin
% 2014.04.21
% =========================================================================

% clc;clear all;close all;

% 对话框选择*.dat文件
[fname,pname]=uigetfile(...
    {'*.dat';'*.*'},'Input *.dat File');

fid = fopen(fullfile(pname,fname));
fseek(fid, 21,-1);  % 去文件头, 21字节。如 1651 1 80000006 0 100

% 按指定格式读取解析
fm = 4;
switch (fm)
    case 4  % 按4Byte格式读,如 0x 80000000
        x = textscan(fid, '%2s %8s');  
        z(:,1) = hex2dec(x{2});        
    case 2 % 按2Byte格式读。如 0x 8000 0000
        x = textscan(fid, '%2s %4s %4s');  
        z(:,1) = hex2dec(x{3});
        z(:,2) = hex2dec(x{2});
    case 1 % 按1Byte格式读。如 0x 80 00 00 00
        x = textscan(fid, '%2s %2s %2s %2s %2s');  
        z(:,1) = hex2dec(x{5});
        z(:,2) = hex2dec(x{4});
        z(:,3) = hex2dec(x{3});
        z(:,4) = hex2dec(x{2});
    otherwise
        z = [];
end

if ~isempty(z)
    % 将数据处理代码放在这里

end

fclose(fid);

程序中默认DSP内存中数据的存储格式为整数类型,而对于浮点型DSP如TMS320C6713B,经常在内存中是float或double格式存储的,

这时。我们还须要一个转化为浮点数的操作。因此我写了一个转化为float类型的函数,

function y = integer2float(x, ishex)
% =========================================================================
% 有些数据y原本是float类型。在内存中是按float格式存储
% 而如今按整数将其从内存中读出变成了x
% 这个函数就是用于将按整数格式读出的x转变成y
% ishex~=0表示输入为十六进制格式
% 注:要完毕该函数,你必须了解IEEE浮点数的格式
%
% xiahouzuoxin
% 2014.04.21
% =========================================================================

if nargin == 2
    if (ishex)
        x = hex2dec(x);
    end
end

[h w] = size(x);
y = zeros(h,w);

for i = 1:h
    for j = 1:w
        sign = bitget(x(i,j),32);
        exponent = bitget(x(i,j),24:31) * 2.^(0:7).';
        fraction = bitget(x(i,j),1:23) * 2.^(-23:-1).';
        y(i,j) = (-1)^sign * (1+fraction) * 2^(exponent-127);
    end
end

依据不同的输入情况(能够为十六进制的字符串表示或十进制数,但必须≤8Bytes),用法举个样例:

>> x='4565A012'
>> y=integer2float(x,1);

>> x = 23974881923;
>> y = integer2float(x)

后来发现,Matlab已经早有相应的方法了,

y = typecast(uint32(z),'single');

能够直接把z转化为解析为单精度浮点数。详细使用请參见

>> help typecast
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值