【语音处理】基于自适应差分脉冲编码调制(ADPCM)的实现研究(Matlab代码实现)

news2024/11/14 3:51:25

 👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果 

🌈3 Matlab代码+语音+详细文章讲解

🎉4 参考文献


💥1 概述

本应讲解在对话语音处理应用中使用的自适应差分脉冲编码调制(ADPCM)的实现

包括以下内容:

•语音数据文件的文件格式

•ADPCM编码算法

•ADPCM解码算法

•步长确定

•初始和重置条件。

图1显示了ADPCM编码过程的框图。将线性输入样本X(n)与该输入X(n-l)的先前估计进行比较。差值d(n)以及当前步长ss(n)被提供给编码器逻辑。如下所述,该逻辑产生ADPCM输出样本。该输出样本还用于更新步长计算ss(n+l),并提供给解码器以计算输入样本的线性估计。

编码器接受来自比较器的差值d(n)和步长,并计算4位ADPCM码。以下是此计算的伪代码表示:

let B3 = B2 = B1 = B0 = 0
if (d(n) < 0)
    then B3 = 1
d(n) = ABS(d(n))
if (d(n) >= ss(n))
    then B2 = 1 and d(n) = d(n) - ss(n)
if (d(n) >= ss(n) / 2)
    then B1 = 1 and d(n) = d(n) - ss(n) / 2
if (d(n) >= ss(n) / 4)
    then B0 = 1
L(n) = (10002 * B3) + (1002 * B2) + (102 * B1) + B0 

📚2 运行结果 

🌈3 Matlab代码+语音+详细文章讲解

部分代码:

function [out,B0,B1,B2,B3] = encoder(x)
%ADPCM Encoder.
% Args:
%   x: An audio file with the format as Microsoft WAVE ".wav".
%
% Returns:
%   out: A row matrix containing the quantified and encoded decimal stream transformed from the
%        encoded binary bit stream, with the ADPCM encoded.
%   B0: A row matrix containing the lowest order of each output(out) in binary format.
%   B1: A row matrix containing the second low order of each output(out) in binary format.
%   B2: A row matrix containing the second high order of each output(out) in binary format.
%   B3: A row matrix containing the highest order of each output(out) in binary format.
%

%
%Finished by Qiushi Yang, 6/12/2018.

Ml_values_table = [-1,-1,-1,-1,2,4,6,8];
step_sizes_table = [16,17,19,21,23,25,28,31,34,37,41,45,50,55,60,66,73,80,88,97,107,118,130,143,157,173,190,209,230,253,279,307,337,371,408,449,494,544,598,658,724,796,876,963,1060,1166,1282,1411,1552];
ss = step_sizes_table;

% Initialization
index = 0;
pre_data = 0;
B0=zeros(size(x));
B1=zeros(size(x)); 
B2=zeros(size(x)); 
B3=zeros(size(x));
% L=0;
out = zeros(size(x));

for i = 1:length(x),
    current_data = x(i);                % input current data
    diff = current_data - pre_data;     % calculate data-increment

    % Calculate the B3,B2,B1,B0 step by step following the References-1 as
    % follows:
    %     let B3 = B2 = B1 = B0 = 0 
    %     if (d(n) < 0)    
    %         then B3 = 1 
    %     d(n) = ABS(d(n)) 
    %     if (d(n) >= ss(n))    
    %         then B2 = 1 and d(n) = d(n) - ss(n) 
    %     if (d(n) >= ss(n) / 2)    
    %         then B1 = 1 and d(n) = d(n) - ss(n) / 2 
    %     if (d(n) >= ss(n) / 4)    
    %         then B0 = 1 L(n) = (10002 * B3) + (1002 * B2) + (102 * B1) + B0   
    if diff<0,
        diff = abs(diff); 
        B3(i) = 1; 
    end
    
    if diff < ss(index+1)/4,
        B2(i) = 0; B1(i) = 0; B0(i) = 0;
    elseif diff > ss(index+1)/4 && diff < ss(index+1)/2,
        B2(i) = 0; B1(i) = 0; B0(i) = 1;
    elseif diff > ss(index+1)/2 && diff < ss(index+1)*3/4,
        B2(i) = 0; B1(i) = 1; B0(i) = 0;
    elseif diff > ss(index+1)*3/4 && diff < ss(index+1),
        B2(i) = 0; B1(i) = 1; B0(i) = 1;
    elseif diff > ss(index+1) && diff < ss(index+1)*5/4,
        B2(i) = 1; B1(i) = 0; B0(i) = 0;
    elseif diff > ss(index+1)*5/4 && diff < ss(index+1)*3/2,
        B2(i) = 1; B1(i) = 0; B0(i) = 1;
    elseif diff > ss(index+1)*3/2 && diff < ss(index+1)*7/4,
        B2(i) = 1; B1(i) = 1; B0(i) = 0;
    elseif diff > ss(index+1)*7/4,
        B2(i) = 1; B1(i) = 1; B0(i) = 1;
    end

    L = 8*B3(i) + 4*B2(i) + 2*B1(i) + B0(i); % Convert the binary number "(B3B2B1B0)_2" to decimal number L as output
    out(i) = L;
    
    % Get the data-increment based on step_sizes_table and index
    diff = fix(ss(index+1)/8) + fix(B0(i)*ss(index+1)/4) + fix(B1(i)*ss(index+1)/2) + fix(B2(i)*ss(index+1));
    diff = (-1)^B3(i)*diff;
    pre_data = pre_data + diff; % Get the predicted data according to the data-increment
    
    index = index + Ml_values_table(4*B2(i) + 2*B1(i) + 1*B0(i) + 1);  % Convert the binary number "(B2B1B0)_2" to decimal number

    if (index<0),
        index=0;
    elseif (index>48),
        index=48;     % Limit the index in the range of step_sizes_table:(0,49)
    end
    
