基于STM32-DSP库的音乐频谱设计(共14页)_第1页
基于STM32-DSP库的音乐频谱设计(共14页)_第2页
基于STM32-DSP库的音乐频谱设计(共14页)_第3页
基于STM32-DSP库的音乐频谱设计(共14页)_第4页
基于STM32-DSP库的音乐频谱设计(共14页)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上基于STM32 DSP库的音乐频谱设计成员:游政园 刘亚东 彭 誉 黄文卓 程 剑 张琼燕班级:电子信息科学与技术1211班指导老师:张静目录基于STM32 DSP库的音乐频谱设计报告摘要:本作品是基于STM32和DSP库的音乐频谱的设计,能够对采集的音频信号进行分频处理并显示在液晶屏上。本设计主控芯片采用的是大容量增强型ARM Cortex-M3 内核STM32F103ZET6芯片,其运行频率高,运算速度快,主频为72MHZ,可超频至128MHZ,在移植了ST官方的DSP库后运算能力非常强,音频采样使用的是其内部12 位逐次逼近型的模拟数字转换器,采样速度快,转换时

2、间短,精度高,同时显示用的是用FSMC控制的TFT液晶屏,可以达到非常好的显示效果。关键字:STM32;DSP库,音乐频谱一、设计任务和性能指标1.1 设计任务设计一个音乐频谱,带有FFT-64点和FFT-256点的音乐柱状显示。用Altium Designer画出原理图,绘出程序流程图,规范化程序设计。实现基本功能。1.2 性能指标1、音乐频谱显示柱状更新速度快,能实时显示当前音乐频谱分布。2、整体抗干扰能力强,功能稳定,精度高。二、设计方案2.1 系统总体方案设计本系统有如下部分:STM32F103ZET6单片机核心控制模块、按键输入模块、电阻触摸屏输入模块、ADC音频采样输入模块,Ili

3、9325主控TFT液晶屏显示输出模块。硬件原理模块框图如下图:Ili9325主控TFT液晶屏显示输出(FSMC通讯)MCU大容量增强型ARM Cortex-M3 内核STM32F103ZET6芯片ADC采样输入(内部集成12位高精度ADC)触摸屏控制(SPI通讯)按键输入2.2 硬件设计 2.2.1主控MCU模块此模块为核心控制模块,采用的芯片是ST公司大容量增强型ARM Cortex-M3 内核STM32F103ZET6芯片为主控,其供电可直接采用锂电池进行供电,其接口电路如下图所示;2.2.2电阻触摸液晶显示模块显示模块采用的是ili9325控制的256色TFT电阻触摸液晶屏,通过STM3

4、2的FSMC控制器接口控制。 其接口电路如下图所示;为了节省资源就把用XPT2046控制的电阻触摸屏和TFT液晶显示屏设计在一起,触摸屏是通过SPI和STM32进行通讯,触摸屏是可以当作按键来使用实现物理按键的功能,其内部结构如下图所示;2.2.3音频采集模块音频采集模块是通过电脑音频输出口的音频传输线直接将音频信号接入STM32的PA2口,由其内部12 位逐次逼近型的模拟数字转换器进行转换,基准电压源VREF+采用的是AMS1117-3.3输出的3.3V,VREF-采用的是接地的方式。2.2.3按键输入模块按键输入可以实现多功能复用,既可以当普通按键使用实现功能切换,也可以作为STM32的待

5、机唤醒键。2.2.4 整体电路布局三、系统软件介绍3.1 软件实现思路整个软件设计共有五个部分,分别是硬件初始化,ADC音频信号采集,读取ADC采样结果并进行转换(数据采样处理),对采集的数据进行分频处理(用的是DSP库函数,快速傅立叶变换64点FFT或256点FFT)、将处理过的数据转换成在液晶屏上显示的点数进行显示。为了保证对音频信号采样的有效性必须使采样频率是信号频率的两倍以上。3.2 各部分软件实现思路硬件初始化软件设计流程图如下图所示;ADC采样读取ADC采样结果并进行转换等待转换完成转换完成对采集的数据进行分频处理(64点FFT或256点FFT)将处理过的数据转换成在液晶屏上显示的

