基于DDS原理的频率信号产生
一、实验原理
DDS是通过对于预先存储起来的基准信号进行一定间隔的采样,将样点重新组合成所需各种频率信号的技术。可以通过存储的不同类型的基准信号,产生与基准信号相同类型,不同频率、初相的信号。
参考所给资料,用正弦信号的产生过程来说明其原理: 一个纯净的单频信号可表示为:
utUsin2foto (1-1)
只要它的幅度U和初始相位o不变,它的频谱就是位于fo的一条谱线。为了分析简化起见,可令U=1,o=0,这将不会影响对频率的研究。即:
utsin2fotsint (1-2)
如果对(2-2)的信号进行采样,采样周期为Tc(即采样频率为fc),则可得到离散的波形序列:
unsin2fonTc (1-3) 相应的离散相位序列为:
n2fonTcn n0,1,2... (1-4) 式中:
2foTc2fofc (1-5)
是连续两次采样之间的相位增量。根据采样定理:
1fofc2 (1-6) 只要从(2-3)出来的离散序列即可唯一的恢复出(1-2)的模拟信号。从(1-2)可知,是相位函数的斜率决定了信号的频率;从(1-5)可知,决定相位函数斜率的是两次采样之间的相位增量。因此,只要控制这个相位增量,就可以控制合成信号的频率。现将整个周期的相位2分成M份,每一份为2号的频率:
foKKfc2TcM (1-7)
M,若每次的相位增量选择为的K倍,即可得到信
相应的模拟信号为:
Kutsin2fctM (1-8)
式中K和M都是正整数,根据采样定理的要求,K的最大值应小于M的1/2。
由上述原理,在采样频率一定的情况下,可以通过控制两次采样之间的相位增量(不得大于π)来控制所得离散序列的频率,根据输出信号地址选取相应基准频率信号样点组成各种需要的频率信号即可。DDS的字长决定了正弦/余弦基准信号样点的个数和所产生频率信号的量化精度。基准信号中存储了一个正弦信号周期的采样值,而这些采样值采样频率就是DDS设备的采样频率,这个基准正弦信号就是DDS的频率基准信号。DDS信号的产生就是基于对一个基准频率信号的所有采样值有选择地输出从而产生基准信号频率整数倍的信号。在用matlab仿真时,可以简化对存储设备的仿真,直接产生采样值,存储在一个数组中。
二、程序说明
以正弦信号的产生为例
1、程序主体流程图
开始产生基准频率信号S(n),并存储根据Asin在存储区寻址,找到对应的S(n)根据初始相位计算其对应地址增量将每次寻址得到的S(n)依次排列,即得到所需频率信号计算A(n),根据A(n)确定选择地址Asin结束2、程序设计说明
在实验环境matlab2010a中产生了一个单频正弦波,显示程序出入口参数的语句如下: function[y,t]=DDSforsin(f,Fs,N,et, theta0);
(1)入口参数及其含义 f:输出的信号频率 Fs:采样频率 N:频率信号字长 et:信号结束时间 theta0:初始相位 (2)出口参数及其含义
y:输出的频率信号 t:时间
三、实验结果及验证
1、正(余)弦信号的产生(DDSforsin.m)
(1)、输出的信号频率:128,采样频率:2048,频率信号字长:10,信号结束时间:0.1,初始相位:0。
在实验环境matlab2010a的命令窗口中输入:
DDSforsin(128,2048,10,0.1,0);
得到: a、 基准信号时域波形
基准信号时域波形600400200Sn(t)0-200-400-60001234567b、输出信号的时域波形和频域波形
输出信号10.80.60.40.2
信号幅频特性0.060.040.020-1500-1000-5000500100015000-0.2Hz信号相频特性420-2-4-1500-1000-500050010001500y(t)-0.4-0.6-0.8-100.010.020.030.040.050.060.070.080.090.1频率=128.0,采样频率=2048.0,字长=10.0,时长=0.1,初相=0.0
Hz
(2)、输出的信号频率:256,采样频率:2048,频率信号字长:10,信号结束时间:0.1,初始相位:0。
在实验环境matlab2010a的命令窗口中输入:
DDSforsin(256,2048,10,0.1,0);
得到:
a、基准信号时域波形
基准信号时域波形600400200Sn(t)0-200-400-60001234567b、
输出信号的时域波形和频域波形
输出信号10.80.60.40.2
信号幅频特性0.040.030.020.010-1500-1000-500050010001500y(t)0-0.2-0.4-0.6-0.8-100.010.020.030.040.050.060.070.080.090.1Hz信号相频特性420-2-4-1500-1000-500050010001500频率=256.0,采样频率=2048.0,字长=10.0,时长=0.1,初相=0.0
Hz
(3)、输出的信号频率:128,采样频率:2048,频率信号字长:10,信号结束时间:0.1,初始相位:0。
在实验环境matlab2010a的命令窗口中输入:
DDSforsin(128,2048,10,0.1,0.5*pi);
得到:
a、基准信号时域波形
基准信号时域波形600400200Sn(t)0-200-400-60001234567
b、输出信号的时域波形和频域波形
输出信号10.80.60.40.2信号幅频特性0.060.040.020-1500-1000-5000500100015000-0.2Hz信号相频特性420-2-4-1500-1000-500050010001500y(t)-0.4-0.6-0.8-100.010.020.030.040.050.060.070.080.090.1频率=128.0,采样频率=2048.0,字长=10.0,时长=0.1,初相=1.57
小结:通过上述三组参数设置与信号的时域和频域图像可以验证正弦信号生成程序的合理性和参数的可调性
同样的方法,适当调整程序部分细节可以生成三角信号和方波信号。 2、方波信号的产生(DDSforfb.m)
在实验环境matlab2010a的命令窗口中输入:
DDSforfb(50,2048,20,0.1,0);
得到:
a、基准信号时域波形
6x 105
Hz基准信号时域谱420-2-4-601234567b、输出信号的时域波形和频域波形
产生信号的时域谱0.0810.80.60.40.20-0.2-0.4-0.6-0.8-100.010.020.030.040.05t0.060.070.080.090.1
产生信号幅频特性0.060.040.020-1500-1000-500050010001500Hz产生信号相频特性420-2-4-1500-1000-500050010001500
Hz3、三角波信号的产生(DDSforsawtooth.m) 在实验环境matlab2010a的命令窗口中输入:
DDSforsawtooth(200,4096,20,0.1,0);
得到:
a、基准信号时域波形
6x 105基准信号时域谱420-2-4-601234567b、输出信号的时域波形和频域波形
产生的信号时域谱0.0610.80.60.40.20-0.2-0.4-0.6-0.8-100.010.020.030.040.05t0.060.070.080.090.1
产生的信号幅频特性0.040.020-2500-2000-1500-1000-50005001000150020002500Hz产生的信号相频特性420-2-4-2500-2000-1500-1000-50005001000150020002500四、实验总结
Hz 通过本次实验加深了对DDS技术的了解,直接数字频率合成器(Direct Digital Synthesizer)是从相位的概念出发直接合成所需波形的一种频率合成技术。是将一个(或多个)基准频率变换成另一个(或多个)合乎质量要求的所需频率的技术。一个直接数字频率合成器由相位累加器、加法器、波形存储ROM、DA转换器和低通滤波器构成。与传统的频率合成技术相比,DDS具有低成本、低功耗、高分辨率和快速转换时间等优点。
在本次实验的过程中,对matlab的程序结构和数据存储有了更深的理解,熟悉Microsoft Visio的绘图操作,在与同学的讨论和交流中明白了团队合作精神的重要性,是一次不可多得的从理论到实践的宝贵历程,获益匪浅。
五、附录(matlab代码)
1、正(余)弦信号
function [y,t]=DDSforsin(f,Fs,N,et,theta0) big=16; %图形窗口字体大小 %%入口参数及其含义
% f:输出的信号频率 % Fs:采样频率
% N:频率信号字长 % et:信号结束时间 % theta0:初始相位
%%产生基准频率信号 t=2*pi*(0:2^N-1)/2^N;
Sn=floor(sin(t)*2^(N-1))-1; %基准信号 figure;
plot(t,Sn);title('基准信号时域波形','fontsize',big); %绘出基准信号时域波形 ylabel('Sn(t)','fontsize',big); grid on;
%%产生输出信号地址 t=0:1/Fs:et;
N_sig=Fs*et+1; %输出频率信号采样点个数 delta_f=Fs/2^N; %最小频率间隔
delta_A=floor(f/delta_f); %相邻样点地址增量 delta_theta0=2*pi/Fs*delta_f; %最小相位间隔 Ap=floor(theta0/delta_theta0); %地址增量 n=0:N_sig-1;
A(n+1)=mod(n*delta_A+Ap,2^N); %所需输出信号的地址 A_sin=mod(floor(A/(Fs/delta_f/2^N)),2^N);%基准信号地址
%%产生输出频率信号 for i=1:N_sig
y(i)=Sn(A_sin(i)+1)/2^(N-1); %产生所需信号 end figure; plot(t,y);
title('输出信号','fontsize',big); %绘出频率信号时序波形
xlabel(sprintf('频率=%.1f,采样频率=%.1f,字长=%.2f',f,Fs,N,et,theta0),'fontsize',12); ylabel('y(t)','fontsize',big); axis([0 et -1.2 1.2]); grid on; figure;
[f,yf]=T2F(t,y); subplot(211);
plot(f,abs(yf));title('信号幅频特性','fontsize',big); xlabel('Hz','fontsize',big); grid on;
subplot(212);
plot(f,angle(yf));title('信号相频特性','fontsize',big); xlabel('Hz','fontsize',big); grid on; end
=%.1f,时长=%.1f,初相2、三角波信号
function DDSforsawtooth(f,Fs,N,et,theta0) big=16; %图形窗口字体大小 %%入口参数及其含义
% f:输出的信号频率 % Fs:采样频率 % N:频率信号字长 % et:信号结束时间 % theta0:初始相位 %%产生基准频率信号
Nper=2^N; %基准信号采样个数 t=2*pi*(0:2^N-1)/2^N; %基准信号相位 S=sawtooth(t,0.5);
Sroot=floor(S*2^(N-1))-1; %基准信号
%%产生输出信号地址
N_sig=Fs*et+1; %输出频率信号样点个数 delta_f=Fs/2^N; %最小频率间隔 maxAsawtooth=Nper-1; maxA=Fs/delta_f;
maxAbase=maxA/Nper;
delta_A=floor(f/delta_f); %输出信号相邻样点对应地址的地址增量
delta_theta0=2*pi/maxA; %在频谱分辨率为 的情况下,输出信号所能分辨的最小相位
Ap=floor(theta0/delta_theta0); %初相对应的地址增量 n=0:N_sig-1;
A(n+1)=mod(n*delta_A+Ap,maxA); %输出信号地址
A_sawtooth=mod(floor(A/maxAbase),Nper); %基准频率信号选择地址
%%通过地址对基准信号采样 for i=1:N_sig
y(i)=Sroot(A_sawtooth(i)+1)/2^(N-1); end
%%输出结果 figure(1);
t=2*pi*(0:2^N-1)/2^N;
plot(t,Sroot);title('基准信号时域谱','fontsize',big); %基准信号时域谱 t=0:1/Fs:et; figure(2);
plot(t,y);title('产生的信号时域谱','fontsize',big); %产生的信号时域谱 xlabel('t');
axis([0 et -1.2 1.2]); grid on; figure
[f,yf]=T2F(t,y);
subplot(211);
plot(f,abs(yf));title('产生的信号幅频特性','fontsize',big);
xlabel('Hz','fontsize',big); %产生的信号幅频特性 grid on;
subplot(212);
plot(f,angle(yf));title('产生的信号相频特性','fontsize',big);
xlabel('Hz','fontsize',big); %产生的信号相频特性
3、方波信号
function DDSforfb(f,Fs,N,et,theta0) big=16; %图形窗口字体大小 %%入口参数及其含义
% f:输出的信号频率 % Fs:采样频率 % N:频率信号字长 % et:信号结束时间 % theta0:初始相位
%%产生基准频率信号
Nper=2^N; %基准信号采样个数 t=2*pi*(0:2^N-1)/2^N; %基准信号相位 Sroot=floor(square(t)*2^(N-1))-1; %基准信号
%%产生输出信号地址
N_sig=Fs*et+1; %输出频率信号样点个数 delta_f=Fs/2^N; %最小频率间隔 maxAsquare=Nper-1; maxA=Fs/delta_f;
maxAbase=maxA/Nper;
delta_A=floor(f/delta_f); %输出信号相邻样点对应地址的地址增量
delta_theta0=2*pi/maxA; %在频谱分辨率为 的情况下,输出信号所能分辨的最小相位
Ap=floor(theta0/delta_theta0); %初相对应的地址增量 n=0:N_sig-1;
A(n+1)=mod(n*delta_A+Ap,maxA); %输出信号地址
A_square=mod(floor(A/maxAbase),Nper); %基准频率信号选择地址
%%通过地址对基准信号采样 for i=1:N_sig
y(i)=Sroot(A_square(i)+1)/2^(N-1); end
%%输出结果 figure(1);
t=2*pi*(0:2^N-1)/2^N;
plot(t,Sroot);title('基准信号时域谱','fontsize',big); %基准信号时域谱 t=0:1/Fs:et; figure(2);
plot(t,y);title('产生信号的时域谱','fontsize',big); %产生的单频信号时域谱 xlabel('t');
axis([0 et -1.2 1.2]); grid on; figure
[f,yf]=T2F(t,y); subplot(211);
plot(f,abs(yf));title('产生信号幅频特性','fontsize',big);
xlabel('Hz','fontsize',big); %产生的单频信号幅频特性 grid on;
subplot(212);
plot(f,angle(yf));title('产生信号相频特性','fontsize',big);
xlabel('Hz','fontsize',big); %产生的单频信号相频特性
因篇幅问题不能全部显示,请点此查看更多更全内容