历史上的今天

今天是:2024年09月02日(星期一)

正在发生

2020年09月02日 | 基于MSP430的FM音频频谱分析仪的设计方案

发布者:Amy啊111111 来源: elecfans关键字:MSP430  音频频谱分析仪 手机看文章 扫描二维码
随时随地手机看文章

  1.前言

  在实际的广播电视发射工作中,新的发射机的进场测试,发射机的日常指标测试等都涉及了音频的测试。本文设计的音频频谱分析仪就是从信号源的角度出发,测量音频信号的频谱,从而确定各频率成分的大小,为调频广播的各项音频指标的提供参考。


  在本文中主要提出了以MSP43处理器为核心的音频频谱分析仪的设计方案。以数字信号处理的相关理论知识为指导,利用MSP430处理器的优势来进行音频频谱的设计与改进,并最终实现了在TFT液晶HD66772上面显示。


  2.频谱分析仪设计原理

  由于在数字系统中处理的数据都是经由采样得到,所以得到的数据必然是离散的。对于离散的数据,适用离散傅立叶变换来进行处理。


  快速傅里叶变换,是离散傅里叶变换的快速算法,也可用于计算离散傅里叶变换的逆变换,目前已被数字式频谱仪广泛采用。对于长度为N的复数序列 0 1 1 , , , N ? x x L x ,离散傅里叶变换公式为:

  离散傅里叶变换公式

  于是一个序列的运算被分解成两个运算的和的形式, ( ) 1 X k 和( ) 2 X k 可以继续向下分解,最终分解为两点的FFT运算。如果想要FFT运算后的输出为自然顺序排列,则输入序列需要按位倒序来排列。


  图1为8点FFT的运算图。

  8点FFT的运算图

  经过FFT运算后,可以将一个时域信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了,这就是频谱仪的一般原理。


  3.频谱分析仪的设计及实现

  本文介绍了一种基于FFT的的数字音频频谱分析仪的设计方案,通过ADC采样输入的音频信号,ADC采样完成以后,将数据进行倒序排列并进行FFT运算,结果通过TFT液晶显示出来。系统的框图如图2所示。

  频谱分析仪系统框图

  3.1 音频频谱分析仪硬件实现

  为了实现系统功能,采用16bit处理器MSP430来高效处理输入的数据流。MSP430自带ADC12模块,ADC12的采样数据经过运算,通过65K色的液晶显示频谱图。本系统硬件系统图如图3所示。

  音频频谱分析仪硬件实现

  电源模块为整个系统提供供电。系统还能响应用户按键事件,并进行相应的处理。串口模块为系统的扩展预留。


  3.2 音频频谱分析仪的系统软件设计

  系统上电后首先进行系统初始化System_Init(),对看门狗、系统时钟、定时器、I/O端口、ADC等各模块进行初始化。接下来ADC12对连续的模拟信号进行采样,得到离散化的数字信号,由处理器读取该数字信号并进行相应的处理。采样频率过高,采样点数过多,会占用大量宝贵的处理器内存,降低数据处理速度;采样频率过低,又会使采样数据失真而无法恢复原始连续信号。因此,必须根据信号的频率范围来设置采样频率,同时要满足采样定理的要求。


  当采样频率一定时,增加采样点数可以提高频率分辨率,但数据存储空间和计算量也相应增大。一般可根据实际需要进行采样点数的选取,通常设置为2的整数次幂,以便于进行后续的FFT谱分析,本系统采样点数为N=16.ADC12采样流程图如图4所示。

  ADC12采样流程图

  采样后的FFT数据处理是系统的又一个重点和难点,一方面,为了得到正序FFT,需要对原始自然序列进行码位倒序排列;另一方面,为了减少处理器的浮点运算时间,旋转因子kN W 计算采用查表实现。图5为FFT运算的倒序流程图。

  FFT运算流程图

  如果提前将余弦和正弦计算出来作为全局变量,计算kN W 就可以直接调用进行加减计算,减少了大量的浮点运算时间,会以牺牲一点存储器的代价获得快速的系统响应。表1是编制的N=16时的余弦和正弦表。

  旋转因子正弦余弦表

  图6表示的是FFT运算的流程图,整个FFT程序包含在一个迭代的过程中,最后一层计算总是2-FFT蝶形运算,下面是蝶形运算和FFT计算的主程序段:

  蝶形运算和FFT计算的主程序段

  蝶形运算和FFT计算的主程序段

  当数据经过FFT处理完毕以后,最后一步就是直观地把数据显示出来了,在这里我们采用了TFT液晶HD66772.


  结合HD66772的操作时序图,利用指令对其进行读写操作,可以对液晶的读写进行编程。MSP430F149与液晶HD66772模块之间的连接分为控制总线和数据总线。在液晶屏上正确显示信息,必须对液晶进行两个基本操作:第一,写入指令代码;第二,写入显示数据。


  4.系统调试与运行

  因为MSP430F149的主时钟采用8MHz晶振,虽然系统的单条指令的执行时间仅为0.125μs,但是加上处理FFT的运算、ADC12采样频率和液晶的写入时间等影响,液晶的实际刷新频率低于25Hz,产生严重的闪烁感。为了提高刷新频率,将实心柱图改为空心线条,每隔两个空心细线条写入一个实心线条,这样液晶的写入时间减少了2/3,既能保证显示的结果的准确性,也不牺牲系统的写入HD66772液晶的GRAM的时间。解决了信号闪烁的问题。图7为输入音频信号后TFT液晶显示的频谱图。

  系统运算效果图

  图7中将输入信号30Hz-15KHz的音频信号在频域进行了16等分,每一个柱子表示1KHz的频率带宽。从图中可以看到一般音频信号的能量集中在低频段,随着频率的升高音频能量也越来越弱,这也是调频广播采用加权技术来提高性噪比的原因了。


  4.结论

  本方案通过ADC采样输入的音频信号,ADC采样完成以后,将数据进行倒序排列并进行FFT运算,结果通过TFT液晶显示出来。由于采用的处理器的处理能力的原因,不能做到很高的采样频率和很精细的频率分辨率,要提高系统的频率分辨率,就需要增加采样点数。可以借助PC的强大处理能力,将采样的数据通过预留的串口传送给PC,在PC上完成FFT运算以及显示,这就是虚拟仪器的方式,实际工作中应用前景也非常大。

