找回密码
 注册
关于网站域名变更的通知
查看: 354|回复: 1
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-3-10 10:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
( A! U. ]9 f4 a6 U1 O4 L
CCS3.3是一款DSP的集成开发环境(IDE)。在做DSP开发时,为验证算法,常常需要使用matlab进行算法验证,验证算法就需要数据。因此,一种交互的方法是:
6 `3 c: d* ~6 l/ z
# E$ {7 C2 H7 }1 m
  • 使用DSP开发板连接CCS
  • 用CCS3.3菜单中的“File->Data->Save..”功能导出DSP内存中的数据到PC的.dat文件中
  • 使用Matlab读取.dat文件,进行数据处理
    % A: W* R1 J1 A# j

1 G$ n+ J( X0 c  h1 O/ n
7 {' K0 q. Y" l  J' h下面给出使用Matlab读取CCS导出的dat文件的方法:* q( [. ^) E9 J

0 K# ?8 E+ ?, w6 [
  • % =========================================================================
  • % 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);
    & j- B0 G; V$ K4 m, }5 B6 M
      
& E' a* C& [( l0 y2 H) l. a6 O  _6 x5 r
程序中默认DSP内存中数据的存储格式为整数类型,而对于浮点型DSP如TMS320C6713B,常常在内存中是float或double格式存储的,8 J& h( _4 j  m9 L( l; i, k6 |$ H

5 Y) e; Y' B# i6 B这时,我们还需要一个转化为浮点数的操作,因此我写了一个转化为float类型的函数,6 h8 b' G2 b! F

5 J* a- P" \" `( Y) k4 ]! C
  • 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" h5 ?. w4 w0 C4 e+ C
  9 e8 Z& Z( M4 E" U4 V8 d! U1 A  ]

5 \5 I. K( \" B+ a4 l+ G$ z; Z根据不同的输入情况(可以为十六进制的字符串表示或十进制数,但必须≤8Bytes),使用方法举个例子:# J% H5 X- _5 F5 k) g+ ^
) g: ~( x0 F' E
  • >> x='4565A012'
  • >> y=integer2float(x,1);
  • >> x = 23974881923;
  • >> y = integer2float(x)6 [5 w8 {/ n5 n4 Z& h. r6 Z+ V3 [

5 g5 Y3 [1 \8 x. ?. {8 b- @3 y" O8 q# X7 S
后来发现,Matlab已经早有对应的方法了,' U3 Q( r4 T+ s5 _

2 T( o1 Z: ?8 k" Z
  • y = typecast(uint32(z),'single');
    : R3 u3 u1 S7 ?7 T, d0 `4 N& W# L
4 C4 W- E; E5 M# C& ^3 U5 R8 O
可以直接把z转化为解析为单精度浮点数,具体使用请参见
% S  P, M5 O: ^3 s( \2 x# b( D; e3 z5 `
  • >> help typecast
    % i2 G& D' w1 @

' [3 T8 c" c9 {& L/ p' G6 i8 j7 P- f1 a" m
  • TA的每日心情

    2019-11-29 15:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-3-10 16:48 | 只看该作者
    导出CCS3.3数据及使用matlab处理的方法
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-4 09:47 , Processed in 0.125000 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表