DSP ARM FPGA 实验箱_音频处理_滤波操作教程:3-9 音频信号的滤波实验

一、实验目的

掌握Matlab辅助设计滤波器系数的方法,并实现音频混噪及IIR滤波器滤除,并在LCD上显示音频信号的FFT计算结果。

二、实验原理

音频接口采用的是24.576MHz(读兆赫兹)晶振,实验板上共有3个音频端口,分别是LINE IN、MIC IN和LINE OUT,音频数据是通过I2C总线进行读写的,McASP(字母)的时钟来自于晶振时钟,分频后可得到帧同步信号和位同步信号。

image.png

TLV320AIC3106音频芯片

(1)数据精度支持 16/20/24/32 bit 。

(2)支持速率 8kHz ~ 96kHz 采样率。

(3)控制总线可选为 SPI 或 I2C。

(4)音频串行数据总线支持4种协议格式: I2S, 左对齐格式,右对齐格式,DSP格式。

(5)有可编程PLL 可以灵活产生时钟。

image.png

音频芯片功能框图

(1)在框图底部分别是供电部分、(点击鼠标)时钟产生部分、(点击鼠标)SPI或I2C串行总线控制部分。

(2)芯片通过左右声道采集输入的音频模拟信号。

(3)经过ADC采样后得到数字化的音频数据。

(4)数字化音频数据通过音频串行总线接口传输到DSP。

(5)DSP处理之后的数字化音频从DSP通过音频串行总线接口再传输到DAC。

(6)音频经过DAC还原为可输出的模拟信号。

(7)最后,通过耳机或者音箱输出音频模拟信号。

image.png

音频芯片的工作流程。音频模拟信号通过左右声道分别采样,经过ADC转换为数字信号后通过McASP传输到DSP,在DSP处理完成后再通过McASP传输到DAC,最后经过DAC转换为模拟信号后,分左右声道输出。

image.png

IIR滤波器

IIR无限冲激响应数字滤波器(infinite impulse response digital filter)是对单位冲激的输入信号的响应为无限长序列的数字滤波器。可分为一维、二维或多维无限冲激响应数字滤波器。它的输出y(n)由当前的和过去的输入信号x(n)及过去的输出信号共同决定。IIR的幅频特性精度很高,不是线性相位的,可以应用于对相位信息不敏感的音频信号上。

对于IIR滤波器,冲激响应理论上应会无限持续,其输出不仅取决于当前和过去的输入信号值,也取决于过去的信号输出值。其系统函数如下:

image.png

无限冲激响应数字滤波器的差分工程如下:

image.png

image.png

IIR滤波器特性

无限冲激响应数字滤波器具有以下特性:

(1)系统函数可以写成封闭函数的形式。

(2)采用递归型结构,即结构上带有反馈环路。IIR滤波器运算结构通常由延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联型四种结构形式,都具有反馈回路。由于运算中的舍入处理,使误差不断累积,有时会产生微弱的寄生振荡。

(3)在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,有现成的设计数据或图表可查,其设计工作量比较小,对计算工具的要求不高。

(4)相位特性不好控制,对相位要求较高时,需加相位校准网络。

IIR滤波器的设计

设计IIR数字滤波器实质上就是找到一个使其频率响应H(Z)满足给定的通带截止频率、通带衰减系数、阻带截止频率及阻带衰减系数的可以在物理上实现的系统函数H(Z)。

根据所要设计滤波器的参数去确定一个模拟滤波器的传输函数,然后再根据这个传输函数,通过双线性变换、或脉冲响应不变法来进行数字滤波器的设计。它的设计比较复杂,复杂在于它的模拟滤波器传输函数H(s)的确定。这一点可以让软件来实现。具体实现步骤:

(1)先确定需要一个什么样的滤波器,巴特沃斯型,切比雪夫型,还是其它什么型的滤波器。

(2)当选定一个型号后,就可以根据设计参数和这个滤波器的计算公式来确定其阶数、传输函数的表达式。通常这个过程中还存在预扭曲的问题(这只是双线性变换法所需要注意的问题,脉冲响应不变法不存在这种问题)。

