vivado+zedboard之音频分析仪

您所在的位置:网站首页 pico开发板实现音频频谱仪 vivado+zedboard之音频分析仪

vivado+zedboard之音频分析仪

2024-07-08 12:14| 来源: 网络整理| 查看: 265

环境:win7 64   vivado 2014.1 开发板:zedboard version d    xc7z020clg484-1 串口软件:SecureCRT 目标:对一段随机的音频信号进行实时频谱分析。从pc获取音频信号,经由PS的fft函数处理后送入OLED,进行音频频谱的实时显示。通过本实例学习vivado+zedboard软硬件设计的方法,学习控制zedboard外设的方法。本文结合以上两篇博文audio&oled的驱动,加上fft处理程序,整合为音频分析仪。本文重点介绍几个模块之间的配合和通信,关于vivado、sdk的基本使用流程见前面的博文。

说明:本文的fft算法部分采用软件实现的,没有体现出zedboard板中fpga的硬件处理优势;而且本文只能分别处理音频或者播放音频,无法同时处理。本文旨在说明软硬件协同设计的流程,并未对软件本身进行优化。

注意:本文中所有的源码、工程文件在“我的资源”中可以找到,如果没有请联系作者本人。转载请注明出处。

正文: 本文将分为以下步骤: 1. 使用Vivado 建一个工程,添加oled、audio_ctrl等IP,完成硬件设计。generate,最后导入到SDK中

2. 在SDK中新建工程,添加文件,编译。下载到ZedBoard上进行调试

3. 程序分析

4. 总结

1. 使用Vivado 建一个工程,添加oled、audio_ctrl等IP,完成硬件设计。generate,最后导入到SDK中

1)新建目录audio_fre_sw,在其下新建vivado工程。选择zedboard开发板。

2)将ip_repo拷贝到audio_fre_sw/下。打开IP catalog目录,选择IP setting,添加/audio_fre_sw/ip_repo.

3)将system.tcl拷贝到audio_fre_sw/下。

4)打开vivado的TCL console,

   输入:cd (dir)/project/audio_fre_sw。

   输入:source system.tcl

   此时可以看到自动创建了一个system.bd。

5)generate output product

6) create HDL wrapper

7) 添加约束文件。oled.xdc和zed_audio_constraints.xdc

8)generate bitstream

9)open implementation design & block design

10) export for SDK

2. 在SDK中新建工程,添加文件,编译。下载到ZedBoard上进行调试

11) 在SDK中新建工程,audio_fre_sw,选择空模板

12)添加源文件,见/src/sdk

13) 检查自动编译的结果是否正确。如果报错,提示缺少sin、cos等,在project->property->build setting->linker library中添加参数m,以使用数学函数库

   添加完毕后,SDK会自动编译程序。出现“'Finished building: test_audio.elf.size'”说明成功。

14)使用音频线(音箱和电脑连接的那个线)连接pc的音频口和zedboard的LINE IN接口,将耳机的音频插头接入LINE OUT接口。使用miniUSB连接J14和J17接口用于串口通信和烧写程序。

15)打开SecureCRT并连接。选择Xilinx tools->Program FPGA,烧写程序,蓝灯DONE亮说明成功。

16)打开PC的音频播放器,随便播放一段音频。run->run as,选择GDB。

17)可通过开关选择可以进行控制。

SW0:0--播放原始音频;1--进行音频实时fft分析;

至此实例软硬件设计部分已经完成。

3. 程序分析

18)本例相对于audio的例子呢,主要是添加了oled模块和fft算法,算法还是先在cfree下验证过了的。中间的连接主要在fft_audio.h、fft_audio.c文件中,用于测试test、获取音频数据get_audio_fft、音频处理audio_process、oled显示oled_show、求最大频率show_max_fre等。简单的实现了频谱实时分析的功能。

感兴趣的的读者可以直接阅读程序源码。

19)几点说明。

关于fft。在网上找的几个算法,然后自己写测试函数进行测试,选择了其中一个和matlab计算结果相比比较吻合的函数。本打算通过HLS转为IP再进行硬件算法的,但是虽历经千辛万苦生成了IP,但是在vivado中使用时无法综合,8G内存跑满了还是死机,明显没有做好接口的数据处理工作。由于知识有限,暂时只好搁浅。对于本例来说,特别是test函数,选取128个点是理想的,低了就出问题了,而且默认是采样长度为1s,频率分辨率是1hz。

关于音频数据采集。没有设置采样频率,由系统决定,采集满FFT_SIZE个点之后就返回处理。因此最后显示的频率可能也是有问题的。但框架是没有问题的,改下参数就好了。由于时间原因暂时不深究采样的问题了。前面花了一点时间研究了下,但是没有仔细整理,以后有时间再整理好了。

关于处理和播放。本例的播放音频,仅仅是读取数据寄存器的数据然后直接送回。而在处理的时候也是读取寄存器的数据交由fft函数处理,因此两者无法同时进行,即显示频谱的时候就没办法播放音乐了,是单线程工作的。也考虑过多线程处理,但是实际操作的时候,在此编译环境下,无法使用pthread、fork等函数,不知道是编译器没有配置好参数还是window下根本不行,还是裸机开发没办法调用linux的api。也只好暂时搁置了。

4. 总结

本例对外设audio、oled进行操作,通过软件fft对音频进行实时处理并显示在oled中,是一个简单的音频分析仪。关于程序本身可以进行优化,设置采样频率等;可以采用硬件fft来做计算;可以优化为同步播放和处理音频;可以在获取音频的实时频率的基础上对其他外设,如LED灯进行控制,使其安装音频频率进行有规律的、不同效果的闪烁等等。这里提出了几个问题,有时间的话我会慢慢做,或者感兴趣的读者做出来和大家分享。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3