完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1.硬件平台的搭建
用的完全是正点原子的硬件平台-阿波罗(STM32H743),所以基本不用再额外调试硬件系统,只是程序调试上需要再花一些时间进行调整。 设计的硬件系统包括LCD屏的显示、麦克风模块和SD卡存储模块 暂时发现需要改进的地方包括以下几点: (1)对于TFT屏的显示 (2)对于SD卡的文件管理系统的调整 (3)对于麦克风模块的工作模式的理解 2.软件系统的调试 软件系统包括的任务是硬件系统的中的驱动程序的编写和使用DSP库对采集的声音信号进行显示:高级一点的话,需要使用低通滤波器,对于高频噪声进行滤除。 1)FTFLCD屏-7寸 RGB TFTLCD 实现点阵显示 2)麦克风模块-WM8978 可以找到声音进入主控的接口部分,进行数据的保存,并实现FFT的数据输入 3)SD卡存储文件的管理 可以实现对存入的文件,进行访问,并进行播放 3.暂时的安排 1)读一读正点原子的开发资料,理解例程中的数据传递的流程 下面是两个开发板提供商的开源资料: 野火 原子 从上面的实验教程中挑选如下的五个实验进行应用性学习: (1)音乐播放实验 学习利用SAI使用I2S协议驱动wm8978 通过DMA进行数据的传输:用SAI 的子模块A,其TX 是使用的DMA1 数据流 5 的通道87 来传输的;并且将DMA2 数据流3 设置为:双缓冲循环模式,外设和存储器宽度相同(16 位/32 位),并开启DMA 传输完成中断(方便填充数据)。给缓冲器填充数据需要在传输完成一次后,在中断中调用这个函数 sai_tx_callback(); wav_play_song函数,是播放 WAV的最终执行函数,该函数解析完 WAV文件后, 上图是I2S的通信需要配置的信号引脚定义。 (2)录音机实验 (3)SD卡的存储实验 (4)DSP实验 (5)RGB TFT显示实验 调用单片机的LCD屏和TFT屏的函数库的封装是否一致呢? (6)DMA数据传输实验:理解双缓冲含义 对于数据传输的梳理如下: 首先声音信号经过麦克风模块,完成ADC转换(ADC转换过程),将采集的信号按照(转换后的数据存储过程)存储到SD卡中,进而完成音频信号的采集;对于音频信号的播放,主控首先从SD卡中读取(从SD卡中读取数据的过程)对应扇区的数据,然后对读取到的数据进行DAC转换(对读取到的数据进行DAC转换的过程),然后把转换后的电压值输送到麦克风集成模块中。故而在阅读例程中需要解决两个问题: (1)麦克风模组对于音频信号的采集方式 内部的ADC的转换过程: 内部的DAC的转换过程: (2)SD在程序中对于数据的存储方式 在SD卡中进行数据的读取: 在SD卡中进行数据的写入: 2)可以在网上寻找STM中DSP模块的使用 后续的安排是,转换过程中,数据的输入方式和转换过程,前提是了解到上述采集模块对于数据的处理方式。 可以先尝试把例程中的幅度谱先调试出来,然后再考虑数据的流向,从而只需要更改数据就可以了。 操作如下,将F4的显示程序,直接搬到H7的平台上,进行平台的移植。 close all; %Turn off all the pictures clc; DC=1; %The magnitude of the dc signal Amp1=1; %The amplitude of the first signal Amp2=3; %The amplitude of the second signal Amp3=5; %The frequency of the third signal Fre1=10;%The frequency of the first signal ) Fre2=40;%The frequency of the Second signal Fre3=80;%The frequency of the third signal Fs=40960; %The sampling frequency N=4096; %The sampling points t=[0:1/Fs:1]; %Sampling time S=DC+Amp1*sin(2*pi*Fre1*t)+Amp2*sin(2*pi*Fre2*t)+Amp3*sin(2*pi*Fre3*t); %信号 %Display the original signal subplot(3,1,1); plot(S,'b'); grid on; xlabel(' Frequency/HZ'); ylabel('Voltage'); title('The original signal'); Y = fft(S,N); %Do FFT transform Module = (abs(Y)); %:Acquire modulus subplot(3,1,2); F=([1:N]-1)*Fs/N; h = stem(F(1:N/320)/10,Module(1:N/320),'fill','--'); set(get(h,'BaseLine'),'LineStyle',':') set(h,'MarkerFaceColor','red') grid on; xlabel(' FFTout'); ylabel('FFT module'); title('the module value of FFT'); Module=Module/(N/2); Module(1)=Module(1)/2; F=([1:N]-1)*Fs/N; subplot(3,1,3); h = stem(F(1:N/320),Module(1:N/320),'fill','--'); set(get(h,'BaseLine'),'LineStyle',':') set(h,'MarkerFaceColor','red') grid on; xlabel(' Frequency /HZ'); ylabel('Voltage'); title('Amplitude - frequency curves'); 当x 为一向量时,以x 元素的值为纵坐标,x 的序号为横坐标值绘制曲线。 可以从MATLABs的程序中来理解博主讲的在单片机中的如何实现FFT的处理过程和以及未知的信号定义。 参考网址二:https://blog.csdn.net/ysudykx/article/details/79515134#%E7%BB%93%E6%9E%9C?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-4&spm=1001.2101.3001.4242 修改LCD显示例程中用到函数的参数定义: //画线 //在指定区域内填充单个颜色经过一番苦心钻研,算是把频谱分析的图像做出来了,目前的实现过程是自定义了一个输入信号。下一步如果把自定义的输入信号,换成采集到的音频数据,就可以完成频谱的显示工作了。 for(i=FFT_LENGTH/2;i if(fft_outputbuf>500) { LCD_Fill(0,i-510,(int)fft_outputbuf/10,i510+4,BLACK);//频率为6k printf("%frn",fft_outputbuf); } else LCD_Fill(0,FFT_LENGTH-510,(int)fft_outputbuf/10,FFT_LENGTH-510+4,WHITE); } } 3)确定调试方案的步骤 暂时有两个思路来解决这个FFT转换,思路一是借助SD卡作为数据转换的媒介,需要先完成ADC转换,然后把数据存储到SD卡中,然后调用DSP中的FFT函数,分别对采集的数据的进行处理,然后并且把数据存储到另一个扇区。思路二是直接在程序中定义一个数组,然后调用FFT对数据进行处理,完成后,把数据直接存储到SD卡中。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1548 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1493 浏览 1 评论
915 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
656 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1544 浏览 2 评论
1846浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
598浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
499浏览 3评论
502浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
483浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-6 09:21 , Processed in 0.868655 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号