实验一、双音多频信号发生器本实验设计一个简单的双音多频信号发生器,需要产生两个不同频率的正弦信号,其中一个我们把它设定为697HZ,另外一个设定为1477HZ,然后将两个信号叠加在一起。我们知道双音多频信号是在两个不同频率正弦波叠加的基础上在100ms时间内产生至少45ms的信号,然后剩下的时间保持静音。在这里我们用一个计数器来控制时间。首先进入Matlab,在菜单栏选择FileNewModel新建一个模型文件。并给这个模型文件取名保存,本示例中,将文件保存为dtmf.mdl。在dtmf文件窗口的工具栏点击LibraryBrowser按钮,打开SimulinkLibraryBrowser窗口。在SimulinkLibraryBrowser窗口中,点击展开AlteraDSPBuilder目录,可以看到DSPBuilder工具支持的各种模型和组件。这些组件可以被Simulink方便的调用来建立模型,在设计完成并验证通过之后,DspBuilder工具能将其直接转化成硬件描述语言,从而在硬件上实际运行并验证设计。在SimulinkLibrary中选择AlteraDSPBuilderRateChangeclockaltr,将输入频率设置为50Mhz,改名为clk,如图1:经过该模块分频后输出频率clk_div:50M/1024=48828HZ。图1图2在SimulinkLibrary中选择SimulinkSourcesPulseGenerator,命名为Pulse,此模块用来模拟按键信号,参数设置成如图2所示说明:这里Period选择24414是为了让控制信号的周期为500ms,脉冲宽度定为12207是为了让高电平保持时间为250ms。这些参数可以根据需要进行更改。再添加一个计数器模块用来计数控制后面的信号输出,在SimulinkLibrary中选择AlteraDSPBuilderArithmeticIncrementDecrement,命名为Inc,输出位宽设置成12位,因为采样频率为50e6/1024,在100ms应该有4882个点,50ms能记2441个点。让计数器的值与设定的常数2441做比较,当计数超过2441时,输出一个低电平,让随后产生的双音多频信号保持静音。参数设定为图3:图4图3计数器的复位端接地,模块在IO&BUS中,如图4:添加常数,值设定为2441,AlteraDSPBuilderIO&BUSConstant,命名为Con,参数设定图5:图5图6添加一个比较器AlteraDSPBuilderArithmeticComparator,命名为Compare,设定成,ab。然后添加正弦波发生模块:先加一个计数器模块,改名为Inc1,参数设定图6:输出位宽定为6在SimulinkLibrary中选择AlteraDSPBuilderStorageLUT,命名为f697。向模型中添加一个查找表,双击LUT弹出参数配置窗口,将数据类型设置为有符号整形,输出数据宽度设置为8位,查找表地址线设置为6,MATLABArray参数设置为sin(2*pi*697*[0:69]/48828)*127。图7,也就是在查找表中放一个周期的数据,共70点。根据采样频率及计数器的位宽就可以计算出产生的信号为697HZ。参数如下:图7图8接着产生一个高频信号,同理添加计数器和查找表,分别命名为Inc2和f1477。参数如图8,图9:图10图9可以计算这个高频信号频率为1477HZ。在SimulinkLibrary中选择AlteraDSPBuilderArithmeticParallelAdderSubtractor,改名为sin_add。向模型中添加一个加法器,双击ParallelAdderSubtractor,弹出参数配置窗口图10。再接一个输出端口,在io&bus中的output,改名为dtmfout。因为正弦波的输出值在-127到+127之间,占的位宽为8位,叠加之后在-254到+254之间,所以双音多频信号的输出位宽至少应为9位。另外为了在逻辑分析仪中能够观察到完整的信号波形,我们需要用一个较低频率的采样信号来设置观察,因此需要在原来的模型基础上引出这个信号clk_out,参见下图,将其添加到你的mdl文件中:参数配置如下:添加D/A转换模块在alteradspbuilderblockset-boards-cycloneIIep2c70中选择和如下图D/A信号可在板子的DACCHANE通过示波器观察注意自己添加的是通道A还是通道B(也可以不去掉DA处的output输出直接接D2A)D2A里是无符号14位数,由于之前产生信号为有符号数,要把两个正弦信号的幅值增加127使其大于0,类型改为无符号数输出。最后接一个示波器,用来观察双音多频信号。滤波器设置为:3路信号,分别接两路正弦信号,跟一路双音多频信号。在dtmf窗口的菜单,选择SimulationConfigurationParamters…,在利用Simulink进行仿真之前,先对仿真做参数设置。仿真结果如图所示:(观察整个周期根据连接图判断信号输出是否正确)整个连线如图所示:[产生任意频率的正弦信号波形可以仿照本实验中的方法,在查找表中放数据:sin(2*pi*1477*[0:32]/48828)*127,通过计数器寻址就可产生1477hz的信号,采样频率定为48828hz,那么一个周期内的点数也就可以计算出来为48828/1477=33,如果用位宽为6的计数器寻址的话,就刚好很圆滑的采到一个周期的信号。]转化及下载:在SignalCompiler转成为硬件之后,打开后缀为.qpf的文件,就打开了这个硬件工程,指定开发板,要视你手上的开发板而定,将没有用到的管脚置为三态。然后全编译一遍分配管脚:cyclone_2c70CLK——PIN_N2input——PIN_AC18(SW5)之后新建有关逻辑分析仪的操作就不再具体描述了。设置观察管脚为两路正弦波信号、双音多频信号、按键控制信号。再在设置参数栏中指定clock为CLK分频之后的信号,这里为clk_out。采样深度设为4K,其他保持默认,设定完后重新全部编译一遍,就可以下载观察逻辑分析仪捕捉的信号,从结果看出观察到的信号与Simulink中是完全吻合的。