当前位置: 首页 > news >正文

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

相关文章:

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

一、实验目的 掌握Matlab辅助设计滤波器系数的方法,并实现音频混噪及IIR滤波器滤除,并在LCD上显示音频信号的FFT计算结果。 二、实验原理 音频接口采用的是24.576MHz(读兆赫兹)晶振,实验板上共有3个音频端口&#x…...

Rust多线程交叉打印+Send Sync特征讲解

导航 Rust多线程交叉打印Send Sync特征讲解 一、Rust多线程交叉打印二、Send Sync 特征讲解 Rust多线程交叉打印Send Sync特征讲解 一、Rust多线程交叉打印 先说背景有两个线程,分别为0号线程和1号线线程两个线程交叉打印共享值,并将共享值1当标志为fa…...

C#爬虫爬取某东商品信息

🏆作者:科技、互联网行业优质创作者 🏆专注领域:.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 🏆欢迎关注我(Net数字智慧化基地),里面…...

【Stylus详解与引入】

文章目录 Stylus详解与引入一、Stylus简介二、Stylus的特性1. 变量2. 嵌套规则3. 混合(Mixins)4. 函数5. 条件语句和循环 三、Stylus的引入与配置1. 安装Stylus和stylus-loader2. 配置Webpack3. 在Vue项目中使用Stylus4. 编译Stylus代码四、Stylus的性能…...

001 登录(md5加密)

文章目录 pom.xmlLoginController.javaUserMapper.javaUser.javaUserServiceImpl.javaUserService.javaMD5Util.javaMD5UtilTest.javaValidatorUtil.javaLoginVo.javaRespBean.javaRespBeanEnum.javaSeckillApplication.javaUserMapper.xmllogin.htmlapplication.yamlsql 传统方…...

Linux学习笔记5---WSL2编译裸机程序并烧录至SD卡

在用WLS进行开发的时候发现在mnt/底下竟然识别不了U盘!!也识别不了SD卡!!那程序不就不能烧录到SD卡上了???那还开发个锤子。 在网上查找了一些相关资料,发现可以通过Win32DiskImager…...

React 第二十九章 React 和 Vue 描述页面的区别

面试题:React 和 Vue 是如何描述 UI 界面的?有一些什么样的区别? 标准且浅显的回答: React 中使用的是 JSX,Vue 中使用的是模板来描述界面 前端领域经过长期的发展,目前有两种主流的描述 UI 的方案&#xf…...

Dnspy附加进程调试---代码被优化及无法获取局部变量

代码被优化或者无法获取局部变量的效果图如下: 当你在调试的时候,看到这种情况还是挺恼火的,经过查阅资料后,发现可以这种解决: 参考链接:Making an Image Easier to Debug dnSpy/dnSpy Wiki GitHub 假设…...

Redis---------实现更改数据业务,包括缓存更新,缓存穿透雪崩击穿的处理

三种更新策略 内存淘汰是Redis内存的自动操作,当内存快满了就会触发内存淘汰。超时剔除则是在存储Redis时加上其有限期(expire),有限期一过就会自动删除掉。而主动更新则是自己编写代码去保持更新,所以接下来研究主动更新策略。 主动更新策略…...

蓝牙小车的具体实现

title: 蓝牙小车开发时的一些细节 cover: >- https://tse1-mm.cn.bing.net/th/id/OIP-C.BrSgB91U1MPHGyaaZEqcbwHaEo?w273&h180&c7&r0&o5&dpr1.3&pid1.7 abbrlink: 842d5faf date: tags: #小车基本运动之最重要的—PWM ##1.PWM(Pulse …...

污染修复乙级设计资质中关于设计成果保护的规定

关于污染修复乙级设计资质中设计成果的保护,虽然直接针对该资质的设计成果保护规定可能未在公开资料中有详细阐述,但根据中国知识产权法律体系和行业惯例,设计成果作为智力成果的一部分,主要受以下几个方面的法律保护:…...

##10 卷积神经网络(CNN):深度学习的视觉之眼

文章目录 前言1. CNN的诞生与发展2. CNN的核心概念3. 在PyTorch中构建CNN4. CNN的训练过程5. 应用:使用CNN进行图像分类5. 应用:使用CNN进行时序数据预测代码实例7. 总结与展望前言 在深度学习的领域中,卷积神经网络(CNN)已经成为视觉识别任务的核心技术。自从AlexNet在2…...

