基于matlab的直接数字频率合成DDS的仿真.docx
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字信号处理课程设计:
题目一:
DDS(直接数字频率合成)
原理及仿真
姓名:王鹏飞
学号:
专业:光学工程
一、设计目的
利用Matlab软件编程实现DDS(直接数字频率合成技术)。
二、DDS原理
1、DDS简介
自20世纪70年代以来,由于大规模集成电路的发展及计算机技术的普及,开创了另一种频率合成方法——直接数字频率合成法(DDS即Direct Digital Frequency Synthesis)。它突破了模拟频率合成法的原理,从“相位”的概念出发进行频率合成这种方法不仅可以给出不同频率的正弦波,而且还可以给出初始相位的正弦波,甚至可以给出各种任意波形。这在模拟频率合成法中是无法实现的。
相比传统频率合成技术,DDS具有如下一些优点:
⑴频率分辨率高,输出频点多,可达2的N次方个频点(N为相位累加器位数);
⑵频率切换速度快,可达us量级;
⑶频率切换时相位连续;
⑷可以输出宽带正交信号;
⑸输出相位噪声低,对参考频率源的相位噪声有改善作用;
⑹可以产生任意波形;
⑺全数字化实现,便于集成,体积小,重量轻。
在各行各业的测试应用中,信号源扮演着极为重要的作用。但信号源具有许多不同的类型,不同类型的信号源在功能和特性上各不相同,分别适用于许多不同的应用。目前,最常见的信号源类型包括任意波形发生器,函数发生器,RF信号源,以及基本的模拟输出模块。信号源中采用DDS技术在当前的测试测量行业已经逐渐称为一种主流的做法。
2、DDS基本原理
图1 以ROM(正弦查询表)为基础组成的DDS原理图在正弦波1周期内,按相位划分为若干等分,将各相位所对应的幅值A按二进制编码并存入ROM中。把1周期60等分,由于正弦波一周期为奇对称,半周期为偶对称,因此ROM中只需存储0到π/2范围内的幅值码。若以一周期60等分计算,在0到π/2之间共有15等分,其幅值在ROM中共占16个地址单元。因为24=16,所以可按4位地址吗对数据ROM进行寻址。现设幅值码为5位,则在0到π/2范围内编码关系如表1所示。
表1 正弦函数表(正弦波信号相位与幅值的关系)
幅度(满
地址码相位
幅值编码
度值为1)
0000 0.000 00000
0001 0.105 00011
0010 0.207 00111
0011 0.309 01010
0100 0.406 01101
0101 0.500 10000
0110 0.588 10011
0111 0.669 10101
1000 0.743 11000
1001 0.809 11010
1010 0.866 11100
1011 0.914 11101
1100 0.951 11110
1101 0.978 11111
1110 0.994 11111
1111 1.000 11111 信号的频率关系
设时钟的频率为固定值f c,在CLK的作用下,如果按照0000,0001,0010,…,1111的地址顺序读出ROM中的数据,即表1中的幅值编码,其正弦信号频率为f1;如果每隔一个地址读一次数据(即按0000,0001,0100,…,1110顺序),其输出信号频率为f2,且将比提高一倍,即f2=2f1;其余类推。这样,就可以实现直接数字频率合成器的输出频率的调节。
上述过程是由控制电路实现的,由控制电路的输出决定选择数据ROM的地址(即正弦波的相位)。输出信号波形的产生是相位逐渐累加的结果,这由累加器实现,称为相位累加器,如图1所示。在图中,K 为累加值,即相位步进码,也称频率码。如果K=1,每次累加结果的增量为1,则依次从数据ROM中读取数据;如果K=2,则每隔一个ROM地址读一次数据;其余类推。因此,K值越大,相位步进越快,输出信号波形的频率就越高。对于n位地址来说,共有2n个ROM地址,在一个正弦波中共有2n个样点(2n数据)。
如果K=2n,就意味着相位步进为2n,则一个信号周期中只取一个样点,它不能表示一个正弦波,因此不能取K=2n;如果K=2n-1,则一个正弦波中有两个样点,虽然在理论上满足了取样定理,但实际难以实现,一般地,限制K的最大值为K=2n-2,这样,一个波形中至少有4个样点,经过D/A变换,相当于四级阶梯波。在后继低通滤波器作用下,可以得到较好的正弦波输出。相应地,K为最小值(K min=1)时,一共有2n个数据组成一个正弦波。
根据以上讨论,可以得到如下频率关系。假设控制时钟频率为f c,ROM地址码的位数为n。当K= K min=1时,输出频率为F o= K min f c/2,此时最低输出频率f omin=f c/2,当k=k max=2n-2时,最高输出频率f omax为f omax=f c/4,由上不难得出DDS的分辨率(即频率间隔)为 f=f c/2n.
为了改变输出信号频率,除了调节累加器的K值以外,还有一种方法,就是调节控制时钟的频率f c。由于f c不同,读取一轮数据所花时间不同,因此信号频率也不同。用这种方法调节频率,输出信号的阶梯
仍取决于ROM单元的多少,只要有足够的ROM空间就能输出逼近正弦的波形,但调节比较麻烦。
三、设计代码和仿真结果
1、matlab实现DDS的函数代码
%fout: 输出频率
%Fs: 采样频率
%Bits: 累加器位数
%endtime:截止时间
%y: 输出正弦波
%t: 输出信号时间轴
function [y, t]=dds_matlab(fout, Fs, Bits, endtime)
delta_F=Fs/2^Bits;
t=2*pi*(0:2^Bits-1)/2^Bits;
LUT=sin(t);
subplot(211)
plot(t, LUT)
figure(1);
grid on
t=0:1/Fs:endtime;
N=length(t);
n=1;
y=zeros(1, N);
IND=zeros(1, N); % Input Frequency Word
k=floor(fout/Fs*2^Bits);
index=0;
while n<=N
IND(n)=index;
index=index+k;
index=mod(index, 2^Bits);
n=n+1;
end
m=IND;
IND=IND+1;
y=LUT(IND);
subplot(212)
plot(t,y)
figure(1);
axis([0 endtime -1.2 1.2]);
grid on
2、matlab的仿真输出波形