首页 试验Visual DSP

试验Visual DSP

举报
开通vip

试验Visual DSP试验Visual DSP 试验Visual DSP++中给ADSP-TS用的FFT函数 技术 2009-02-23 16:57:30 阅读95 评论0 字号:大中小 订阅 昨天BOSS说:“试着在ADSP上做个FFT什么的试试。”我说:“是自己写算法 吗?”BOSS说:“用现成的就行。” 我去年自己用C写过FFT的程序,感觉并不难。可是自从看了清华大学出版社,胡广 书的《数字信号处理,理论、算法不实现,第二版,》的4.4~4.6这些章节后,发现想要写 出一个优化的FFT程序真不容易,如果还要使用汇编,那真是...

试验Visual  DSP
试验Visual DSP 试验Visual DSP++中给ADSP-TS用的FFT函数 技术 2009-02-23 16:57:30 阅读95 评论0 字号:大中小 订阅 昨天BOSS说:“试着在ADSP上做个FFT什么的试试。”我说:“是自己写算法 吗?”BOSS说:“用现成的就行。” 我去年自己用C写过FFT的程序,感觉并不难。可是自从看了清华大学出版社,胡广 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 的《数字信号处理,理论、算法不实现,第二版,》的4.4~4.6这些章节后,发现想要写 出一个优化的FFT程序真不容易,如果还要使用汇编,那真是……。 所以我很乐意使用现成的FFT代码。 看手册50_TS_cc_man.pdf的Run-Time Library Reference,找到了名为cfft的凼数, 用于计算复信号的FFT。值得庆幸的是雷达中的IQ数据都是复数据,要不然还得使用上面 提到的那本书的 4.3.3“实输入数据时的FFT算法”。 文档中有一个例子说明如何使用这个凼数,我仿照例子写了一个: /***************************************************************************** * test1_fft.c *****************************************************************************/ #include //FFT点数 #define NDataLen 256 /* Place program arguments in the following string, or delete the definition if arguments will be passed from the command line. */ const char __argv_string[] = "-abc -xyz"; int main( int argc, char *argv[] ) { /* Begin adding your custom code here */ //256点时域数据存储区 complex_float in_buf[256]; //256点频域数据存储区 complex_float out_buf[256]; //旋转因子存储区 static complex_float W[3*NDataLen/4]; //临时缓冲区 complex_float temp[256]; //计算旋转因子 twidfft(W,NDataLen); //FFT运算 cfft(in_buf,temp,out_buf,W,1,NDataLen); return 0; } 程序写好了,我想测试测试,想到Visual DSP++有图形输出的功能,试验应该不麻烦, 但是后来发现还是没有使用Matlab来得方便。 所以决定用Matlab生成测试数据,并将计算结果用Matlab来呈现。虽然Matlab有 Embedded IDE Link VS可以直接连接Visual DSP++和Matlab,但我不太会用,所以使 用比较原始的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ,文件。 由于cfft用到一种结构体类型complex_float,如果不查明这种类型的具体定义,那么 就无法在Visual DSP++和Matlab间正确传递数据。 我在complex.h中找到了定义: … #define complex_float _complex_float … typedef struct { float re; /*{Real}*/ float im;/*{Imaginary}*/ }_complex_float; 一个complex_float变量,就是将两个float变量拼在一起,一个 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示实部,一个表示 虚部。 现在可以做传递数据的相关工作了: 首先编写了两个用于从二进制文件读取数据的凼数和将数据写入二进制文件的凼数: function value=readBinFile(filename,type) f=fopen(filename); if (-1==f) error('Cannot open file!'); end switch (type) case 'complex_float', value=fread(f,'float'); value=value(1:2:end)+j*value(2:2:end); otherwise, value=fread(f,type); end fclose(f); function writeBinFile(filename,nums,type) f=fopen(filename,'w'); if (-1==f) error('Can not open file!'); end switch (type) case 'complex_float', temp=zeros(1,2*numel(nums)); temp(1:2:end)=real(nums); temp(2:2:end)=imag(nums); nums=temp; fwrite(f,nums,'float'); otherwise, fwrite(f,nums,type); end fclose(f); 简单的操作流程是这样的: 首先,开始调试C程序,设置好断点: 运行到第一个断点时,用Matlab计算测试用的时域数据,在Command Window输 入以下代码: >> t=0:255; >> fs=1/64; >> s=exp(j*2*pi*fs*t); >> writeBinFile('c:\sour.dat',s,'complex_float'); 一个复正弦信号就被写入c:\sour.dat了。 切换到Visual DSP++,将c:\sour.dat的数据填充到DSP的存储器中: 单击OK按钮,导入成功。 让程序继续run,知道运行到下一个断点,此时FFT已经计算完毕,需将计算结果导出到数据文件中: 单击OK导出成功。 切换至Matlab,输入以下代码: >> v=readBinFile('c:\dest.dat','complex_float'); >> plot(abs(v)); 就得到了DSP计算的频谱幅度的图形了: 下图是Matlab自己计算的频谱的幅度,比较一下: >> figure;plot(abs(fft(s)));
本文档为【试验Visual DSP】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_435706
暂无简介~
格式:doc
大小:70KB
软件:Word
页数:7
分类:互联网
上传时间:2018-04-28
浏览量:16