历史上的今天
今天是:2025年04月20日(星期日)
2021年04月20日 | 基于EP7312的嵌入式频谱分析技术
2021-04-20 来源:eefocus
本文以ARM EP7312和CS5341为核心设计了音频信号采集系统,研究了嵌入式Linux系统的驱动程序设计和基于多线程、模块化的应用程序设计问题。该系统能够对采集的信号进行FFT变换、存储和显示。
在工程应用中,通过数字采集系统对信号进行采集和显示,可以获取直观的时域波形。但往往人们还需要从时域信息中提取出信号的其它特征,如信号的频域信息。本设计通过数据采集电路对模拟信号进行采集,采用512点的时间抽取基2 FFT算法对采集的数据进行处理,然后在LCD上显示其频谱曲线。系统构建于嵌入式Linux操作系统之上,具有嵌入式设备体积小、成本低、功耗低等特点,可便捷地进行语音采集、显示、处理和声音信号的频谱分析,适用于环境监测及故障诊断等场合。

图1 系统构成图

图2 多线程程序流程图

图3 信号的时域图和频谱图

数据采集电路设计
本系统由模数转换模块、数据处理和控制模块、显示模块这三部分组成,如图1所示。
模数转换芯片采用的是Cirrus Logic公司推出的24位两通道立体声模数转换芯片CS5341,其输出为串行形式,采样频率从32kHz 到192kHz。它有主从两种工作模式,由主从模式选择开关进行选择。
数据处理和控制模块采用了ARM7系列的嵌入式32位EP7312处理器,主频为74MHz。
在该设计中,模拟信号经过放大电路可放大为原来的1倍、2倍、4倍或10倍,具体可由放大倍数开关控制。放大倍数通过EP7312的通用端口控制LCD上每个刻度代表的电压值。CS5341的工作模式为从模式,在该模式下主时钟、串行数据时钟和通道选择时钟都由EP7312提供,串行数据时钟的频率为通道选择时钟的64倍,主时钟频率为通道选择时钟的256倍。当串行数据时钟处于上升沿时,CS5341输出一位数据。通道选择时钟高电平时左通道有效,低电平时右通道有效。
系统的软件设计
系统的软件设计包括驱动设计和应用设计两部分。
驱动设计
在嵌入式Linux系统中,设备驱动程序隐藏了各种设备的具体细节,维护着设备的正常工作,在用户与设备之间起到了桥梁作用。开发设备驱动程序是开发嵌入式系统的重要工作之一。在该系统中,涉及两个驱动程序:CS5341驱动和LCD驱动。EP7312为LCD的控制提供了良好的支持,驱动程序的具体设计可参照参考文献3。
下面介绍CS5341驱动程序的设计。由于CS5341数据采集速度较快,最高达192kHz。为了与其相匹配,我们采用了快速中断fiq。与普通中断不同,快速中断模式有专用的组合寄存器集,因而大大减少了中断时间。而快速中断的申请需要用到中断处理函数的首地址和末地址,为了得到这两个地址,中断处理函数必须用汇编来编写。因此,该驱动有两个文件构成:主文件cs5341.c和中断文件fiq.s。在此着重说明主文件中的设备初始化函数cs5341init()和中断函数。
int CS5341Init(void)
{
..................................
//禁止中断
INTMR3 = 0x0;
//设置相关寄存器
SYSCON3 |= 0x00000008;
DAI64FS = 0x60B;
DAIR =0x00220404;
DAISR =0xFFFFFFFF;
DAIR |=0x10000;
...................................
//注册设备
rc= register_chrdev (cs5341_major, "CS5341", &CS5341_fops);
...................................
//申请fiq
fiqhandler_start = &dai_fiq_handler_start;
fiqhandler_length = &dai_fiq_handler_end - &dai_fiq_handler_start;
if (claim_fiq(&cs5341_fh))
{
printk("cs5341_fh: couldn't claim FIQ.n");
return;
}
set_fiq_hander(fiqhander_start, fiqhander_length);
set_fiq_regs(regs);
..................................
return 0;
}
中断处理程序:
.....................................
.text
.align 2
.global dai_fiq_handler_start
.global dai_fiq_handler_end
dai_fiq_handler_start:
//程序首地址
........................................
........................................
dai_fiq_handler_end:
//程序末地址
应用程序设计
该系统的应用程序设计主要包括数据存储、数据处理(FFT)和波形显示。
数据存储
在该模块中,申请两块缓冲区buf和buffer,buf用来存放采集的数据,buffer为临界资源。程序把数据从buf放入临界资源buffer中,设置一个共享锁,实现该模块、数据的处理和显示模块的互斥访问。
数据处理模块
该模块采用FFT算法对采集的数据进行处理。
FFT变换的具体实现如下:
首先进行码位倒置,得到FFT运算所需要的输入序列。然后采用3层循环完成N点FFT(这里N=512)。
第一层循环:“级”作为第一层循环,N点FFT运算共有M级,这里,我们用m作循环变量,。
第二层循环:“组”作为第二层循环,第m级的组数为,用j作循环变量,。
第三层循环:每组里的蝶形单元作为第三层循环,每一组里共有蝶型单元2m个,用i作循环变量,。
分析上面循环可以得出:第三层循环完成2m个蝶形单元计算;第二层循环使第三层循环进行次,因此,当第二层循环完成时,共进行次蝶形单元计算;第一层循环又使第二层循环进行了M次,因此,当第一层循环完成时,共进行了次蝶型单元计算。
波形显示模块
因为要把处理前的数据和经过FFT处理后的数据同时显示在LCD上,所以,把LCD的上半屏分配给未处理的数据,用于显示时域图;下半屏用于显示频谱图。为了把波形显示在特定的区域,需要对数据进行处理。所采集的数据和FFT变换过的数据的范围均为0~0XFF,0对应于LCD上Y轴坐标的120和210,0XFF对应于LCD上Y轴坐标的30和120。因此,用于显示时域图的数据VAL与其在LCD上Y坐标的关系式为:
Y=120-VAL×90/0XFF
用于显示频谱图的数据NUM与其在LCD上Y坐标的关系式为:
Y=210-NUM×90/0XFF
LCD一屏可显示310个数据点,点与点之间用矢量法直线相连。
多任务操作系统下的编程
与传统的单片机系统不同,Linux是一个多任务的嵌入式操作系统。内核允许将一项工作划分为几个相互独立的任务,这样就缩短了整个系统的响应时间,提高了系统性能。
在设计时采用了多线程的编程方式,从而克服了多进程编程中资源占用量多和响应时间慢等缺点。该程序包括三个线程,流程图如图2所示。主线程负责数据的采集和传输,另外两个辅助线程是在主线程的运行过程中产生的,分别完成数据的处理和波形的显示。
当输入信号的频率为0.377kHz (周期为2.65ms)时,该信号的时域波形及频谱曲线如图3所示。从图中可以看出,通过FFT变换,输入信号的频率特性可以较准确地反映出来。
结语
以EP7312处理器和模数转换芯片CS5341为核心构成的数据采集系统,充分运用了它们在音频采集和处理方面的优势,可以对音频数据流进行实时性的采集、变换、存储和显示,具有速度快、采样频率高、体积小和低功耗等特点。以该系统为核心技术开发的产品可应用于医疗、运输、娱乐等行业,具有广泛的应用前景。
史海拾趣
|
一、安检门原理由晶振产生3.5-4.95M的正弦振荡,由分频器分频为7.8K左右正弦波,经三极管与线圈进行功率放大后输入门板(7区)大线圈进行电磁波发射,由门内1-6区线圈分别进行接收。接收后,将接收到的信号与基准信号进行了比较,发现变化后,改变采 ...… 查看全部问答> |
|
索尼试制了不用电源线即可驱动电视机等电子产品的“无线供电系统”。这种技术通过磁场共振传输电力,可向距离50cm~80cm的电子产品传输60W的电力。供受电设备间的送电效率为80%,加上电源整流电路等,系统整体效率维持在了60%。笔者日前采访了参 ...… 查看全部问答> |
|
用LED共阴极方式写运行无错误 unsigned char code BitTab[]={0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned char code DispTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; 把里面的数改为共阳极的数,就有*** error 65: access ...… 查看全部问答> |
|
100件未来式设计方案,是否反映出想象力和现实的矛盾呢?作出你自己的判断吧http://www.webdesignerdepot.com/2009/04/100-amazing-futuristic-design-concepts-w-wish-were-real/… 查看全部问答> |
|
TI研讨会中奖“TMDX5515EZDSP 开发板和工具包 ” C5515 DSP的主要特性与优势: 3 个片上 LDO 分别用于 DSP 内核、USB 以及模拟子系统; SDRAM 与移动 SDRAM 可支持低功耗应用; 包括高速 USB 2.0、I2S、UART、SP ...… 查看全部问答> |
|
求用最小系板和DS18B20来测量温度并在12864液晶上显示 各位玩MSP430的大大们,求助啦~! 想用MSP430最小系统版和DS18B20来测量温度,且在12864LCD液晶上面显现出数据来! 可不可以帮忙写下代码啊! 急用啊! 下面的CX-1A系统版的原理图 小弟感激不尽! [ 本帖最后由 z9 ...… 查看全部问答> |
|
处理一批2.4寸TFT屏,每人限购10PCS,有美女,有送! 2.4寸TFT屏,带触摸屏,ILI9320驱动!引脚定义如下图: 前天 12:21 上传下载附件 (146.79 KB) 屏的图片如下: 前天 12:21 上传下载附件 (73.57 KB) 前天 12:21 上传下载附件 (63.51 KB) 显示效果如下: ...… 查看全部问答> |
|
【视频分享】TMS320C64x+网络课程9 - sRIO(串行RapidIO) 简介:TMS320C64x+网络课程9——sRIO(串行RapidIO),主要介绍sRIO的一些基本信息,如支持特性,memory管理,中断支持,在DSP内部进行传输,BIOS中的支持等。此网络培训针对C64x+,每次一个专题,由DSP高性能部门技术支持工程师为您全程指导,敬请 ...… 查看全部问答> |




