您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于MATLAB的DDS设计和仿真
1042401011基于MATLAB的DDS设计仿真蔡露第1页/共8页基于MATLAB的数字频率合成技术(DDS)的设计和仿真蔡露1042401011城市轨道交通学院10通信工程一.实验目的直接数字频率合成(DDS)是近年来得到迅速发展的一种新的频率合成方法,它从相位概念出发,以全数字技术直接合成所需要波形,具有输出频段宽、频率转换速度快、频率分辨率高、输出相位连续等一系列优异性能。MATLAB是一款具有强大矩阵运算功能,简练易用编程语言的科学软件。当今广泛被人们应用于各种控制系统的数字仿真。(本实验中采用软件版本为MATLAB2012a)本文旨在利用MATLAB完成对DDS的工作过程进行设计和仿真,从而对DDS的工作原理和工作过程有更加深刻深刻的理解。二.实验原理DDS(directdigitalsynthesizer)是从相位概念出发直接合成所需的波形的一种频率合成技术。我们知道,对于正弦信号发生器,它的输出可以用下式来描述:——式2-1其中Sout是指该信号发生器的输出信号波形,fout指输出信号对应的频率。上式的表述对于时间t是连续的,为了用数字逻辑实现该表达式,必须进行离散化处理。用基准时钟clk进行抽样,令正弦信号的相位:——式2-2在一个clk周期Tclk内,相位的变化量为:——式2-3其中fclk指clk的频率,对于2π,可以理解成“满”相位。为了对进行数字量化,把2π切割成2N份,由此,每个clk周期的相位增量可用量化值来表述为).π2sin(sinoutouttfAtAStfoutπ2clkoutclkoutπ2π2ΔffTf1042401011基于MATLAB的DDS设计仿真蔡露第2页/共8页——式2-4与式2-3联立,可得——式2-5显然,信号发生器的输出可描述为:——式2-6其中,BθK-1指前一个clk周期的相位值,同样可以得出——式2-7由上面的推导可以看出,只要对相位的量化值进行简单的累加运算,就可以得到正弦信号的当前相位值;而用于累加的相位增量量化值决定了信号的输出频率fout,并呈现简单的线性关系。直接数字合成器DDS就是根据上述原理而设计的数字控制频率合成器。图2-1所示是一个基本的DDS结构,主要由相位累加器、相位调制器、正弦ROM查找表和D/A构成。图2-1基本DDS结构图相位累加器是整个DDS的核心,在这里完成上文原理推导中的相位累加功能。相位累加器的输入是相位增量,又由于与输出频率fout是简单的线性关系:故相位累加器的输入又可称为频率字输入,事实上,当系统基准时钟fckj是2N时,就等于fout。频率字输入在图2-1中还经过了一组同步寄存器,NB2π2clkout2ffBNclkout2ffBNBBAfBBAASkkNk11sinΔ1out2π2sin)Δsin(NkkB2π211同步寄存器寄存器正弦信号输出clk系统时钟相位累加器相位调制器NNM数据线位宽频率字输入N同步寄存器M正弦ROM查找表D/A相位字输入clkout/2ffBN1042401011基于MATLAB的DDS设计仿真蔡露第3页/共8页使得当频率字改变时不会干扰相位累加器的正常工作。正弦ROM查找表完成的查表转换,也可以理解成相位到幅度的转换,它的输入是相位调制器的输出,事实上就是ROM的地址值;输出送往D/A,转化成模拟信号。三.实验DDS参量计算1.DDS的输出频率fout由DDS工作原理推导的公式中很容易得出输出频率的计算:——式3-1BΔθ是频率输入字,fclk是系统基准时钟的频率值,N是相位累加器的数据位宽,也是频率输入字的数据位宽。2.DDS的频率分辨率或称频率最小步进值,可用频率输入值步进一个最小间隔对应的频率输出变化量来衡量。由式3-1易得——式3-23.DDS的频率输入字其计算的计算公式如下:——式3-3四.MATLAB程序设计根据前文分析的DDS实验原理、参量计算的知识,用MATLAB编写出如下的程序代码:function[y,t]=dds(fout,Fs,Bits,endtime)%[y,t]=dds_matlab(fout,Fs,Bits,endtime)%fout:输出频率%Fs:采样频率,即前文fclk%Bits:ROM位宽,即前文Nclkout2fBfNNff2clkoutclkout2ffBN1042401011基于MATLAB的DDS设计仿真蔡露第4页/共8页%endtime:时域图截止时间%y:输出时域图纵坐标%t:输出时域图横坐标%输出DDS信息delta_F=Fs/2^Bits;disp(['此DDS最小输出频率:'...,num2str(delta_F),'Hz']);%建立正弦波形ROM表temp=2*pi*(0:2^Bits-1)/2^Bits;ROM=sin(temp);N=Fs+1;y=zeros(1,N);IND=zeros(1,N);%计算频率输入字k=floor(fout/Fs*2^Bits);%建立相位地址码n=1;index=1;whilen=NIND(n)=index;index=index+k;index=mod(index,2^Bits);n=n+1;end1042401011基于MATLAB的DDS设计仿真蔡露第5页/共8页%绘图y=ROM(IND);%通过ROM查表生成正弦波形Yw=abs(fft(y));%傅里叶变换求频谱subplot(2,1,1);%绘制时域图t=0:1/Fs:1;plot(t,y);axis([0endtime-1.21.2]);xlabel('t(s)');ylabel('y');title('DDS产生信号时域图');grid;subplot(2,1,2);%绘制频域图plot(Yw);axis([0Fs0800]);xlabel('f(Hz)');ylabel('H');title('DDS产生信号频域图');grid;legend(['输出频率:'...,num2str(fout),'Hz']);五.仿真分析将【MATLAB程序设计】中编写的function[y,t]=dds(fout,Fs,Bits,endtime)函数保存为dds.m文件加到MATLAB搜索路径中,即可在commandwindow进行函数调用,利用dds产生所需要的正弦波。1042401011基于MATLAB的DDS设计仿真蔡露第6页/共8页1.输出频率为10Hz正弦波输入:dds(10,1000,8,1)输出:图5-1DDS产生10Hz的正弦波形图由图5-1看出,DDS输出了10Hz的正弦波形,符合实验预期。可见通过我们编写的M程序,进行合理的参数输入,DDS能够成功的输出所指定的波形。2.输出频率为500Hz正弦波为了进一步研究DDS位宽N对输出波形特性的影响,我们分别选取不同的位宽(N=8和N=16)分别进行DDS波形输出,比较两者的输出结果:输入:dds(500,10000,8,0.01)%位宽N=81042401011基于MATLAB的DDS设计仿真蔡露第7页/共8页图5-2N=8时500Hz输出波形图输入:dds(500,10000,16,0.01)%位宽N=16图5-3N=16时500Hz输出波形图1042401011基于MATLAB的DDS设计仿真蔡露第8页/共8页对比图5-2和图5-3可以发现,同样是输出500Hz的正弦波,在频谱分析图上,N=8位时实际输出频率只有470Hz,而N=16位时实际输出频率501Hz,可见DDS位宽越大,输出精确度越高。当然,ROM中要存储2^N个波形数据,因此,位宽越大,占用ROM空间越大,实际应用中。实际应用中我们可以根据需要合理的选择DDS的位宽。六.实验总结本实验通过MATLAB数字仿真成功实现了DDS的调试和设计,增加了对DDS原理的理解。并在此基础上进一步研究了位宽N对DDS输出波形的影响。通过DDS技术合成的波形具有很好的稳定性,精度很高以及易于控制与调节,可以广泛的用于现代数字通讯系统中。通过此次实验,增加了我学习和思考的能力,提高了动手和编程技能,也找到了利用MATLAB研究DDS的新方法。
本文标题:基于MATLAB的DDS设计和仿真
链接地址:https://www.777doc.com/doc-5190509 .html