基于DCT变换和huffman编码的语音压缩算法matlab仿真

news2025/1/19 20:21:36

目录

1.算法运行效果图预览

2.算法运行软件版本

3.部分核心程序

4.算法理论概述

4.1 多通道滤波

4.2 DCT变换

4.3 量化

4.3 哈夫曼编码

5.算法完整程序工程


1.算法运行效果图预览

 

 

 

2.算法运行软件版本

matlab2022a

3.部分核心程序

..............................................................................

%% step2:编码
%step2.1:filter bank
%子通道数目,这里暂时设置为4,因为整个系统运行比较缓慢,设置为多通道后,仿真时间
%为原来的N倍,所以这里暂时取N=2,即2通道滤波器组。
N      = 127;
nbands = 32;
data_filter       = func_32_filter(N,nbands,x,select);
%step2.2:DCT
data_DCT          = func_dct(data_filter,select);
figure;
plot(data_DCT(1,:),'r');grid on;title('其中一个通道的DCT变化后的效果仿真');
%step2.3:量化
data_quantization = func_q(data_DCT,select);
%step2.4:huffman 编码
[data_Huffman1 ,data_Huffman2 ,data_Huffman3 ,data_Huffman4,...
 data_Huffman5 ,data_Huffman6 ,data_Huffman7 ,data_Huffman8,...
 data_Huffman9 ,data_Huffman10,data_Huffman11,data_Huffman12,...
 data_Huffman13,data_Huffman14,data_Huffman15,data_Huffman16,...
 data_Huffman17,data_Huffman18,data_Huffman19,data_Huffman20,...
 data_Huffman21,data_Huffman22,data_Huffman23,data_Huffman24,...
 data_Huffman25,data_Huffman26,data_Huffman27,data_Huffman28,...
 data_Huffman29,data_Huffman30,data_Huffman31,data_Huffman32] = func_huffman2(data_quantization,select);

save y.mat data_Huffman1

%% step3:解码
%step3.1 huffman解码
data_unhuffman      = func_invhuffman2(data_Huffman1 ,data_Huffman2 ,data_Huffman3 ,data_Huffman4,...
                                       data_Huffman5 ,data_Huffman6 ,data_Huffman7 ,data_Huffman8,...
                                       data_Huffman9 ,data_Huffman10,data_Huffman11,data_Huffman12,...
                                       data_Huffman13,data_Huffman14,data_Huffman15,data_Huffman16,...
                                       data_Huffman17,data_Huffman18,data_Huffman19,data_Huffman20,...
                                       data_Huffman21,data_Huffman22,data_Huffman23,data_Huffman24,...
                                       data_Huffman25,data_Huffman26,data_Huffman27,data_Huffman28,...
                                       data_Huffman29,data_Huffman30,data_Huffman31,data_Huffman32,...
                                       select);


%step3.2 反量化
data_inquantization = func_unq(data_unhuffman,select);

%step3.3 反DCT
data_IDCT           = func_IDCT(data_inquantization,select);
figure;
plot(data_IDCT(:,1),'r');hold on; grid on;title('其中一个通道IDCT后的效果');


