这个数字谐振技术执行一个具有非常特殊的初始条件的2阶IIR滤波器。这些初始条件存储在“y[n-1]”和“y[n-2]”的内存位置。你也许想要返回来参考在这章前面给出的数字式谐振器的理论讨论。我们使用这个方法的目的是提高程序的可读性,但常常是要以损失效率为代价的。
运行这个应用程序所必需的文件在本书CD中第5章的ccs\sigGen目录中。包含本章的前两个C语言例子所需要的文件。我们感兴趣的主要文件是resonator_ISRs.c,它包含中断服务程序;从这个工程中移除其他所有ISR文件,并且加入resonator_ISRs.c文件。这个文件包含了必要的变量声明和执行实际的正弦信号产生程序。
如果在你的DSK板上使用立体声编解码器,这个程序能独立地执行左右声道的正弦信号发生程序。为清晰起见,这个例程将仅产生一个正弦波形,但将输出这个正弦波形到左右两个通道。
如下的代码中,“fDesired”和“A”(第1、2行)分别是信号的频率和幅度。记住,16比特的DAC的范围是+32767到-32768。π(第5行pi)和系统的采样频率(第8行fs)的定义将允许我们计算相位“theta”,即数字频率,这在第5行作了声明。最后,“y[3]”声明用于存储当前和过去的输出值。仅有3项需要执行这个2阶差分关系式。
程序清单5.9:与数字式谐振器有关的变量声明
下面所示的代码执行实际的正弦信号生成运算。这个运算使用这个数字式谐振器方法。在这个运算中涉及的4个主要步骤将在下面的代码清单中讨论。
程序清单5.10:与数字式谐振器有关的算法
基于数字谐振器信号产生程序牵扯到的4个实时步骤
程序清单5.10的几点说明如下。(www.xing528.com)
(1)第2行:此行代码用来计算数字频率。对于一个比例因子和滤波器系数,需要这一项作为一个输入变量。
(2)第4行:此行代码通过执行系统的差分关系式来计算当前的输出值。
(3)第5、6行:这两行代码完成y矩阵中元素值的右移。其关系式是
y[1]→y[2]
y[0]→y[1]
(4)第8、9行:这两行代码扩大滤波器的输出达到一个幅度“A”。之后,结果值送到左右两个输出声道。
现在你理解了这段代码,让我们继续,将所有文件复制到一个独立的文件夹。在CCS中打开这个工程,重新编译所有的文件。一旦编译完成,将程序加载到DSK中,单击运行。1kHz正弦发生器程序现在就运行在DSK板上。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。