关键字:MSP430  音频频谱分析仪 引用地址:基于MSP430的FM音频频谱分析仪的设计方案

上一篇:基于MSP430单片机的发控时序检测系统电路设计
下一篇:MSP430x09x系列 MCU在电动剃须刀中的应用

推荐阅读

作为语音交互的一大重要细分应用场景,儿童终端市场在经过过去两年持续的试水和探索之后,2018年迎来新一波的增长高潮。从智能故事机、早教娱乐机再到儿童智能音箱,几乎每一类都成为了当前市面上的爆品,成为2018年国内语音交互应用领域的一道“靓丽风景”。 应用转型与场景需求“双向”驱动 儿童智能语音市场“爆火”受惠于智能语音技术的成熟及应用场...
最近,华为在智能音频领域再进一步,推出了旗下继华为AI音箱的第二款智能音箱产品—华为AI音箱mini。相较于华为AI音箱,华为AI音箱mini在造型更加小巧。 这么小巧的机身,内部的构造及用料如何,是否会因为较小的机身尺寸而向设计及做工妥协?为了一探究竟,我们对华为AI音箱mini进行了拆解,一起来看看。 一、华为AI音箱mini开箱 包装盒的正面很简洁,封...
在豪华纯电动汽车的具备竞赛上,Lucid Motors 是第一家往 1000 公里 NEDC 来做的,而且 EPA 的续航里程将达到 517 英里,这些关键的数字也把立品牌、立高端,立参数做到了一个极致,实际上根据目前发布的信息来看,这个电池包将达到 113kWh 的能量。 图 1 Lucid 的平台布置,电池做的比较矮,二排还做了空间避让 01、Lucid 的 113kWh 电池系...
根据Counterpoint Research的数据,印度的智能手机市场将在2021年创下1.73亿部的历史新高,同比增长14%。预计下半年智能手机出货量将超过1亿部。该机构补充说,在6月解除新冠疫情的限制后,该市场一直在经历强劲的消费需求,在8月至11的节日期间,强劲的销售势头将继续。印度的智能手机市场是仅次于中国的全球第二大市场,2020年,印度市场跑赢北美、拉美...

史海拾趣

问答坊 | AI 解惑

AT89S51单片机-模拟开关灯

模拟开关灯 1. 实验任务 如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果 ...…

查看全部问答∨

51系统uc_os2

uCOSC51移植心得 2篇 …

查看全部问答∨

从0开始,在MDK环境下建立一个LM3S8962程序工程

在real_view_MDK环境下建立一个LM3S8962程序 这是hoho的第一篇”教程“(就算是吧), 讲述了我脱离评估套件中示例工程,新建一个简单工程,并仿真运行的过程。 文章均为个人实际操作,其中不合理之处以及描述不清晰之处,还请大虾拍砖.... h ...…

查看全部问答∨

2440的NAND FLASH有坏块怎样解决?

如题,请问有没有办法避免在文件系统下载进了K9F1208之后出现坏块?这样系统就被搞死了....…

查看全部问答∨

windows驱动开发菜鸟问:如何停止驱动

我刚学习驱动程序的开发,编译好以后用DriverStudio的DriverMonitor加载,可是停不掉,不得已重启系统。请问有什么方法可以在不重启系统情况下把驱动停止?谢谢!下面是驱动代码,系统是xp sp2。 #define NTNAME_STRING      ...…

查看全部问答∨

用services.exe做服务程序

最近学习windows mobile的开发。 想做一个开机自动运行,不需要交互界面的程序。 找了很多资料,找到了services.exe这样一个进程,自己写一个dll,dll中包括xxx_init,xxx_open,xxx_close等程序,然后修改注册表,就能启动了。 但是我都照着做了 ...…

查看全部问答∨

Vxworks操作系统在ARM上的移植与开发(讨论)

Vxworks系统在嵌入式ARM(s3c2410\\pxa270 等)芯片上的移植,目前做的人比较少,希望从帖子发出来后能够凝聚一群做这方面的朋友。让我们一起努力吧!…

查看全部问答∨

WinCE简单问题

才开始学习WINCE开发。搞了个Emulator WINCE 5。0.如何把自己写的程序在这个上面看看效果?我直接共享文件后运行程序没反映?我没有安装任何的SDK 是不是需要装?…

查看全部问答∨

STM32F103现在的速度可以带多大点阵的LED显示屏

                                 如果用STM32F103 带448X224点阵的LED显示屏 效果不好 有没有加速的方法 软硬件都行 ...…

查看全部问答∨

C语言和汇编之间的函数参数传递

本帖最后由 dontium 于 2015-1-23 13:33 编辑 数组如何传递? 比如int  vadd(int n,int a[],int b[]) a+=b,a & b 均有n个元素 n传输到寄存器A里面了 那么栈中的a,b呢? 是地址吗? 如何获取地址以及数组元素? 请大虾指点 谢 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved