基于cordic算法的數字下变频实现笔记.docxVIP

基于cordic算法的數字下变频实现笔记.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于cordic算法的數字下变频实现笔记

基于cordic算法的数字下变频的实现 ---------孙月 2014/12/11 Matlab实现的参数 采样频率 fs=62e6; 调制频率 f1=15.5e6; 采样点数 N=1024*32; n=1:N; 时域时间“t” t=n/fs; 频域里的频率参考 freq=(-N/2:N/2-1)/N*fs; 在一个matlab脚本中,时域到频域转换之后。它们的点数是一一对应的,均为N个点。 在时域中N个点,只是离散的点与时间“t”没有关系,作图时plot(t,x)才建立的关系,可以理解为把N个点放在了时间t上。频域上也是如此(一定要真正理解)。 主要步骤 用wgn函数产生N点的白噪声x; 再将白噪声信号x,用2M的低通滤波器,产生零中频的带宽信号x_0; 用调制信号cos(2*pi*fi.*t)与信号x_0相乘,变频到15.48M为中心的带宽信号sig。将信号sig扩大2^14倍后,以2进制补码的形式存入到txt文本中,作为硬件实现时的测试激励信号; 在matlab中,用cordic算法实现将信号分为I,Q两路,并作时域,和频域分析。 同时在matlab中直接调用cos,sin函数,产生NCO算法,验证4中的cordic算法是否正确。 基于ise平台,实现cordic算法,并将I,Q两路输出存在txt文本中,再导入到matlab中,做频谱分析,与(4)中matlab实现的cordic算法结果比对,验证硬件实现是否正确。 下面是具体实现,以及遇到的问题 Wgn(1,N,1)是产生一维的N个点,平均功率为1. 低通滤波器的实现有两种方式 直接调用fdatool工具,设置参数,低通滤波时采样频率fs2fp。带通时,fs2(fh-fl),将fs设置的稍大一点性能更好 。生成的系数,通过“file”—”export”导出,在matlab中保存以num_1.mat格式保存在该件夹中。在本脚本中使用时,fir_1=load(Num_1.mat),fir_1.Num_1即为各系数。 直接使用fir1(N,Wn)函数,直接生成一个N级的FIR数字低通滤波器,返回一个长度为N+1的向量Wn=fpass/(fs/2). 让信号通过低通滤波器,可以直接引用filter 函数,x_0=filter(coefficient,1,x),x_0为滤除高频成分的输出信号。X是输入信号。 调制信号与信号x_0相乘,两个相量相乘可以采用点乘“.*”,变频到15.48M为中心的带宽信号sig。此处输出的信号sig,会作为硬件的测试输入数据,参与以后的算术运算,所以要以二进制补码的形式保存在一个txt文本里。这里又要用到一个函数fi, FI=fi(MAX,1,16)即把信号sig中最大的数MAX=1(由于此处做了归一化处理)用16位字长的二进制数表示,其中1,代表有一位是符号位,整数位一位,小数部分是14位,共16位。最后将sig归一化的结果*2^14后用round 取整,得y(i), 即保留到了sig信号的小数点后14位。此处还需要注意到是,负数y(i)转成补码时,将y(i)+2^16,再转换成二进制,求得二进制负数的补码 2^16次方对于16位二进制是一个周期,如y=-5,-5的补码=1111_1111_1111_1011, 5的补码=0000_0000_0000_0101,16位,2^16+(—5)=65531,65531的二进制=1111_1111_1111_1011.与-5的补码相同。 在matlab中产生cordic算法 Cordic算法有两种工作模式,一种是旋转模式,一种是向量模式。旋转模式是赋初值x(0)=1,y(0)=0,通过迭代使最后的旋转角度Zi趋于0.X(i)=cos(μ),y(i)=sin(u). 而向量模式不断的使y(i)趋于0。本文采用的是旋转模式,sig(n)即为x(1),y(1)=0.sig每输入一个数据相位累加2*pi*f1/fs,经过cordic算法的n级循环后,输出I,Q两路信号。cos,sin运算以2*pi为周期,相位累加超过2*pi时,将其转换到[0:2*pi]域,即累加的角度angle_add-2*pi。此处不能用floor函数,原因未知????由于cordic算法i次旋转的角度,为atan(1/2^(-i+1)),N次旋转之后的累加旋转角度在(-99度,99度)之间。所以在进入到cordic算法的第一级时,要将[0:2*pi]域的累加相位在转换

文档评论(0)

fglgf11gf21gI + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档