资源描述
- -
数字信号处理课程设计:
题目一:
DDS〔直接数字频率合成〕
原理及仿真
:王鹏飞
学号:9
专业:光学工程
一、 设计目的
利用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
信号的频率关系
设时钟的频率为固定值fc,在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为最小值〔Kmin=1〕时,一共有2n个数据组成一个正弦波。
根据以上讨论,可以得到如下频率关系。假设控制时钟频率为fc,ROM地址码的位数为n。当K= Kmin=1时,输出频率为Fo= Kminfc/2,此时最低输出频率fomin=fc/2,当k=kmax=2n-2时,最高输出频率fomax为fomax=fc/4,由上不难得出DDS的分辨率〔即频率间隔〕为f=fc/2n.
为了改变输出信号频率,除了调节累加器的K值以外,还有一种方法,就是调节控制时钟的频率fc。由于fc不同,读取一轮数据所花时间不同,因此信号频率也不同。用这种方法调节频率,输出信号的阶梯仍取决于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的仿真输出波形
输入dds_matlab(5,20,10,1)
此时由于采样频率低,一个周期采的点数太少,所以无法合成正弦波。
输入dds_matlab(5,200,10,1)
提高采样频率后,每周期采样点数增加,可以近似的合成正弦波。
- - word.zl-
展开阅读全文