%step3.4 反滤波器
reconstruct_sound   = func_inv32_filter(data_IDCT',select);
figure;
plot(reconstruct_sound,'r');
title('重构后的音乐');
grid on;

%% step4:解码之后播放
sound(reconstruct_sound,Fs);
toc
03_004m

4.算法理论概述

       语音是人类最重要、最有效、最常用和最方便的交换信息的形式,是人们思想疏通和情感交流的最主要途径。在实际的语音通信中,有些信道难以扩宽且质量很差;有些信道正被广泛使用,短期内难以更新;有些昂贵的信道,每压缩一个比特都意味着节省开支。因此,语音压缩编码无疑在语音通信及人类信息交流中占有举足轻重的地位。

       随着通信技术的快速发展,语音压缩编码技术得到了快速发展和广泛应用,尤其是最近20年,语音压缩编码技术在移动通信、卫星通信、多媒体技术以及IP电话通信中得到普遍应用,起着举足轻重的作用。语音编码就是将采集得到的数字语音信号作为数字信号传输、存储或处理,然后对数字语音信号进行压缩编码从而减小存储空间。

       本系统主要包括以下几个模块:多通道滤波器,DCT变换与反变换,量化与逆量化,哈夫曼编码译码,系统的结构框图如下所示:

4.1 多通道滤波

        多通道滤波器被用来对多个输入数据流进行滤波,在通信、多媒体等领域被广泛使用。多通道的主要优势在于可以在输入数据流(通道)采样率较低的情况下,使用速度很快的运算单元。其基本结构如下所示:

4.2 DCT变换

        DCT广泛应用在数字信号处理中,特别是语音数据压缩,自适应滤波以及通信系统等领域。由于DCT的变换矩阵是用浮点数表示,浮点运算量较大,占用较多系统资源。为了提高变换效率,DCT又发展出用定点计算或者较大的整型变换逼近浮点运算。DCT首先由N.Ahmed等人于1974年提出,N点1-D DCT定义如下:

4.3 量化

     本系统采用μ律压扩方法进行量化分析,μ律压扩的数学解析式:

       其中:x为输入信号的归一化值;y为压扩后的信号。对话音信号编码,常采用μ=255,这样适量化信噪比改善约24dB。

4.3 哈夫曼编码

     huffman编码经常应用于数据压缩。 在计算机信息处理中,“哈夫曼编码”是一种一致性编码法,用于数据的无损耗压缩。这一术语是指使用一张特殊的编码表将源字符进行编码。这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的。

        本系统发送端最后的编码模块,需要将量化后的数据进行压缩,得到二进制比特率进行发送,这里我们使用huffman编码。Huffman编码的基本原理如下所示:哈夫曼编码是用于数据文件压缩的一个十分有效的编码方法,压缩率通常在20%~90%之间。哈夫曼编码算法使用字符在文件中出现的频率表来建立一个0,1串,以表示各个字符的最优表示方式。

5.算法完整程序工程

OOOOO

OOO

O

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

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

相关文章

HTTP杂谈之Referer和Origin请求头再探

一 关于Referer和Origin的汇总 1) 知识是凌乱的,各位看官看个热闹即可2) 内容不断更新1、理解有盲区,需要及时纠正2、内容交叉有重复,需要适当删减3、扩展视野3) 以下内容都与Referer和Origin请求头有关联 nginx防盗链 HTTP杂谈之Referrer-Policy响应头 iframe标签referre…

go练习 day01

