DDS原理及设计实现

本文深入探讨了直接数字频率合成(DDS)技术,介绍了DDS的基础原理、设计思路以及MATLAB实现的详细步骤。DDS因其高分辨率、快速转换时间和低功耗等优势在多个领域广泛应用。文章通过阐述DDS的相位控制、频率控制和PROM存储等核心概念,并提供完整的MATLAB工程代码,帮助读者理解DDS的工作机制并进行实际操作。
摘要由CSDN通过智能技术生成

目录

1.基础介绍

2.DDS设计

3.DDS实现仿真

4.完整matlab工程代码


1.基础介绍

DDS是一种新的频率合成技术——直接数字频率合成(DDS),它以有别于其它频率合成方法的优越性能和特点成为现代频率合成技术中的姣姣者。DDS是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写。与传统的频率合成器相比,DDS具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。DDS是现今一种重要的设计手段,高速集成电路的发展进一步改善了DDS的性能,它与传统技术相结合,组成的各种混合方案将频率源的性能提高到一个新的水平,因而未来的DDS不仅应用于传统上需要使用信号源的领域,而且必将开拓许多新的应用领域。

DDS在相对带宽、频率转换时间、相位连续性、正交输出、高分辨力以及集成化等一系列性能指标方面远远超过了传统频率合成技术所能达到的水平,为系统提供了优于模拟信号源的性能。其已广泛应用于通讯、导航、雷达、遥控遥测、电子对抗以及现代化的仪器仪表工业等领域。

DDS是以采样频率做源生成多个频率相位可调可控的正余弦信号或其他信号。其基本单元有相位控制单元,频率控制单元,输出控制单元,波形存储PROM单元:

上图中,外部输入频率控制参数和相位控制参数,将控制参数转变为读取波形存储文件的读取起始位置参数和间隔参数,将转换后的参数给输出控制单元去控制读取存储波形的PROM,PROM的输出即对应频率和起始相位的输出波形。

相位控制:为起始相位控制上图中,外部输入频率控制参数和相位控制参数,将控制参数转变为读取波形存储文件的读取起始位置参数和间隔参数,将转换后的参数给输出控制单元去控制读取存储波形的PROM,PROM的输出即对应频率和起始相位的输出波形。

频率控制:设输出频率为f,采样频率Fs,一个离散正弦信号表示为:

两个相邻采样点之间的相位差即相位步进:[奈奎斯特定理得∆θ<π]

因此频率为:

即可通过控制相位步进的方式达到控制生成特定的频率。

2.DDS设计

1、设计DDS的输入控制参数和输出波形数值都为整数。

2、设计输出值m的值域范围:

例:若目标输出一个1MHz<=f<=2MHz的正弦信号,采样率为20MSPS,值域范围为[-M,M-1],幅度精度d=1即整数输出【要求2*M>=(FS/FL)/2】。

论证:采样率为20MSPS,最小1MHz的信号一个周期将被采样20次,即产生20个采样点,若要使得该20个采样点不产生量化损失,则2*M>=(20M/1M)/2。

【最小频率波形波峰值和波谷值至少要有20/2个量化值,就不会产生量化损失】

3、设计频率控制精度:

例:同第2点中的例子,频率控制参数为w,设计频率控制精度为FxHz,即频率控制的1个单位代表FxHz,则频率控制最大范围W=Fs/Fx。

论证:由上式可知Fx=Fs/W,由第一章可知,最小相位步进为:

4、设计PROM波形存储:

由第2知,值域范围为[-M,M-1],PROM存储的波形实质为相位p=θ/θmin和m的对应关系,对于正余弦波都可存储一个波形的数据最大θ=π,即最大存储数为π/θmin,通常p的范围和m的范围不对等,因此无需建立p和m的全映射的波形存储表,PROM深度可按最小范围建立,对另一个范围进行缩放。

PROM的输出dout为:

5、设计输出控制逻辑:

由上可知,读取PROM的读地址为raddr有:

PROM输出为dout,输出数据波形wout:

j = not j[取反]

wout = dout   j == 0;

wout = -dout   j == 1;

3.DDS实现仿真

1、输出值m的值域范围[-32,32],采样率20MSPS。

2、频率控制精度为Fx=20Hz,对应的:

即w=1,相位步进对应为6.283*10^-6。

3、波形存储表:

p的最大存储数:π/θmin=500000,又因为M=32,所以PROM存储半个正弦周期波形值为[0-->32-->0]存储64个点即可,余弦同理[32-->0-->-32]。

缩放比例为:500000/64=7812.5

p

dout

p

dout

p

dout

p

dout

0

0

16

23

32

32

48

23

1

2

17

24

33

32

49

21

2

3

18

25

34

32

50

20

3

5

19

26

35

32

51

19

4

6

20

27

36

31

52

18

5

8

21

27

37

31

53

16

6

9

22

28

38

31

54

15

7

11

23

29

39

30

55

14

8

12

24

30

40

30

56

12

9

14

25

30

41

29

57

11

10

15

26

31

42

28

58

9

11

16

27

31

43

27

59

8

12

18

28

31

44

27

60

6

13

19

29

32

45

26

61

5

14

20

30

32

46

25

62

3

15

21

31

32

47

24

63

2

44、输出频率为f=1.234MHz的信号,w=f/Fx,除以缩放比例后w为7.9。

5、按照PROM读取逻辑即输出控制逻辑,完成PROM的读取和波形的产生。

4.完整matlab工程代码

%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
close all;
clc;
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
Fx=20;%频率控制精度20Hz
Fs=20E6;%采样率20MSPS
M=32;%输出值的最大绝对值,值域-32--+31
dert_that_min = 2*pi*Fx/Fs;%相位步进
p_max = pi/dert_that_min;%500000
prom_len = round(p_max/7812.5);%p_max/x=2*M,缩放比列7812.5=p_max/64
p1 = zeros(1,prom_len);
dout = zeros(1,prom_len);%生成波形PROM
for i = 1:prom_len
    p1(i) = i;
    dout(i) = round(M*sin((i-1)*7812.5*dert_that_min));
end

%--------------------------------------------------------------------------------------------------------

subplot(4,1,1);
plot(dout,'b');grid;%观察波形文件的波形
title('波形文件的波形');
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
fout = 1.234E6;%设置生成的目标频率
w = (fout/Fx)/7812.5;%计算对应频率的相位步进
N = 8192; %生成波形点数
wout = zeros(1,N);
p=1;
j=0;
for i = 1:N
    if(mod(j,2)==0)%波形反向
        wout(i) = dout(round(p));
    else 
        wout(i) = -dout(round(p));
    end 
    p = p+w;%生成波形文件读地址
    if(round(p)>=prom_len+1)
        p = p-prom_len;
        j = j+1;     
    end 
end

%--------------------------------------------------------------------------------------------------------

subplot(4,1,2);
plot(wout(1:200),'b');grid;%观察DDS输出的波形
title('DDS输出的波形');
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
f_label = zeros(1,N);%将采样点换算频域横坐标轴--频率
for i = 1:N
    f_label(i) = i*Fs/N;
end
subplot(4,1,3);
plot(f_label,abs(fft(wout)),'b');grid;%观察DDS输出信号的频谱
title('DDS输出信号的频谱');
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
%--------------------------------------------------------------------------------------------------------
test_i = 1:1:N;%生成离散正弦对比信号
time=test_i/Fs;
test=sin(2*pi*fout*time);

%--------------------------------------------------------------------------------------------------------

subplot(4,1,4);
plot(f_label,abs(fft(test)),'b');grid;%观察对比信号的频谱
title('对比信号的频谱');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积文致远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值