功率电感生产厂家
联系我们
热门搜索
点击排行
推荐阅读
猜猜你喜欢的
研发资讯 您所在的位置: 首页 > 研发资讯

利用实时Java设计数字音频系统

来源:    作者:    发布时间:2016-03-28 12:24:03    浏览量:
图3:该模块图说明了SimpleAudio数字音频应用的体系结构。


数据音频应用的实现

图3给出了数字音频应用的体系结构。它共有6个线程,包括主线程和用Orchestrator实例表示的异步事件处理器。BufferPair将每个插座接口连接至相应的DSP接口。主线程监控用户指令,并在用户请求关闭会话时调用SimpleAudio实例的terminateActivity()方法。所有其它线程通过调用continueActivity()业务,定期轮询SimpleAudio实例。到了关机时,该方法返回false值。

在缺省配置中,该应用以8kHz采样频率对麦克风输入进行采样,每次采样采集8比特数据。这种配置每秒钟产生8k字节的数字音频数据,这对简单的语音应用来说已经足够。但是,它不适合高保真立贴片电感体声信号。一般的CD录制以44.1kHz的采样频率对两个立体声信道每次采样16比特。这种高保真度信号的带宽要求为176.4千字节/秒。

在缺省配置中,插槽读模块和写模块采用足够的带宽进行可靠传输,以可靠提供所有从DSPReader模块采集的数据。我们采用了一种直接压缩技术,一连串同样的字节值(像出现在静音期间的那样)由一个专用的转义(escape)值、重复次数和重复值表示。当然,更先进的压缩技术将更为合适。

在实时系统中,由抖动描述特定实时组件的理想执行时间的预期偏离,由一个确切的线程描述数字音频应用的每个组件。SocketWriter线程接收来自DSPReader模块的原始数据流,对数据进行压缩,并将数据传送至网络插座通道。如果网络插座通道的带宽有限,只能达到预算的8千字节/秒,那么任何导致SocketWriter延迟数据传输的抖动影响将随着时间而累积。

在缺省配置中,预计SocketWriter每125µs传输1字节数据。如果每秒的音频数据有1个字节延迟半毫秒,则1小时后,累积延迟将约为2秒。为防止抖动延迟的累积,该架构包含一个运行在16Hz的监视线程。

在每个周期内,该线程强制让SocketWriter和DSPWriter组件丢弃62.5ms之前的数据。由于我们处理的是音频数据,所以通常来讲,丢弃的临时数据值比允许数据到达时间偏移更可取一多层电感器些。人们通常不会注意到丢弃临时数据字节的影响。

请注意在第1行出现的@StaticAnalyzable注释,源码列表中的@ StaticAnalyzable(enforce_time_analysis = {false}, enforce_non_blocking = {false})。这代表了部分方法签名(method signature)。注意该注释给出了enforce_time_analysis 和enforce_non_blocking属性的参数值,两者都是false。这表示该方法的实现无需将其本身限制在子集内,对于该子集,静态分析器可从中推断执行该方法所需要的严格CPU时间上限,也不要求静态分析器验证该方法执行时永远不会阻断。

如果这些属性定义没有给出,硬实时验证器将认为程序不合法,因为在源码列表的(!orchestrator.destroy()) { through 57, }执行时,静态分析器无法确定该循环包含了多少次第55行。此外,main方法的执行可能会在第59行的socket_ reader_thread.join()至63行的orchestrator_thread.join()之间阻断,以及在第51行sa.awaitTermination()调用的await-Termination()方法中阻断。

在@StaticAnalyzable注释中未注明的是enforce_memory_analysis属性的值。该属性的缺省值为true,这意味着该方法的实现必须符合限定的指导方针以使执行该方法时静态分析器能够确定将要分配的最大内存。假设该环境的实时Java规则将内存作为运行栈的一部分,则临时内存分配的上限就表示必需的主线程的运行时栈大小。

注释有助于软件开发,并大大简化软件维护工作。通常,系统架构师将复杂的系统功能分为较小的组件,以便由不同的开发小组实现。因此,描述不同组件之间连接的接口定义,不仅详细说明了可以在组件间传递的参数类型,还包括在每个组件中必须实现的实时处理的限制,能减少软件维护方面的开销。

对于现有软件的修改必须遵大电流电感从组件接口注释中描述的所有其它特殊实时限制。如果软件维护人员违反了这些接口要求,他们可以从字节码验证器得到直接、明确的反馈。从而确保现有大型实时软件系统的不断变化不会动摇现有系统的稳定性。

在对可靠运行该主程序所需的堆栈内存进行分析时,静态分析器必须确定在该方法以及该方法所调用的方法中,每个对象要求分配多大内存。为了支持静态分析差模电感结果的模块化合成,字节码验证器要求每个由主程序调用的方法被声明为@Static-Analyzable,而enforce_time_ analysis属性设置为true。快速复查main方法的实现可确保无限循环内不产生分配。这是字节码验证器所要执行的任务之一。

  • 不加压敏放电管的电源设计考虑 在做浪涌,冲击耐压和绝缘耐压时,为了节省空间,


    如何设计电源,比如几十瓦的,低压输出,可以让不加压敏放电管的电源能通过那些干扰和安全等级?


    设计时候有啥经验可以分享一下

  • 小波变换和motion信号处理(一)这是《小波变换和motion信号处理》系列的第一篇,基础普及。第二篇我准备写深入小波的东西,第三篇讲解应用。记得我还在大四的时候,在申请出国和保研中犹豫了好一阵,骨子里的保守最后让我选择了先保研。当然

  • 72W反击电源,ESD轻载不能通过接触放电8KV,但是满请问各位大神,在吧里找了很久没找到问题解决办法,我的情况是,72W的反激开关电源,在做ESD测试时,带满载72W,打静电接触放电8KV就能通过,电源不会重启,但是如果轻载打静电接触放电8KV,

  • 相关信息