分享
 
 
 

用MAXQ结合MAC进行控制和数字信号处理

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

Maxim北京办事处

MAXQ简介

MAXQ系列微控制器是高性能的16位RISC器件,专门为低噪声操作而设计,是用电池供电的混合信号应用的理想器件。MAXQ将高精度的模拟功能与数字元件集成在一起,减少了设计中的芯片数目。MAXQ采用Harvard存储器结构,将数据、代码与寄存器空间安排在不同的总线上。这种存储器结构的主要优点是具有灵活的字长,系统与外设寄存器可以是8位或16位。由于MAXQ的指令字是16位的,微控制器通常具有16位指令总线。Harvard结构的另一个优点是始终利用寄存器来访问存储器,这样便可以用直接存取的方式访问外设,例如模数转换器(ADC)与硬件协处理器等。MAXQ2000是MAXQ系列微控制器中的第一款产品,它集成了16位CPU、64KB闪存、2KB SRAM和4 36字段的LCD控制器。

对控制应用和数字信号处理都有要求时出现的难题

传统微控制器(MCU)与数字信号处理器(DSP)通常被认为是微型计算机领域中两个互不兼容的机种。MCU适用于需要对非同步过程实现低延迟响应的控制应用,DSP则在高强度数学计算方面表现卓越。当然,也可以用MCU进行纷繁复杂的算术运算,但是由于绝大多数MCU的算术逻辑单元(ALU)每次执行一项运算,其运算速度与DSP相比大大减慢。同理,因为内部架构的原因,DSP也不适用于控制应用。

随着在控制应用中增加少量信号处理功能的实际应用越来越多,在DSP与传统MCU之间进行选择变得越来越困难。在此类应用中,将DSP代码嵌入到MCU中的解决方法具有一定的吸引力。但是采用这种方法后,应用程序的大部分时间都花在执行DSP函数上了,而控制应用不得不有所牺牲。MAXQ架构的出现,解决了这个问题。在模块化的MAXQ架构中,可以很容易地集成乘法-累加单元(MAC)。使用了硬件MAC后,16 16位的乘法-累加运算可在一个周期内实现,而不影响控制处理器上的任务执行。下面举例说明如何使用MAXQ微控制器中的MAC模块解决实际问题。

MAC模块与MAXQ结合使用

对DSP来说,最基本的应用是对模拟信号进行滤波。在滤波应用中,将经过适当调制的模拟信号提供给ADC,在数字域中对采样得到的数据流进行滤波。常规滤波器的执行过程可以用如下公式实现:

式中bi和ai分别是系统前馈与反馈响应的特征值。根据ai和bi的值,可以将数字滤波器分成有限冲击响应(FIR)滤波器和无限冲击响应(IIR)滤波器两大类。当系统不包含任何反馈元素时(即所有ai=0),滤波器为FIR型,其方程为:

而当ai和bi的元素都不为0时,滤波器为IIR型。

由公式(2)知,FIR型滤波器的主要数学运算是将每个采样输入与常数相乘,然后将每个乘积累加,共进行n次,可以用如下C语言程序段来说明:

y[n]=0;

for(i=0;i小于n;i++)

y[n]+=x[i]*b[i]

对带乘法器单元的微处理器,可以根据以下伪码来实现:

move ptr0, #x ;Primary data pointer -> samples

move ptr1, #b ;Secondary DP -> coefficients

move ctr, #n ;Loop counter gets number of samples

move result, #0 ;Clear result register

ACC_LOOP:

move acc, @ptr0 ;Get a sample

mul @ptr1 ;Multiply by coefficient

add result ;Add to previous result

move result, acc ;...and save the result back

inc ptr0 ;Point to next sample

inc ptr1 ;Point to next coefficient

dec ctr ;Decrement loop counter

jump nz, ACC_LOOP ;Jump if there are more samples

end

这样,尽管有一个乘法器,乘法与累加的循环也需要12条指令以及(假定是单周期运行的单元与乘法器)4+ 8n个周期。而在MAXQ的乘法-累加单元中完成相同的操作,代码空间从12个字缩减到9个字,运行时间从4+ 8n个周期减少到4 +5n个周期,其代码实现如下:

move DP[0], #x ; DP[0] -> x[0]

move DP[1], #b ; DP[1] -> b[0]

move LC[0], #loop_cnt ; LC[0] -> number of samples

move MCNT, #INIT_MAC ; Initialize MAC unit

MAC_LOOP:

move DP[0], DP[0] ; Activate DP[0]

move MA, @DP[0]++ ; Get sample into MAC

move DP[1], DP[1] ; Activate DP[1]

move MB, @DP[1]++ ; Get coeff into MAC and multiply

djnz LC[0], MAC_LOOP

需要注意的是,在MAXQ乘法-累加单元中,当第二个操作数装入该单元时,请求的运算自动执行,其结果存储在MC寄存器中。还应当注意的是,在传统方法中每个基本运算后都必须进行溢出检测,而MC寄存器的长度是40位,在溢出前可以累加大量32位的乘法计算结果,这是对传统方法的改善。为了说明如何在信号处理流程中高效使用MAC,现列举一个用于双音多频(DTMF)收发器的简单应用。