6、点数进行显示3.2.1 硬件初始化首先配置STM32的时钟,使能外部8MHZ晶振9倍频作为时钟源,使其工作在最大频率72MHZ,并开启其内部RCC功能,即对STM32的RCC进行初始化,STM32在进行数据处理和运算时需要用到,初始化按键,初始化TFT触摸液晶屏并清屏,初始化ADC选择PA2作为ADC音频采样通道。硬件初始化函数如下;void DSPDemoInit(void)SysTick->CTRL&=(1<<2);/SYSTICK使用外部8MHZ晶振9倍72MHz ErrorStatus HSEStartUpStatus = ERROR;/定义时钟状态标志 /*

7、 SYSCLK, HCLK, PCLK2 and PCLK1 configuration -*/ /* RCC system reset(for debug purpose) */ RCC_DeInit();/开启RCC并复位 /* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON);/RCC时钟配置为HSE /* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp();/等待时钟稳定 if(HSEStartUpStatus = SUCCESS)/RCC内部寄存器相关配置 /* Ena

8、ble Prefetch Buffer */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* Flash 2 wait state */ FLASH_SetLatency(FLASH_Latency_2); /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */ RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK1 = HCLK/2 */ RCC_PCLK1Config(RCC_HCLK_Div2); /* PLL

9、CLK = 8MHz * 9 = 72 MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* Enable PLL */ RCC_PLLCmd(ENABLE); /* Wait till PLL is ready */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET); /* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* Wait till PLL is

10、used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08); /*- Drivers Initialization -*/ /* Initialize the LCD */ STM3210E_LCD_Init();/初始化液晶屏Adc_Init();/初始化ADC; /* Clear the LCD */ LCD_Clear(Black);/液晶屏清屏3.2.2 音频信号的采集1,采样信号处理函数如以下代码void MygSin(long nfill, long Ampli)/ nfill 采样点数,Ampli数据处理

11、是的放大倍数 uint32_t i; for (i=0; i < nfill; i+)/²采样数据填充输入缓存lBUFINi=Ampli*(Get_Adc_Average(2,1);/将PA2通道采集的AD值放大后写入输入缓存  2,计算各次谐波幅值,此部分为固定模版,只需改动运算点数nfill的值 先将lBUFOUT分解成实部(X)和虚部(Y),然后计算幅值(sqrt(X*X+Y*Y)void powerMag(long nfill) int32_t lX,lY; uint32_t i; for (i=0; i < nfill; i+)/ nfill

12、 采样点数 lX= (lBUFOUTi<<16)>>16; / 将lBUFOUT分解成实部(X) lY= (lBUFOUTi >> 16); / 将lBUFOUT分解成虚部(Y) float X = nfill *(float)lX)/32768; float Y = nfill *(float)lY)/32768; float Mag = sqrt(X*X+ Y*Y)/nfill; 计算幅值(sqrt(X*X+Y*Y) lBUFMAGi = (uint32_t)(Mag*65536);/使得数据符合浮点运算规律 3,进行快速傅立叶变换void MyFFT_

13、NPT(uint32_t freqinc1) /freqinc1为采样分辨率,N=256, Fs = 47.619khz(STM32的/AD的采样率) Fs/N=180Hz, u32 freq; for (freq=20; freq <20000; freq+=freqinc1)/对音频信号频率扫描;音频信号:20-20KHZ; MygSin(NPT, 6.6);/音频信号最大值为1V,最小值为0V,振幅为(1+0)/2=0.5,放大倍/数为3.3/0.5=6.6cr4_fft_256_stm32(lBUFOUT, lBUFIN, NPT);/DSP库函数基4-256点FFT,输入lBU

14、FIN,输/出lBUFOUT,点数NPT powerMag(NPT);/幅值计算; displayPowerMag();/幅值显示 4,幅值显示void displayPowerMag( ) uint16_t aScale;/扫秒高度即要显示的幅值 uint16_t cln; /扫秒宽度即要显示的柱状宽度 for (cln=NPT/2; cln <NPT; cln+)/由于FFT变换后虚部实部对称故只需显示一半 aScale =lBUFMAGcln ; /获取幅值; LCD_SetTextColor(Black);/设置显示颜色if(aScale>=232)aScale=232;/

15、当大于232时显示232,防止满屏 LCD_DrawLine(aScale, (2*cln)+32-256 ,240-aScale,Vertical);/清除以前的柱状点;LCD_DrawLine(aScale+2, (2*cln)+32-256 ,1 ,Vertical);/清除柱状上的漂浮物; LCD_SetTextColor(Red); /设置柱状显示颜色 LCD_DrawLine(0, (2*cln)+32-256 ,aScale ,Vertical);/以柱状形式显示幅值LCD_SetTextColor(Green); /设置漂浮物显示颜色LCD_DrawLine(aScale+2,

16、 (2*cln)+32-256 ,1 ,Vertical);/显示柱状上的漂浮物 四、测试结果4.1 64分频,即64点基4-FFT频谱与电脑对比测试可能是因为电脑对数据的处理的和我们不一样所以图中频谱有些不一样4.2 256分频,即256点基4-FFT频谱与电脑对比测试4.3 64分频,即64点基4-FFT频谱与电脑对比测试此次测试是64点全显示,由此可看出音频信号经FFT变换后具有对称性如下图所示;五、结束语本系统由于硬件接线原因导致音频信号有波动,对信号采集产生干扰,还有就是虽然移植的是DSP库,但由于代码优化不够导致运算一次FFT时间稍有延迟,另外系统的功能有点单一只有频谱显示,本来是做智能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论