(3)确定H(S)后,就可以通过双线性变换得到其数字域的差分方程。

MATLAB FIR 滤波器辅助设计,生成滤波器系数。

打开Matlab 软件,并打开"Filter Designed&Analaysis Tool"工具,在弹出的界面中按照所需滤波器修改以下参数:

(1)滤波器类型:高通Highpass;

(2)滤波方式:切比雪夫Ⅱ型IIR(Chebyshev Type II);

(3)滤波器阶数:Minimum order;

(4)采样频率:8000Hz;

(5)阻带截止频率:100Hz

(6)通带截止频率:3400Hz;

设置好参数后,转换为单精度再导出生成包含滤波器系数的.h头文件,将该头文件的数据拆分复制,即可用于IIR函数。

image.png

image.png

程序流程设计

设计中首先要首先要进行I2C和McASP的管脚复用配置,接着使能EDMA3的PSC和配置GPIO模块,然后初始化DSP中断和配置按键中断,进行音频芯片的初始化,并将McASP初始化为EDMA方式,初始化LCD,自定义生成一段噪声备用,最后进行按键检测,如果USER0按键按下,进行音频数据的混合噪声或IIR滤波或者是恢复原声,如果是USER1按键按下,则在LCD上显示计算的音频数据FFT结果。

image.png

数字信号处理库

DSPLIB 包含优化的、C语言可调用的通用信号处理例程,用于计算密集型实时应用程序。 调用这些例程的运行速度比直接用C语言编写的等效代码快得多。使用DSPLIB可以缩短应用程序开发时间。

DSPLIB 3_4_0_0包括适用于 C64x+ 或 C66x 或 C674x 处理器的 Windows 或 Linux 安装可执行文件。 每个可执行文件安装一个组件包存储库、一个文档目录、一个 Eclipse 插件目录和一个扩展的组件目录结构,其中包含组件库、头文件和测试示例。

TMS320C6748处理器使用的是dsplib_c674x_3_4_0_0。

dsplib_c674x_3_4_0_0

image.png

函数源码

FFT运算函数

程序使用DSPLIB 的库来进行FFT运算,调用的程序源码和使用说明可以安装DSPLIB后查看。调用的FFT函数中,第一个参数是样本中 FFT 的长度,第二个参数是指向数据输入的指针。第三个参数是指向复杂旋转因子的指针。第四个参数是指向复杂输出数据的指针。第五个参数是指向包含 64 个条目的位反转表的指针。如果样本的FFT长度可以表示为 4 的幂,第六个参数是4,否则第六个参数是2 。第七个参数是从主FFT开始的样本中的子 FFT偏移索引 。 第八个参数是样本中主FFT的大小。

使用DSPLIB 的库来进行FFT运算。使用时,直接包含“DSPF_sp_fftSPxSP.h”文件 即可。

API接口

void DSPF_sp_fftSPxSP(int N, float *ptr_x, float *ptr_w, float *ptr_y, unsigned char *brev, int n_min, int offset, int n_max);

image.png

FFT逆变换函数

程序使用DSPLIB 的库来进行FFT逆变换,调用的程序源码和使用说明可以安装DSPLIB后查看。调用的IFFT函数中,第一个参数是样本中 FFT 的长度。第二个参数是指向数据输入的指针。第三个参数是指向复杂旋转因子的指针。第四个参数是指向复杂输出数据的指针。第五个参数是指向包含 64 个条目的位反转表的指针 。如果样本的FFT长度可以表示为 4 的幂,第六个参数是4,否则第六个参数是 2 。第七个参数是从主FFT开始的复杂样本中的子FFT偏移索引 。第八个参数是样本中主FFT的大小。

使用DSPLIB 的库来进行FFT逆变换。使用时,直接包含“DSPF_sp_ifftSPxSP.h”文件 即可。

API接口

void DSPF_sp_ifftSPxSP (int N, float *ptr_x, float *ptr_w, float *ptr_y,

unsigned char *brev, int n_min, int offset, int n_max);

image.png