DTO: note_dto.go package dtoimport "king/model"type NoteAddDTO struct {ID uintTitle string json:"title" form:"title" binding:"required" message:"标题不能为空"Content string json:"conten…

青少年软件编程(Python六级)等级考试试卷(2022年9月)

青少年软件编程(Python六级)等级考试试卷(2022年9月) 第 1 题 单选题 以下关于Python二维数据的描述中,错误的是?( ) A. 表格数据属于二维数据,由整数索引的数据构成 …

[自学记录05|百人计划]Early-Z和Z-Prepass

其实这篇我是不想写的,因为网上资料真的非常非常多很多人都写过,但是我后来想了想,做笔记不就是这样吗,所以就写吧~。前置知识:深度测试Z-Buffer[计算机图形学]可见性与遮挡,Z-Buffer(前瞻预习/复习回顾)__Yhisken的博…

Vue 自定义事件绑定与解绑

绑定自定义事件 说到 Vue 自定义事件,那就需要搞清楚一个问题,为啥有这个玩意。 说到自定义事件之前,需要理解 组件基础的概念。理解了基础概念之后,我们就知道 Vue 的父子之间的通信, 一是 父组件通过 Prop 向子组件…

CK_Label_V1 CK_Label_V9 CK_Label_V11 System Developer‘s Manual

一、Register PTL You should register the PTL to our Management System first; 1、Register CK_Label_V1 Quickly press the side button three times Register ok:The led will turn off after flashing red light and the buzzer will beep once…

一个3年Android的找工作记录

作者:Petterp 这是我最近 1个月 的找工作记录,希望这些经历对你会有所帮助。 有时机会就像一阵风,如果没有握住,那下一阵风什么时候吹来,往往是个运气问题。 写在开始 先说背景: 自考本,3年经验&#xff0…

【JVM】(二)深入理解Java类加载机制与双亲委派模型

文章目录 前言一、类加载过程1.1 加载(Loading)1.2 验证(Verification)1.3 准备(Preparation)1.4 解析(Resolution)1.5 初始化(Initialization) 二、双亲委派…

在线/开源GNSS处理软件/平台介绍

当前,存在较多的GNSS开源/免费软件,可用于质量检核、RTK解算和PPP解算等,本文总结了部分常用的处理软件,其详细信息如表1和表2所示。 表1 常用GNSS预处理(格式转换、质量检核)软件: 软件名称 …

RunnerGo五种压测模式你会配置吗

我们在做性能测试时需要根据性能需求配置不同的压测模式如:阶梯模式。使用jmeter时我们需要安装插件来配置测试模式,为了方便用户使用,RunnerGo内嵌了压测模式这一选项,今天给大家介绍一下RunnerGo的几种压测模式和怎么根据性能需…

基于各种方式划分 vlan

划分VLAN的方式有:基于接口、基于MAC地址、基于IP子网、基于协议、基于策略(MAC地址、IP地址、接口)。 VLAN(虚拟局域网)可以按照以下几种方式进行划分: 端口划分方式 将交换机端口按照需要划分成不同的…

低碳 Web 实践指南

现状和问题 2023年7月6日,世界迎来有记录以来最热的一天。气候变化是如今人类面临的最大健康威胁。据世界卫生组织预测2030年至2050年期间,气候变化预计每年将造成约25万人死亡。这是人们可以真切感受到的变化,而背后的主要推手是碳排放。 …

软件定时器

Q: 什么是定时器? A: 其实在单片机的学习中,已经接触过无数次定时器了,所谓定时器,简单可以理解为闹钟,到达指定一段时间后,就会响铃。 STM32 芯片自带硬件定时器,精度较高,达到定时…

一年级数学 数一数(一到十)

今天我们来学习数一数 有一些老人 眼睛可能花了 需要我们在动物园数清楚是多少个动物 然后告诉他们 可能有的小朋友 不知道某些数字怎么读 您可以打开地址 https://fanyi.baidu.com/?aldtype16047#zh/en/ 将数字 输入到 输入框内 然后点击 下面的小话筒 系统就会读出来了 小…

Java课题笔记~ MyBatis缓存

为了减少重复查询给数据库带来的压力,MyBatis提供了缓存机制,这种机制能够缓存查询的结果,避免重复的查询。 MyBatis提供了两种缓存方式: 一种为针对于SqlSession的缓存【默认开启】 另一种为针对于全局的缓存【手动开启】 一…

社科院与杜兰大学金融管理硕士为什么值得?来这里一探究竟

金融管理方向是近年来考研的热门专业,越来越多的学生在择校时也会将院校专业作为优先考虑的标准。而社科院与杜兰大学金融管理硕士项目作为热门中的热门,究竟为什么值得读呢?下面我们一起去探个究竟吧 一、中美名校强强联合,顶级师…

解压缩软件WinRAR-bandizip-7z--洛

个人收集的解压软件!后期还会更新 ------------------------------------------------------------------- WinRAR:密码1234WinRARhttps://wwzb.lanzoue.com/b0485ldcj BandiZip:密码1234 Bandizip-Professionalhttps://wwzb.lanzoue.com/…

正交变换和仿射变换

正交变换和仿射变换 平面的正交变换 正交点变换(保距变换) 平面上的一个保持任意两点距离不变的点变换 平面正交变换性质 正交变换的乘积是正交变换恒等变换是正交变换正交变换将(不)共线的三点映射成(不&#xff09…

微服务系列<3>---微服务的调用组件 rpc 远程调用

什么是rpc调用,让我们调用远程方法就像调用本地方法一样 这就属于rpc调用 rpc是针对于本地来说的 调用远程方法根调用本地方法一样 如果能达到这种效果 就是rpc调用如果达到一种效果 调用远程和调用本地一样 他就是一种rpc框架2个微服务 之间发的调用 我们之前通过ribbon的方式…

UG\NX 二次开发 相切面、相邻面的选择控件

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: 有群友问“UFUN多选功能过滤面不能选择相切面或相邻面之类的吗?” 这个用Block UI的"面收集器"就可以,ufun函数是不行的。 效果&am…