完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在进行一些大的算法编程时,经常会遇到处理一些大量的数据,而这些数据存储的格式却各不相同,
如DSP和FPGA中用到的是16进制表示的,而matlab中运算得到的是十进制,在不同的软件中执行 要用各自允许的格式,有时转换起来非常麻烦。 下面是我在实践中用matab处理十进制数据和十六进制数据之间的转换技巧,分享如下: 1、十进制转换成其它进制 t = fi(0,1,23,22); //严格的使用格式是fi(var,sign,wordlength,fractionwordlength),sign处的值为1或0, 1为有符号数,0为无符号数 t.data = var; //var 为变量名,可以是一个数,也可以是一个数组,一个数据文件中的变量 coef=t.hex; //将var的值转换成16进制后赋给coef fc=strcat('0x',coef);//这是将前缀加进去 对上面进行相应的改动 就可以实现转换成2进制和八进制的数 如:coef=t.bin //二进制 coef=t.oct //八进制 当然,首先要确定你的数据范围是多少,用多少位来表示,多少整数位,多少分数位 结果才不会出错 for example: >> var=0.5; >> t = fi(0,1,16,15); t.data = var; coef=t.hex fc=strcat('0x',coef) 运行结果如下: coef = 4000 fc = 0x4000 2、其他进制转换为十进制 现在介绍如何将一个DSP和FPGA中产生的hex格式的数据读入到matlab中, 并转换成10进制,进行一些分析和信号处理操作,然后再转换 从而来指导DSP和FPGA进行相应的信号处理工作 Ts=1/50e6; fid = fopen('test.txt'); test = fscanf(fid, '%sn'); tt = fi(0,1,16,15); x1 = zeros(1,length(test)/4); for i = 1:length(test)/4 tt.hex = test((4*i-3):4*i); x1(1,i)=tt.data; end x=x1(1:n); %n为付立叶变换的点数,是2的幂,一般取512或1024 %***************1.正弦波****************% fs=50e6;%设定采样频率 N=1024; n=0:N-1; t=n/fs; figure(1); subplot(211); plot(1:length(x),x,'b');%作输入信号的时域波形 %stem(x); hold on; xlabel('t'); ylabel('x'); title('输入信号x时域波形'); grid on; %进行FFT变换并做频谱图 y=fft(x,N);%进行fft变换 mag=abs(y)*2/N;%求幅值 f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换 figure(1); subplot(212); plot(f,mag,'b');%做频谱图 hold on; xlabel('频率(Hz)'); ylabel('幅值'); title('输入信号x幅频谱图N=1024'); grid; |
|
相关推荐
|
|
1533 浏览 1 评论
200圆!求助大佬给一份VSG并网和离网模式的simulink仿真
1817 浏览 0 评论
MATLAB(3)--矩阵的引用(sub2ind、ind2sub、reshape函数使用)
2634 浏览 0 评论
2970 浏览 0 评论
4094 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 05:43 , Processed in 0.590636 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号