三、操作现象

实验设备

本实验使用的硬件接口为LINE IN和LINE OUT接口,所需硬件为实验板、仿真器、电源、音频线、耳机和音乐播放器。本次操作是使用手机来播放音乐。

image.png

硬件连接

(1)使用音频线连接LINE IN(停顿一下) CON10音频接口和手机,手机播放音乐,

(2)在LINE OUT (停顿一下)CON11接口插上耳机或者音箱。

(3)连接仿真器和电脑的USB接口,

(4)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。

image.png

软件操作

导入工程,选择Demo文件夹下的对应工程

编译工程,生成可执行文件

将CCS连接实验箱并加载程序

程序加载完成后点击运行程序

运行程序后,按下USER0,通过耳机可以听到播放的音乐混合了噪声。

再次按下USER0,可以听到滤波后的音乐,滤波后的音乐和原声几乎一致。

再按下一次USER0按键,耳机会输出原声。

按下USER1按键,在LCD屏上会显示音频信号的频谱图。

实验结束后,先点击黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验箱的连接,最后实验箱断电即可。

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/612167.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉:三维重建技术

书籍:Computer Vision:Three-dimensional Reconstruction Techniques 作者:Andrea Fusiello 出版:Springer 书籍下载-《计算机视觉:三维重建技术》​本书探讨了用于通过图像确定实体物体的几何属性的理论和计算技术…

将来会是Python、Java、Golang三足鼎立吗?

在开始前我有一些资料,是我根据网友给的问题精心整理了一份「 Java的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 软件工程里没有银弹&#xff…

Java方法的重载

