新闻中心

EEPW首页>模拟技术>设计应用> 使用LPC1700的IEC 60601-1-8音频警报发生器

使用LPC1700的IEC 60601-1-8音频警报发生器

作者: 时间:2010-02-08 来源:网络 收藏
音符发生器功能

对于音符发生器,存在许多需要处理的数据,它们涉及到多重频率和多重正弦波发生器。如果将与每个频率相关的数据变量和常数组织在具有相同尺寸的矩阵中,那么就能恰好使用简单递归函数来“走”过这些矩阵数据。



音符发生器定义

定义若干个定点和浮点常数,以及定义结构标签和两个矩阵。它们当中之一是结构的一个矩阵。

算法中使用的变量和系数之结构的优点是:它允许我们在结构矩阵和频率常数矩阵中具有类似的矩阵组织。常数频率矩阵和算法结构矩阵之间的一一对应关系使得在初始化每个频率时,容易使用两个矩阵的类似索引。

音符发生器初始化

上文提到为了使Goertzel算法能振荡,除了系数以外,y[-1]和y[-2]值也必须初始化。必须针对对应于每个频率的结构变量而完成此工作。下面显示了用于初始化的代码。一排5个结构中的每一个被初始化,然后每一个另外的排被初始化,直到整个结构矩阵都被初始化。在这个演示应用程序中,这些计算是在复位初始化期间完成的。不过,如果你正在最优化它,可以通过事先进行这些计算而将代码保存起来,并且将结果作为常数储存在快速存储器中。这是因为,如果数学程序库需要浮点和正弦/余弦算法,那么预先计算好的初始化值则不需要。这些程序库例行程序使用大约一半本应用程序中使用的代码空间。系数和初始化值是通过32768(带符号的短值)定标的。还有,系数计算不包括公式(18)中显示的2X系数。其目的是使系数的规模保持在带符号的短值,以最小化储存要求。2X被包括在最终Goertzel计算中;此处,输出的定标是通过>>14(而不是>>15)乘以2。



多重正弦波发生、求和及DAC输出

一旦算法变量和系数都已经被初始化,那么,让Goertzel计算来生成基本音符和4个谐波就变得很容易。方法是简单地递增通过结构矩阵中的一排,并且求五个值的和。正如上文所述,第204行包括通过>>14、而不是>>15定标到2X中的系数,而这些系数在初始化时不予考虑。



一旦函数已经完成了矩阵排中所有5个结构的计算,相加的值就被定标、格式化、并从带符号的值转化为不带符号的值,然后被送到DAC。由于这些计算是在每个25kHz定时器中断处执行的(当音符活跃时),所以DAC输出速率就是25 kHz。这允许使用便宜的输出滤波器,因为相对于正在生成的最高正弦波频率,这大约是9X的过度取样。



关键词:606011700LPCIEC

评论


相关推荐

技术专区

关闭