end
end

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。

Copyright 1988, Dialogic Corporation All Rights Reserved. 00-1366-001

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

目标检测算法——安全帽识别数据集(附下载链接)

&#x1f384;&#x1f384;近期&#xff0c;小海带在空闲之余收集整理了一批安全帽识别数据集供大家参考。 整理不易&#xff0c;小伙伴们记得一键三连喔&#xff01;&#xff01;&#xff01;&#x1f388;&#x1f388; 目录 一、安全帽佩戴数据集 二、SHWD安全帽佩戴检测…

五、分页总结

文章目录一、分页的几种方式1、使用关键字实现分页&#xff08;limit&#xff09;2、通过 RowBounds 类实现分页查询3、使用分页插件实现分页分页的作用&#xff1a;在进行查询时如果数据量庞大的话会造成大量的内存压力&#xff0c;让程序卡顿。这时候使用分页减少数据的处理量…

基于SpringBoot编写starter,自己写个类库引入使用

我们在做springboot项目的时候经常会创建项目后先引入各种starter&#xff0c;比如操作数据库的mybatis-plus-boot-starter&#xff0c;数据源的druid-spring-boot-starter等等。引入starter的好处就是可以将第三方的依赖库快速的整合到我们自己的springboot项目中&#xff0c;…

​最新Xcode9 无证书真机调试流程

写在前面 公司分配了新的测试机,证书99台名额已满,所以上网找教程,学习了一下如何使用Xcode无证书进行真机调试。​ 一. 创建证书​ 1. 运行Xcode&#xff0c; Xcode–》Preference–》添加账号&#xff08;能在appstore下载的账号&#xff09;​ 2. 选中刚才添加的AppleID–…

JSP 社区联动系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 社区联动系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开 发&#xff0c;数据库为Mysql&#xff0c;使用ja…

鸿蒙harmony天气预报Demo

1.准备工作 1.1创建项目 sdk为6版本&#xff0c;所以使用华为的远程模拟器p40即可。 1.2准备图片资源 这里把天气预报用到的天气提示的图片全放在资源目录下的media文件下。 具体资源在github仓库已包含&#xff0c;自行前往。 1.3配置文件 接着是修改配置文件&#xff0…

[附源码]Python计算机毕业设计SSM家教管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

DevComponents.DotNetBar2之SuperTabControl使用技巧

关于类似SuperTabControl的使用如何动态调整其TAB标签的顺序问题&#xff0c;搜了全网也没有找到类似答案&#xff0c;都提到tab键的顺序或者是通过控件界面进行调整其顺序&#xff0c;都不是想要的结果&#xff0c;有个网友问的类似问题但是没有一个答案可用。经过反复测试总结…

华为云Nginx配置

配置yum源 mkdir -p /etc/yum.repos.d/repo_bak/ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo_bak/ cd /etc/yum.repos.d wget http://mirrors.myhuaweicloud.com/repo/mirrors_source.sh && sh mirrors_source.sh清除原有yum缓存 yum clean all 执行生成新的…

Win10编译Android版本的FFmpeg库