方法重载 1. 为什么需要方法重载 public class TestMethod{public static void main (String[] args){int a 10;int b 20;int ret add(a,b);System.out.println("ret "ret);double a2 10.5;double b2 20.5;double ret2 add(a2,b2);System.out.println("…

layui select 绑定onchange事件失效

layui select 绑定onchange事件失效 问题背景解决方案 问题背景 在日常工作中,可能会用到页面 freemaker 以及 layui 前端框架,这个时候直接在 select 上面绑定 onchange 事件往往是不生效的,错误的方式 这种方式给 select 绑定的 onchange…

OpenCV学习(一)银行卡号识别

B站教学链接: 银行卡号识别(OpenCV-Python) 代码:Card_Number_Recognition 1.方法 使用模板匹配的方法来识别银行卡号数字。具体来说,先通过图像预处理将图像中的银行卡号分割出来,再与提供的模板进行…

elementui的table行展开,左侧的icon有的需要有的不需要

百度了一些方法,都不好用,最后还是纯css解决,以下是效果: 代码实现: :deep(.el-table__row:nth-child(1) .el-table__expand-icon){ display: none; }

node pnpm修改默认包的存储路径

pnpm与npm的区别 PNPM和NPM是两个不同的包管理工具。 NPM(Node Package Manager)是Node.js的官方包管理工具,用于安装、发布和管理Node.js模块。NPM将包安装在项目的node_modules目录中,每个包都有自己的依赖树。 PNPM&#xf…

如何使用 ERNIE 千帆大模型基于 Flask 搭建智能英语能力评测对话网页机器人(详细教程)

ERNIE 千帆大模型 ERNIE-3.5是一款基于深度学习技术构建的高效语言模型,其强大的综合能力使其在中文应用方面表现出色。相较于其他模型,如微软的ChatGPT,ERNIE-3.5不仅综合能力更强,而且在训练与推理效率上也更高。这使得ERNIE-3…

ESP32引脚入门指南(五):从理论到实践(SPI)

ESP32 微控制器因其丰富的外设接口而备受赞誉,其中SPI(Serial Peripheral Interface)是一种常见的通信协议。本文将深入探讨ESP32的SPI、HSPI(High-Speed SPI)和VSPI(Very High-Speed SPI)接口&…

3DGS+3D Tiles融合已成 ,更大的场景,更细腻的效果~

最近国外同行Kieran Farr发布了一个他制作的3D GussianSplatting(高斯泼溅)Google Map 3D Tiles的融合叠加的demo案例(如下所示)。 准确来说这是一个数据融合的实景场景,该实景场景使用了倾斜三维和3D GussianSplatting两种实景表达技术&…

CSS跳动文字

<div class"loading-mask"><div class"loading-text"><span style"--i:1">加</span><span style"--i:2">载</span><span style"--i:3">中</span><span style"--i:…

JCR一区 | Matlab实现1D-2D-GASF-CNN-GRU-MATT的多通道输入数据分类预测

JCR一区 | Matlab实现1D-2D-GASF-CNN-GRU-MATT的多通道输入数据分类预测 目录 JCR一区 | Matlab实现1D-2D-GASF-CNN-GRU-MATT的多通道输入数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 基本介绍 Matlab实现1D-2D-GASF-CNN-GRU-MATT的多通道输入数据分类预…

uni-app(五):原生插件打包并使用(Android)

原生插件打包并使用 解决Gradle不显示命令问题解决方法 运行打包查看打包好的包引入到uni-app项目中编写配置文件TestModuleTestComponent 制作基座并运行 解决Gradle不显示命令问题 解决方法 运行打包 查看打包好的包 引入到uni-app项目中 编写配置文件 TestModule {"n…

【操作系统期末速成】​操作系统概述(定义|功能|特征)|发展阶段和分类|结构设计|概念补充

&#x1f3a5; 个人主页&#xff1a;深鱼~&#x1f525;收录专栏&#xff1a;操作系统&#x1f304;欢迎 &#x1f44d;点赞✍评论⭐收藏 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到…

使用 MSYS2 Qt6 发布绿色版的SDR软件无线电应用

文章目录 概要整体架构流程技术名词解释技术细节在启动器中为子进程设置路径和环境。如何迅速找齐所有的DLL 小结附件 概要 新接触软件定义无线电&#xff08;SDR&#xff09;的朋友一般都会一股脑的安装一些现有的SDR平台。无论是GNURadio还是SDR、SDRSharp、SDRAngel&#x…

数字音频的采样和量化

一.PCM&#xff08;Pulse-Code Modulation 脉冲编码调制&#xff09; PCM是一个无损无压缩的&#xff08;相较于有损压缩&#xff0c;如果相对于模拟信号是有损的&#xff09;数字化编码方式&#xff08;PCM不单单应用于音频领域&#xff0c;本文只介绍在音频领域中的应用&…

R2S+ZeroTier+Trilium

软路由使用ZeroTier搭建远程笔记 软路由使用ZeroTier搭建远程笔记 环境部署 安装ZeroTier安装trilium 环境 软路由硬件&#xff1a;友善 Nanopo R2S软路由系统&#xff1a;OpenWrt&#xff0c;使用第三方固件nanopi-openwrt。内网穿透&#xff1a;ZeroTier。远程笔记&…

Arduino-ILI9341驱动介绍二

Arduino-ILI9341驱动介绍二 1.概述 第一篇文章介绍了Arduino-点亮TFT触摸屏&#xff0c;没有介绍如何改变屏幕的内容。这篇文章介绍Arduino-使用ILI9341驱动控制TFT触摸屏原理和ILI9341驱动源代码设计原理以及常用函数 2.Arduino控制TFT触控屏原理 Arduino使用什么方式控制…

echarts自定义图例显示名称、数值、占比

先上代码 legend: {orient: vertical,left: 10,top:20,data: data,textStyle: {color: #9FB7D5 // 设置图例文字颜色为白色},// type: plain, // 设置图例类型为普通类型itemWidth: 10, // 设置图例项的宽度itemHeight: 10, // 设置图例项的高度formatter: function(name) {let…

Oracle 多表查询

关联查询 一、sql:1992语法的连接笛卡尔积等值连接非等值连接自连接外连接 二、sql:1999语法的连接交叉连接自然连接USING创建连接ON创建连接左外连接右外连接FULL OUTER JOININNER JOIN 三、子查询子查询的种类单行子查询多行子查询 在From字句中使用子查询练习 四、行转列 一…