基于CORDIC算法的实现方法

基于lut的dds的设计
dds(direct digital synthesis)直接数字频率合成技术由usa j.tierncy首先提出。它是一种以数字信号处理理论为基础,从相位概念出发直接合成所需波形的一种新的全数字技术的频率合成方法。dds主要出现在数字混频系统中。在数字混频中,通过dds产生正交的本地振荡信号即正、余弦信号与输入信号相乘实现频谱搬移,如通信系统的调制、解调。目前fpga实现dds有三种途径:基于iir滤波器的实现方法、基于查找表lut的实现方法以及基于cordic算法的实现方法。其中采用lut的方法较为通用且比较容易实现。
1 基于lut的dds理论
    一个典型的基于lut的dds系统由相位累加器和波形存储器两部分构成,如图1所示。图中相位累加器的位宽为nbit,步进值为μ,lut的深度n为2n,宽度为lbit。lut中依相位顺序存储一个周期的波形数据。
图1 基于lut的dds架构
2 matlab 仿真
图2 相位累加器位宽为4bit时lut地址与存储数据的对应关系
如图2所示,我们要制作地址位宽为10bit数据位宽为32bit的lut查找表。matlab源码如下:
clear all
close all
clc
fs = 44100;%采样率
fc = 1000;
n  = 1024;%1024点一个正玄周期
t =0:2*pi/(n-1):2*pi;
sin_dds = sin(t);
figure,
hold on
plot(t,sin_dds,'*');
legend('sin');
grid;
hold off
图3 matlab 1024点1个周期的正玄波
3 fpga仿真
    整个仿真结构如图1所示,由相位累加控制器和sin波形存储器组成。仿真生成采样率为44.1khz @1khz正玄波和余弦波(相位相差90度)。
tb_dds源码:
1.     `timescale 1ns / 1ps  
2.     `define null 0  
3.     module tb_dds();  
4.       
5.     parameter khz1 =44;  
6.     parameter khz2 =22;  
7.     parameter khz4 =11;  
8.     reg clk;   
9.     initial begin   
10.   clk = 0;   
11.   #313333 clk = 0;   
12.   forever #11.072 clk = ~clk;   
13. end//45.1584mhz  
14.   
15. reg reset_n;   
16. initial begin   
17.   reset_n = 1;   
18.   #10000 reset_n = 0;   
19.   #100000 reset_n = 1;   
20. end   
21.   
22. reg [9:0] addr;  
23. reg [9:0] cnt;  
24. reg [31:0] k;  
25. integer fb;  
26.   
27. wire signed [31:0]     sin;  
28. wire signed [31:0]     cos;  
29.   
30. //phase accumulation controller  
31. always @(posedge clk or negedge reset_n) begin  
32.   if(!reset_n) begin  
33.       addr <= 0;  
34.       cnt  <= 0;  
35.     end  
36.   else if(cnt == khz1-1) begin  
37.     cnt <= 0;  
38.     addr <= addr +10'd1;  
39.   end  
40.   else begin  
41.     cnt <= cnt + 1;  
42.     addr <= addr;  
43.   end  
44. end  
45.   
46. //reg [8:0] i;//88.2khz  
47. reg [9:0] i;//44.1khz sample rate  
48. reg signed [31:0] sin_slow;  
49. reg signed [31:0] cos_slow;  
50.   
51. always @(posedge clk or negedge reset_n) begin  
52.   if(!reset_n) begin  
53.     i <= 0;  
54.     sin_slow <= 0;  
55.     cos_slow <= 0;  
56.     k <=0;  
57.     fb = $fopen(sin.dat,w);  
58.     if(fb == `null) begin  
59.       $display(can not open sin.dat);  
60.       $finish;  
61.     end   
62.   end  
63.   else begin  
64.     i <= i+1;  
65.     if(i == 0) begin  
66.       sin_slow <= sin;  
67.       cos_slow <= cos;  
68.       k <= k +1;  
69.       $display(time=[%d],%d,$realtime,sin);  
70.       $fwrite(fb,%d ,sin);  
71.       if(k == 4096) begin   
72.         $fclose(fb);  
73.         $stop;  
74.     end  
75.     end  
76.   end   
77. end   
78.   
79.   
80.   
81. dds_rom u_dds_rom(   
82.        .clk(clk),  
83.        .addr(addr),//0-1023 1t  
84.        .sin(sin),  
85.        .cos(cos)  
86.        );  
87. endmodule  
仿真结果:
  生成sample rate 44.1khz@1khz的正玄和余弦波相位相差90°。
图4 modelsim 仿真结果
matlab fft分析:
图5 fft分析结果
由图5可知产生的正玄波频率为1khz。基于lut的dds设计完成,此节将是后期基于fpga数字信号处理的基础和关键。


IP4776CZ38构成的HDMI接口技术
接触器和继电器的知识详细资料说明
激光检测在汽车制造过程中的应用
蓝牙,共享单车的新伙伴
大尺寸磊晶技术突破 GaN-on-Si基板破裂问题有解
基于CORDIC算法的实现方法
我国将成为韩国三星全球超级研发中心
Vishay推新款VRPower®集成式DrMOS功率级解决方案
这家神秘公司欲造新型AI:虚拟现实加人工智能
小米智能家居APP有哪些_小米智能家居app怎么用_小米智能家居遥控中心
在开发生命周期的早期降低安全风险
电阻器在电动机控制器中的应用
三菱飞机计划将开发符合美国需求的70座新机型
谈谈人工智能的潜在风险
白光干涉仪和激光共聚焦显微镜的区别
如果贴片电感坏了有什么现象你知道吗
全球移动供应商协会揭示2020年关键5G里程碑
Samtec基于Tiger Eye触点系统打造性能优异的耐用型连接器产品
联创光电研制出世界首台兆瓦级高温超导直流感应加热设备
乐视经济危机待解,贾跃亭喊话不管用 股价继续暴跌