DTMF概述

DTMF(Dual tone multitre-quency)双音多频是用于电话网络中的信令技术,用来从网络终端(电话或其他设备)向交换机传送地址信息。其机理是使用两组各四路独立音调,互相之间没有谐波相关关系,例如“低频组”(低于1 kHz)与“高频组”(高于1 kHz)。电话键盘上的每个数字都刚好可以用一路低频组音调和一路高频组音调来表示。图1给出了这些音调的分配。

DTMF收发器的音调编码器

DTMF收发器的编码器部分简单明了,即需要两个数字正弦振荡器,每个振荡器都可以调谐到四个低频组频率或高频组频率之一。

解决数字合成正弦波问题的方法很多。

产生正弦波的方法之一是完全避免数字合成问题,只对端口引脚产生的方波进行较强的滤波。尽管这种方法在很多应用中都比较有效,但是该技术达不到 Bellcore(贝尔通信研究所)对正弦波频谱纯度的要求。第二种方法是利用速查表来产生正弦波。在这种方法中,将一路正弦波的1/4存储在一张ROM 表中,这张表根据预先计算的间隔采样来生成所需要的波形。不过,要生成一个分辨率足够高、能够满足频谱要求的1/4正弦表,需要很大的存储量,所以这种方法通常不被采用。另外一个相对较好的方法就是使用递归数字谐振器来产生正弦波。

递归数字谐振器产生的正弦波如图2所示。该谐振器用双极点滤波器来实现,可用以下差分方程描述:

其中k为常数,其定义为:

由于DTMF拨号盘只需要少量音调,k的8个数值可以预先计算,并存储在ROM中。例如,在8 kHz的采样速率下产生行频为770 Hz音调所需的常数为:

还有一个数值必须计算,即振荡器开始运行所需的初始脉冲。很明显,若Xn-1与Xn-2都为0,随后的每个Xn都将为0。为了启动振荡器,将Xn-1设置为0,并将Xn-2设置为:

在本例中,假定需要单位正弦波,则(6)式可简化为:

很容易将上述过程用代码表示:初始化两个中间变量X1、 X2。X1初始化为0,而X2装入初始激励数值(以上(7)式已计算)启动振荡。执行以下操作产生正弦波的一次采样:

X0=k*X1-X2;

X2=X1;

X1=X0;

每个新的正弦值都用一次乘法与一次减法来计算。使用MAXQ微控制器上的单周期硬件MAC,正弦波可以用如下代码产生:

move DP[0], #X1 ; DP[0] -> X1

move MCNT, #INIT_MAC ; Initialize MAC unit

move MA, #k ; MA=k

move MB, @DP[0]++ ; MB=X1, MC=k*X1, point to X2

move MA, #-1 ; MA=-1

move MB, @DP[0]-- ; MB=X2, MC=k*X1-X2, point to X1

nop ; wait for result

move @--DP[0], MC ; Store result at X0

DTMF音调的检测

由于只需要检测少量频率,因此可以使用改进的Goertzel算法。该Goertzel算法比一般的DFT(离散式傅立叶变换)机制更有效,并提供对频段内信号的可靠检测。图3是用简单二阶滤波器实现Goertzel算法的示意图。

为了用Goertzel算法检测特定频率的音调,必须先计算常数k。对DTMF检测器,该常数可以在编译时计算,所有的音调频率都已明确指定。k值可按公式(4)计算。

首先,将三个中间变量(D0、D1与D2)初始化为0。现在,对接收到的每个采样值X,按以下公式计算:

在获得了足够数量的采样值后(若采样速率为8 kHz,通常为205),使用最新计算出的D1与D2计算下式:

这样P中就包含了输入信号X中测试频率的平方幂(D12与D22)。为了解码全部四列DTMF,每个采样将通过8个滤波器完成。每个滤波器将有自己的k值和一组中间变量。由于每个变量都是16位的,整个算法将需要48个字节的中间存储。

一旦计算了不同音调频率的P值,高频组与低频组中的一路音调将比其他音调的数值高出两倍以上,而通常其幅度高出一个数量级。图4是提供给解码器的采样输入信号,X的值分别为852 Hz和1 336 Hz。图5给出了Goertzel算法的检测结果。若信号频谱达不到这个标准,有两种可能情况,要么是信号中没有DTMF能量,要么是噪声太大阻断了信号。

说明该算法的电子表格以及配备了MAC的MAXQ处理器的实例代码在网站www.maxim-ic.com/MAXQ_DTMF上有说明。

结论

MAXQ 微控制器与其MAC单元相结合,在传统MCU与DSP之间架起了桥梁,很好地解决了控制应用与需要少量信号处理并存系统的技术问题。添加了硬件MAC之后,MAXQ微控制器将过去16位微控制器的信号处理能力提高到了新水平。单周期的MAC还提供了常用函数,使实时信号处理成为可能。

本文摘自《世界电子元器件》

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有