安装MSYS2 下载地址&#xff1a;MSYS2 安装完成后打开MSYS2执行如下命令&#xff0c; 安装所需要的工具链 pacman -S --needed base-devel mingw-w64-x86_64-toolchain下载android NDK 我在Android Studio里面已经下载过了&#xff0c;没有的可以自己百度去官网下载NDK 我…

[矩阵论] Unit 4. 矩阵的广义逆 - 知识点整理

注: 以下内容均由个人整理, 不保证完全准确, 如有纰漏, 欢迎交流讨论参考: 杨明, 刘先忠. 矩阵论(第二版)[M]. 武汉: 华中科技大学出版社, 2005 4 矩阵的广义逆 4.1 矩阵的左逆与右逆 左逆 右逆 Def’ 4.1: 设 A∈CmnA\in C^{m\times n}A∈Cmn ∃B∈Cnm\exists B\in C^{n\t…

MySQL数据库的性能优化及自动化运维与Mysql高并发优化详细教程

首先&#xff0c;我们来看看DBA的具体工作&#xff0c;我觉得 DBA 真的很忙&#xff1a;备份和恢复、监控状态、集群搭建与扩容、数据迁移和高可用&#xff0c;这是我们 DBA 的功能。 了解这些功能以后要对体系结构有更加深入的了解&#xff0c;你不知道怎么处理这些故障和投诉…

FastReport Online Designer 2023

FastReport Online Designer 2023 添加了以ESRI形状文件格式显示图形地图的新地图组件。 添加了一个用于在数据源中选择表的新按钮。 添加了使用“Shift”或“Ctrl”键在报告树中选择多个项目的选项。 现在可以更改多个选定对象的特性值。 在您使用新配置重置选项后,设计器现在…

Servlet—servlet概述

文章目录servlet概述狭义广义总结图示部分细化&#xff1a;tomcat和servlet关系统一资源定位符统一资源定位符详细内容&#xff1a;协议http协议总结图示ip地址————————————————————————————————servlet概述 本质上是java专门用来处理web数据…

Effective C++条款27:尽量少做转型动作(Minimize casting)

Effective C条款27&#xff1a;尽量少做转型动作&#xff08;Minimize casting&#xff09;条款27&#xff1a;尽量少做转型动作1、数据类型转型语法回顾1.1 C风格的cast1.2 C风格的cast1.3 新风格转型更受欢迎2、使用cast会产生运行时代码——不要认为你以为的就是你以为的3、…

“一人负债,全家背锅”,严厉打击信用卡套现欺诈

不可否认&#xff0c;负债消费往往与高风险密不可分。 近日&#xff0c;一则关于网购的新闻冲上热搜。故事的主人公沉迷于网购&#xff0c;工资不足便利用信用卡透支&#xff0c;长期的积累已至入不敷出&#xff0c;只能向家人求助&#xff0c;家人也因此欠下巨额债务。最终&a…

文本-图像生成(Text-to-Image Generation)的评价指标介绍——CLIPScore、TISE

目录CLIPScore: A Reference-free Evaluation Metric for Image Captioning背景公式总结TISE: Bag of Metrics for Text-to-Image Synthesis Evaluation背景文本-图像生成基本评价指标图像质量和多样性图像和文本相关性创新点1&#xff1a;IS*创新点2&#xff1a;多目标文本-图…

GIS基础测量、地形分析、位置分析、空间分析功能介绍与实操应用

通知 入门级、进阶级一、二、三期、高阶级一期已完成&#xff0c;大家可进入公众号“图新地球”查看底部菜单&#xff1a;2022教程&#xff0c;获得软件直播课程的相关资料&#xff0c;包括直播讲解、直播PPT、直播的示例数据。 另外&#xff0c;本周周三12月7日将举行进阶级…

2020全栈学习Demo大合集 AllDemo-996station GitHub鉴赏官

推荐理由&#xff1a; 2020全栈学习Demo大合集 包含最新 hooks TS 等 还有umidva,数据可视化等实战项目 (持续更新中) 全栈学习 Demo 大合集 说明: 本项目包含常用的技术点和技术栈,时间为 2020 年度最新的技术栈,大范围的包含(Vue,Vuex,SSR,vue 源码解析,vue 实战,vue 单元测…

使用php解压缩ZipArchive类实现后台管理升级的解决方案

项目说明 开发php项目管理系统&#xff0c;由于是新项目且已经部署在生产环境&#xff0c;导致需要根据实际使用情况&#xff0c;进行及时的功能升级或bug修复。 每次升级&#xff0c;进行程序打包&#xff0c;然后通过FTP上传覆盖&#xff1b;后期因服务器转为内网&#xff…