FreeRTOS中文入门手册
FreeRTOS中文入门手册方便初学者入门学习,讲的很好,很值得学习第一章任务管理Designed For Micr。 contr。11exs;概览附录中提供了使用源代码的实用信息小型多任务嵌入式系统简介不同的多任务系统有不同的侧重点。以工作站和桌面电脑为例:·早期的处理器非常昂贵,所以那时的多仟务用于实现在单处理器上支持多用户。这类系统中的调度算法侧重于让每个用户公平共享处理器时间。随着处理器功能越来越强大,价格却更偏宜,所以每个用户都可以独占一个或多个处理器。这类系统的调度算法则设计为计用户可以同时运行多个应用程序,而计算机也不会显得反应迟钝。例如某个用户可能同时运行了一个字处理程序,一个电子表格,一个邮件客户端和一个浏览器,并且期望每个应用程序任何时候都能对输入有足够快的响应时间。桌面电脑的输入处珒可以归类为软实时。为了保证用户的最佳体验,计算机对每个输入的响应应当限定在一个恰当的时间范围——但是如果响应时间超出了限定范闱,并不会让人觉得这合电脑无法使用。比如说,键盘操作必须在键按下后的某个时间内作出明显的提示。但如果按键提示超出了这个时间,会使得这个系统看起来响应人慢,而不致于说这台电脑不能使用。仅仅从单处理器运行多线程这一点来说,实时嵌入式系统中的多任务与桌面电脑的多任务从概念上来讲是相似的。但实时嵌入式系统的侧重点却不同于桌面电脑特别是当嵌入式系统期望提供硬实时行为的时候。硬实时功能必须在给定的时间限制之内完成——如果无法做到即意味着整个系统的绝对失败。汽车的安全气囊触发机制就是一个硬实吋功能的例子。安全气囊在撞击发生后给定时间限制内必须弹出。如果响应时间超出了这个时间限制,会使得驾驶员受到伤害,而这原本是可以避免的大多数嵌入式系统不仅能满足硬实时要求,也能满足软实时要求。Designed For Micr。 contr。11exs;术语说明在屮,每个执行线程都被称为任务。在嵌入式社区屮,对此并没有个公允的术语,但我更喜欢用任务而不是线程,因为从以前的经验米看,线程具有更多的特定含义本章的目的是让读者充分了解:在应用程序中,如何为各仟务分配处理时间。●在任意给定时刻,如何选择任务投入运行。●任务优先级如何影响系统行为。●任务存在哪些状态。此外,还期望能够让读者解:●如何实现一个任务。●如何创建一个或多个任务的实例●如何使用任务参数。如何改变一个已创建任务的优先级●如何删除任务。●如何实现周期性处理。空闲任务何时运行,可以用来干什么本章所介绍的概念是理解如何使用的基础,也是理解基于的应用程序行为方式的基础——因此,本章也是这本书中最为详尽的一章Designed For Micr。 contr。11exs;任务函数任务是由语言数实现的。唯一特别的只是任务的函数原犁,其必须返回而且带有一个指针参数。其数原型参见程序清单。void ATaskFunction( void *pvParameters )程序清单任务函数原型每个任务都是在自己权限氾围内的一个小程序。其具有程序入口,通常会运行在一个死循环中,也不会退出。一个典型的任务结构如程序清单所示。仟务不允许以任何方式从实现函数中返回一一它们绝不能有条语句,也不能执行到函数末尾。如果一个任务不再需要,可以显式地将其删除。这也在程序清单展现个任务函数可以用来创建若干个任务—创建出的任务均是独立的执行实例,拥有属于自己的栈空间,以及属于自己的自动变量栈变量,即任务函数本身定义的变量v。 d ATaskFunction(v。1d* pArameters)/*可以像普通函数一样定义变量。用这个函数创延的每个任务实例都有一个属于自己的 vAria1b1 eExamp1e变量。但如果 varial1e3 xample被定义为 static,这一点则不成立-这种情况下只存在一个变量,所有的任务实例将会共享这个变量。int ivariableExample =0;/*仨务通常实现在一个死循环中。*/for(ii)/*完成任务功能的代码将放在这里。*//*如果任务的具体实现会跳出上面的死循环,则此任务必须在函数运行完之前朋除。传入NUL参数表示删除的是当前任务*vTaskDelete( NULL程序清单典型的任务函数结构Designed For Micr。 contr。11exs;顶层任务状态应用程序可以包含多个任务。如果运行应用程序的微控制器只有一个核那么在任意给定时间,实际上只会有一个仼务被执行。这就意味着一个任务可以有一个或两个状态,即运行状态和非运行状态。我们先考虑这种最简单的模型——但请牢记这其实是过于简单,我们硝后将会看到非运行状态实际上又可划分为若千个子状态。当某个任务处于运行态时,处理器就正在执行它的代码。当一个任务处于非运行态时,该任务进行休眠,它的所有状态都被妥善保存,以便在下一次调试器决定让它进入运行态时可以恢复执行。当任务恢复执行时,其将精确地从离开运行态时正准备执行的那一条指令开始执行。A tasks that areOnly one tasknot currentcan be in theRunning are in theRunning state atNot Running Stateany one timeNot RunningRunning图顶层任务状态及状态转移任务从非运行态转移到运行态被称为切换入或切入或交换入相反,任务从运行态转移到非运行态被称为切换出或切出或交换出的调度器是能让任务切入切出的唯一实体。Designed For Micr。 contr。11exs;创建任务函数创建仟务使用的函数这可能是所有数中最复杂的函数,但不幸的是这也是我们第一个遇到的函数。但我们必须首先掌控任务因为它们是多任务系统中最基本的组件。本书中的所有示例程序都会用到,所以会有人量的例子可以参考。附录:描述川到的数据类型和命名约定。portBASE TYPE xTaskCreate( paTASK CODE pvTaskCodeconst signed port CHAR conist pcNameunsigned portSHORT usstackDepthunsigned portEASE TYPE uxPriorityxTaskHandle *pxCreatedTask程序清单函数原型表参数与返回值参数名描述任务只是永不退出的函数,实现常通常是个死循环。参数只一个指向任务的实现函数的指针效果上仅仅是函数名具有描述性的任务名。这个参数不会被使用。其只是单纯地用于辅助调试。识别一个具有可读性的名字总是比通过句柄来识别容易得多。应用程序可以通讨定义常量来定义任务名的最大长度—一包括结朿符。如果传入的字符串长度超过了这个最大值,字符串将会自动被截断。Designed For Micr。 contr。11exs;当任务创建时,内核会分为每个任务分配属于任务自己的唯一状态。值用于告诉内核为它分配多人的栈空间。这个值指定的是栈空间可以保存多少个字,而不是多少个字节比如说,如果是位宽的栈空间,传入的值为则将会分配字节的栈空间。栈深度乘以栈宽度的绩果万不能超过~个类型变量所能表达的最人值。应川程序通过定义常量来决定空闲任条任用的栈空间大小。在为微控制器架构提供的应用程序中,赋予此常量的值是对所有任务的最小建议值如果你的任务会使用大量栈空间,那么你应当赋予一个更大的值。没有任何简单的方法可以决定一个任务到底需要多大的栈空间。计算出来虽然是可能的,但人多数用户会先简单地赋予一个自认为合理的值,然后利用提供的特性来确证分配的空间既不欠缺也不浪费。第六章包括了一些信息,可以知道如何去查询任务使用了多少栈空问。仟务函数接受一个指向的指钅的值即是传递到任务中的值。这篇文档中的一些范例程序将会示范这个参数可以如何使用指定任务执行的优先级。优先级的取值范围可以从最低优先级到最高优先级是一个由用户定义的常量。优生级号并没有上限除了受限于采用的数据类型和系统的有效内存空间,但最妊使用实际需要的最小数值以避免内在浪费。如果的值超过了,将会导致实际赋给任务的优先级被自动封顶到最大合法值。Designed For Micr。 contr。11exs;用于传出任务的句柄。这个句枢将在调川中对该创建出来的任务进行引用,比如改变任务优先级,或者删除仟务。如果应用程序中不会用到这个任务的包柄,则川以被设为返回值有两个可能的返回值:表明任务创建成功。由于内存堆空间不足,无法分配足够的空间来保存任务结构数据和任务栈,因此无法创建任务。第五章将提供更多有关内存管理方面的信息。例创建任务附录:包含一些关于示例程序生成工具的信息。本例演示了创建并启动两个任务的必要步骤。这两个任务只是周期性地打印输出守符串,采用原始的空循环方式来产生周期延迟。两者在创建时指定了相同的优先级,并且在实现上除输出的字符串外完全一样—程序清单4和程序清单5是这两个仟务对应的实现代码。Designed For Micr。 contr。11ers;
- 2020-12-09下载
- 积分:1
基于LMS 算法的多麦克风降噪
武汉理工大学 信息处理课设 基于LMS 算法的多麦克风降噪 给定主麦克风录制的受噪声污染的语音信号和参考麦克风录制的噪声,实现语音增强的目标,得到清晰的语音信号。2007控制科学与工程全国博士生学术论坛2007年8月其中日为语音信号与麦克风阵列所在平面的夹角,d为麦克风间距,c为声音传播速度,f为信号采样率。固定波束形成器通过延时求和单元产生参考语音信号y(n),y(n)与y(m)分别代表期望语音信号与噪声信号。y,(n)4x(m)=y(m)+y/(m(3)信号通过阻塞矩阵产生噪声参考信号用来估计波束形成输出信号中的噪声成分。选取B使其中任意行向量之和为零,即任意行向量线性无关。为了进一步降低噪声参考信号中的语音泄漏,参考文献“提出了用自适应阻塞矩阵替代固定阻塞矩阵的方法。ynly2nMM-[nJ]=BLun], u2n],umn自适应噪声抵消器ANC通过对输入噪声参考信号进行自适应滤波处理抵消了参考信号y,(m)中的噪声成分,得到增强的语音信号。em]=y[m-∑nnl3LMS自适应算法及改进31LMS自适应算法GSC架构中的自适应噪声抵消器ANC需要用增强的语音信号作为反馈对滤波器权值进行自适应更新。很多自适应算法基于LMS及其改进形式, Clark提出的块LMS算法使得滤波器的自适应逐块更新而非传统LMS滤波器逐点更新4, HOSHUYAMA、 Kellermann分别提出的基于范数约束自适应算法的权值更新,以及频域无约束实现。这些算法基本结构如图2所示y(n-1)(n-L+1)wo(ne(ny/(n)图2自适应横向滤波器结构图图2为图1中的M-1路L阶多通道自适应噪声对消器中某一路的展开形式,其抽头输入向量为[ym]yn-]yn-L+1],对应的抽头权向量为wmwn]w-]。LMS算法的梯度向量通过G2007控制科学与工程全国博士生学术论坛2007年8月计算抽头输入相关矩阵R和抽头输入与期望响应间互相关向量p得到VJ(n)=-2p+2Rv(m),将R和p的瞬态估计R(n)=y(m)y"(n),p(n)=y(n)y/(m)代入,得出梯度向量的瞬态估计:VJ(n)=-2y(n)y, (n+2y(n)y"(n)w(n)进而推出LMS算法权值更新公式为w(n+1)=w(n)+uy(n)Ly(n)-y"(n)w(n)32基于稳态噪声的自适应算法改进考查图2中具有L个抽头权值的LMS算法,抽头权值与抽头输入一一对应。在传统的逐点更新LMS算法中,每计算一个输出需要L次乘法,而更新一次抽头权值也需要L次乘法,故每次迭代需要2L次乘法。对于L个输出样值,所需要的乘法次数为2次。针对传统LMS算法复杂度高的缺点,Ca利用离散傅立叶变换在频域完成滤波器系数的自适应提出了快速块LMS箅法, Ann Spriet在此基础上通过改进LMS算法中的步长矩阵进一步降低了算法复杂度以上LMS算法改进均在图2的横向滤波器架构下进行,即抽头权值与抽头输入一一对应。考虑到稳态噪声的特点,本文提出了“一对多”的滤波器抽头权值更新算法,即L个输入样值共享一个滤波器权值。如此M路多麦克风语音增强系统中的ANC滤波器权值便由(M-1)×L维矩阵W[n=[w[η],n2[rl…wM-[r],其中H[n]=[won],w1[nw-r]退化为(M-1)×1维向量n]=[wryw2n],M-m]j。改进算法权值更新公式为w(n+D)=w(n)+uBu(nu"(n)[A-Bw(n)其中B为阻塞矩阵,A为固定波束形成器,为步长,U(n)为LxM维输入信号。与传统的“一对一”LMS滤波器相比,“一对多”结构在降低算法复杂度的同时,牺牲了前者具有的时间域严格对齐的特性。为降低这一缺点对系统降噪性能的影响,应在频域进行噪声对消,改进算法的多麦克风语音增强系统结构如图3所示。e(n)(n)B Yn图3改进的噪声消除算法结构图3中用虚线框表示可选滤波器权值w。由于实际应用中语音泄漏的存在,在参考语音信号中加入v能有效补偿由语音泄漏引起的语音崎变⑩。实际应用中由于阻塞矩阵输出不可避免的存在语音泄4642007控制科学与工程全国博士生学术论坛2007年8月漏,为了避免期望信号的消除,箅法中加入语音活动检测单元89,当前帧为噪声时更新滤波器系数,当前帧为语音信号时,滤波器系数不变33算法复杂度比较表1列出了本文算法与其他几种噪声消除算法之间算法复杂度的比较。我们采用实数乘法运算次数作为衡量算法复杂度的标准,每个N点傅立叶变换或其反变换需要Mlog2N次实数乘法运算。传统逐点LMS算法在时间域逐点更新滤波器权值。快速块LMS算法与多通道 Wiener算法通过FFT快速循环卷积特性实现LMS中的线性卷积运算,从而降低算法复杂度。本文算法在此基础上通过改进滤波器抽头权值更新算法进一步降低运算复杂度。由表1可见,当麦克风数目M4,L=32时,本文算法与多通道 Wiener滤波算法相比,R(3M+2)FT+8ML+2M63M+2)+4M2+6M_172(M+2)FFT+2ML6(M+2)+M40°文算法运算量降低了4倍左右。表1算法复杂度比较算法名称算法复杂度传统逐点LMS算法2ML快速块LMS算法(41(3M+2)FFT+16ML多通道 Wiener滤波算法53M+2)FFT+8M2+12M本文提出的算法(M+2)FF+2M…图4a)麦克风采集到的原始信号b)采用快速块LMS算法处理后的信号[4]c)采用多通道 Wiener滤波算法[10处理后的信号d采用本文算法处理后的信号4实验结果与分析实验采用线性排列的4个间距为4厘米的麦克风组成的语音采集系统,采样率为44KHZ,说话人位于阵列的正前方,噪声为稳态噪声,其与麦克风阵列法线所夹角度为50度。图4比较了麦克风采集到的信号、采用本文算法处理后的语音信号以及采用其他主流语音增强算法处理后的语音信号的时域波形。由4652007控制科学与工程全国博士生学术论坛2007年8月图4可见采用本文算法处理的语音信号背景噪声有明显降低。为进一步分析各种语音增强算法消噪能力,分别按照公式9计算各算法输出信号的信噪比,其中k代表帧序列号,N代表噪声,Y代表输出语音信号,L为帧长。∑(Y(k,2)2-|N(k,)SNRou(E)=10 log,o∑1MV6)图5釆用各箅法输出信号信噪比与输入信号信噪比之差来衡量噪声降低程度。由图5看出,在本文算法基础上在参考通道中加入可选滤波器权值能够进一步消除背景噪声,提高输出信噪比。苯文鲜法(使用权值w)木文好法未使用权值y块LMS算法Frame Number图5信噪比增强对比5结论本文在稳态噪声的前提下,提出了一种基于广义旁瓣消除器架构具有低算法复杂度的噪声消除算法,该算法通过改进LMS滤波器权值更新算法来达到降低算法复杂度的目的。实验结果证明,在稳态噪声环境下,该方法降噪性能优于传统LMS算法,同时有效降低了传统算法的算法复杂度。在现实生活中一些存在稳态噪声的场合,如发动机舱、厂房等该算法具有很强的实用价值。参考文献[U]LJ. Griffiths and C. W. Jim []. "An altemative approach to linearly constrained adaptive beamforming, IEEE Trans. AntennasProcess., voL. AP-30, no. I, pp 27-34, Jan. 1982.[2]0. Hoshuyama, A Sugiyama, and A Hirano [J]. "A robust adaptive beamformer for microphone arrays with a blocking matrixusing constrained adaptive filters, "IEEE Trans. Signal Process. vol 47, pp. 2677-2683, Oct. 1999[3]W. Herbordt and W Kellermann [J]. " Frequency-domain integration of acoustic echo cancellation and a generalized sidelobecanceller with improved robustness, "Eur. Trans. Telecommun., voL. 13, no 2, pp 123-132, Mar. -Apr. 2002.[4]Clark. G.A., S K Mitra, and S.R. Parker [J]. Block implementation of adaptive digital filters, "IEEE Trans. Circuits Syst,voL. CAS-28,PP584-592.1981.[5]Ann Spriet, Jan Wouters, Simon Doclo, Marc Moonen, "Frequency-Domain Criterion for the Speech Distortion WeightedMultichannel Wiener Filter for Robust Noise Reduction", Ap: //ftp. esat kuleuven. ac, be/pub/SISTA/doclo/reports/04-240 pdf[6JH. Buchner, J. Benesty, W. Kellermann J]. Generalized multichannel frequencydomain adaptive filtering: efficient realizationand application to hands free speech communication", Signal Processing 85(3), PP 549-570. 2005[7]W.Herbordt and W. Kellermann [A]. " Efficient Frequency-domain realization of robust generalized sidelobe cancellers", IEEE4662007控制科学与工程全国博士生学术论坛2007年8月Fourth workshop, multimedia signal Processing, PP. 377-382 2001[8]S. Van Gerven, F. Xie [J. "A Comparative Study of Speech Detection Methods", Proc. EUROSPEECH, VoL 3, Rhodos, Greecepp.1095-1098.1997[9]J Sohn, N.S.Kim, W Sung [] A Statistical Model-Based Voice Activity Detection", IEEE Signal Processing Lett. 6(1)1-31999[10]A Spriet, M. Moonen, J Wouters[]. Robustness Analysis of Multi-channel wiener Filtering and generalized sidelobeCancellation for Multi-microphone Noise Reduction in Hearing Aid Applications", IEEE Trans. Speech and Audio Processing, 13(4)PP.487-503.2005[IlJFerrara, E R r [] Fast implementation of LMS adaptive filters", IEEE Trans. Acoust. Speech Signal Process,voL.ASSP-28pp474-475.1980[12]S. Doclo and M. Moonen[J]. " Multi-microphone noise reduction using recursive GSVD-based optimal filtering with ANCpostprocessing stage, "IEEE Trans. Speech Audio Process., vol. 13, no. 1,Pp 53-69, Jan. 2005[13]Philipos C Loizou [J]. "Speech Enhancement Based on Perceptually Motivated Bayesian Estimators of the MagnitudeSpectrum" IEEE TRANSACTIONS ON SPEECH AND AUDIO PROCESSING, VOL 13, NO 5, Pp.857-869, 2005种新的基于稳态噪声的噪声消除算法旧WANFANG DATA文献链接作者:董鹏宇,朱子元,林涛作者单位:同济大学超大规模集成电路研究所,上海20009本文链接http://d.g.wanfangdata.comcn/confereNce6584700.aspx
- 2020-11-28下载
- 积分:1