Linux下添加自己的服务脚本(service)

systemd服务文件(service file)是用来定义和配置systemd服务的文件,通常以.service为后缀。以下是service文件的详细格式和内容说明: 1 文件路径 /etc/systemd/system(供系统管理员和用户使用)系统服务,开机不需要登录就能运行的程序/usr/lib/systemd/system(供发行版…...

C++:内存管理

C:内存管理 一、C/C内存分布二、C语言中动态内存管理方式:malloc/calloc/realloc/free三、C内存管理方式1.new/delete操作内置类型2.new和delete操作自定义类型 四、operator new与operator delete函数(重点)五、new和delete的实现原理1.内置…...

Veeam - 数据保护和管理解决方案_Windows平台部署备份还原VMware手册

Veeam - - 数据保护和管理解决方案 Veeam Backup & Replication Console Veeam Data Platform Veeam Backup & Replication是一款强大的虚拟机备份、恢复和复制解决方案 安全备份、干净恢复和数据弹性 — 即时交付 在混合云中随时随地管理、控制、备份和恢复您的所有数…...

易基因:Nature子刊:ChIP-seq等揭示c-di-AMP与DasR互作以调控细菌生长、发育和抗生素合成|项目文章

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 c-di-AMP是一种在细菌信号中普遍存在且至关重要的核苷酸第二信使,对于大多数c-di-AMP合成生物体来说,c-di-AMP稳态及其信号转导的分子机制非常值得关注。 2024年…...

stm32学习探究:利用TB6612驱动直流电机

在这篇文章中,我们将探讨如何使用STM32微控制器和TB6612FNG直流电机驱动模块来驱动直流电机。TB6612FNG是一款基于MOSFET的H桥集成电路,能够独立双向控制两个直流电机,非常适合用于小型机器人或双轮车等项目。 一、TB6612FNG 驱动模块介绍 …...

SpringBatch快速入门

Job监听 Spring Batch的Job监听是一种机制,用于在Job的不同阶段插入自定义的逻辑。它允许开发人员在Job开始、结束、失败等不同的事件发生时执行特定的操作。 具体来说,Spring Batch提供了以下几个Job监听器: JobExecutionListener&#xff…...

下载Node.js及其他环境推荐nvm

文章目录 项目场景:下载Node.js环境配置配置环境变量 安装脚手架安装依赖安装淘宝镜像安装 cnpm(我需要安装)nvm 安装 Node.js (推荐) 项目场景: 提示:这里简述项目相关背景: 项目…...

STM32 ADC学习

ADC Analog-to-Digital Converter,即模拟/数字转换器 常见ADC类型 分辨率和采样速度相互矛盾,分辨率越高,采样速率越低。 ADC的特性参数 分辨率:表示ADC能辨别的最小模拟量,用二进制位数表示,比如8,10…...

详解AI作画算法原理

在人工智能领域,AI作画技术已经成为一个引人入胜的研究方向。AI作画算法利用机器学习技术,尤其是深度学习,来生成具有艺术性的图像。本文将深入剖析AI作画的基本原理,包括其技术架构、关键组件以及工作流程。 引言 AI作画技术不…...

每日Attention学习3——Cross-level Feature Fusion

模块出处 [link] [code] [PR 23] Cross-level Feature Aggregation Network for Polyp Segmentation 模块名称 Cross-level Feature Fusion (CFF) 模块作用 双级特征融合 模块结构 模块代码 import torch import torch.nn as nnclass BasicConv2d(nn.Module):def __init__(…...

华为eNSP学习—IP编址

IP编址 IP编址子网划分例题展示第一步:机房1的子网划分第二步:机房2的子网划分第三步:机房3的子网划分IP编址 明确:IPv4地址长度32bit,点分十进制的形式 ip地址构成=网络位+主机位 子网掩码区分网络位和主机位 学此篇基础: ①学会十进制与二进制转换 ②学会区分网络位和…...

数据库的要求

本来我是不准备写数据库的。而且是准备从零开始,学习python,学完语言学,会c和写作技法,再来学习数据库 那样做的复杂度是天量的,按部就班什么的具备,因为你完全不清楚什么时候就有这个基础和条件&#xff0…...

Spring MVC(二)

1. 注解RequestMapping修饰类 在Spring MVC中一般都是使用注解RequestMapping来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置的映射地址作用一致。在上一节的内容中,我们通过注解RequestMapping改进…...

ECP44304T-76是一款增强型通信处理器吗?

ABB ECP44304T-76是一款增强型通信处理器,专为ABB的PLC控制系统设计。 这款通信处理器的主要功能是提供PLC与其他设备或网络之间的通信接口。它支持多种通讯协议,包括但不限于Profibus、Ethernet、Modbus等,使得PLC可以轻松集成到复杂的工业…...

mongoDB分组查询

完整代码 //根据医院编号 和 科室编号 &#xff0c;查询排班规则数据Overridepublic Map<String, Object> getRuleSchedule(long page, long limit, String hoscode, String depcode) {//1 根据医院编号 和 科室编号 查询Criteria criteria Criteria.where("hosco…...

【Java 刷题记录】位运算

位运算 33. 位1的个数 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中 设置位 的个数&#xff08;也被称为汉明重量&#xff09;。 示例 1&#xff1a; 输入&#xff1a;n 11 输出&#xff1a;3 解释…...

WINDOWS下zookeeper突然无法启动但是端口未占用的解决办法(用了WSL)

windows下用着用着时候突然zookeeper启动不了了。netstat查也没有找到端口占用&#xff0c;就是起不来。控制台报错 java.lang.reflect.UndeclaredThrowableException: nullat org.springframework.util.ReflectionUtils.rethrowRuntimeException(ReflectionUtils.java:147) ~…...

【LLM第三篇】名词解释:RLHF——chatgpt的功臣

RLHF (Reinforcement Learning from Human Feedback) &#xff0c;直译为&#xff1a;“来自人类反馈的强化学习”。RLHF是一种结合了强化学习和人类反馈的机器学习方法&#xff0c;主要用于训练大模型以执行复杂的任务&#xff0c;尤其是当这些任务难以通过传统的奖励函数来精…...

关于动物自己做的网站/seo优化方案模板

1、字符型输入框&#xff1a; &#xff08;1&#xff09;字符型输入框&#xff1a;英文全角、英文半角、数字、空或者空格、特殊字符&#xff0c;特别要注意单引号和&符号。不要直接输入特殊字符时&#xff0c;使用“粘贴、拷贝”功能尝试输入。 &#xff08;2&#xff0…...

哪个网站做学历认证/重庆seo杨洋

/*** 生成指定位数的 随机数* param int $length 默认生成4位* return int*/ function generate_code($length 4) {return rand(pow(10,($length-1)), pow(10,$length)-1); }...

新手做网站做那个/南宁seo外包靠谱吗

关于SSL/TLS介绍见文章 SSL/TLS原理详解。 关于证书授权中心CA以及数字证书等概念&#xff0c;请移步 OpenSSL 与 SSL 数字证书概念贴 。 openssl是一个开源程序的套件、这个套件有三个部分组成&#xff1a;一是libcryto&#xff0c;这是一个具有通用功能的加密库&#xff0c;里…...

网站开发学费/济南做网站比较好的公司

背景&#xff1a;不用说&#xff0c;学习C的你&#xff0c;一定知道这是个词……至于难不难懂&#xff0c;就看你的理解能力了&#xff0c;我理解也是费劲千辛万苦啊&#xff0c;成员函数的重载、覆盖&#xff08;override&#xff09;、隐藏、virtual 很容易混淆&#xff0c;C…...

都匀网站建设公司/百度 营销中心

在开发中,可能须要动态设置控件的大小 比如为一个gridview设置宽度: LinearLayout.LayoutParams linearParams2 (LinearLayout.LayoutParams)head_gridView.getLayoutParams();int realwidth Utils.Dp2Px(context, 32);linearParams2.width(headAdapter.getCount())*(realwid…...

网站百度排名优化/百度一下你就知道官方网站

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。 要点 显然单例模式的要点有三个&#xff1b;一是某个类只能有一个实例&#xff1b;二是它必须自行创建这个实例&#xff1b;三是它必须自行…...