编码译码基于matlab GUI霍夫曼Huffman编码译码含Matlab源码 1976期

Posted 海神之光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编码译码基于matlab GUI霍夫曼Huffman编码译码含Matlab源码 1976期相关的知识,希望对你有一定的参考价值。

一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【编码译码】基于matlab GUI霍夫曼Huffman编码译码【含Matlab源码 1976期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、 霍夫曼编码实现方法的研究

在信息爆炸的今天, 数据压缩的重要性不言而喻, 基本过程有三步:建模表达、二次量化和熵编码。其中熵编码又称为冗余度压缩。而统计编码又是熵编码的重要内容, 其主要包括霍夫曼 (Huffman) 编码、游程编码、二进制信源编码、算术编码、LZW编码等。本文以Huffman编码作为熵编码的一种代表, 介绍关于Huffman编码的具体实现方法。

1 引言
1.1 数值传输系统模型如图1所示。

图1 数字传输系统模型
1.2 信源编码:
主要是解决有效性的问题。通过对信源的压缩、扰乱、加密等一系列处理, 力求用最少的数码传递最大的信息量, 使信号更适宜传输。

1.3 数据压缩
就是以最少的数码表示信源所发的信号, 减少容纳给定消息集合或数据采样集合的信号空间。

2 统计编码
对于各种信源都通用的可逆压缩 (无失真编码) 方法, 因为大多数计算机文件都不允许在压缩过程中丢失信息。这类方法主要利用信息或信息序列出现的概率的分布特性, 注重寻找概率与码字长度问题的最优匹配, 这叫做统计编码或概率匹配编码。而霍夫曼 (Huffman) 编码就是其中具有代表性的一种编码方案[1]。

3 霍夫曼 (Huffman) 编码原理
Huffman编码是1952年为文本文件而建立的, 是一种统计编码。它完全依据字符出现的概率来构造平均长度最短的异字头码字, 属于无损压缩编码。Huffman编码的码长是变化的, 对于出现概率高的信息, 编码的长度较短;而对于出现概率低的信息, 编码长度较长。这样, 处理全部信息的总码长一定小于实际信息的符号长度[2]。方法、步骤: (1) 将信号源的符号出现的概率 (在此称为权值) w1, w2, …, wn构造成n棵二叉树集合F=T1, T2, …, Tn, 其中每棵二叉树Ti中只有一个带权为wi的根结点, 其左右子树均为空。 (2) 在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树, 且置新的二叉树的根结点的权值为其左、右子树上根结点的权值之和。 (3) 在F中删除这两棵树, 同时将新得到的二叉树加入F中。 (4) 重复 (2) 和 (3) , 直到F只含一棵树为止。这棵树便是霍夫曼 (Huffman) 树。 (5) 在合并中约定权值小的根结点在左子树上, 权值大的在右子树上。然后在每个左分支上标记为“0”, 右分支上标记为“1”。最后记录从霍夫曼 (Huffman) 树的根结点到每个叶子结点所经过的分支上的“0”或“1”的序列, 从而得到每个符号的Huffman编码。[3]

上述编码的平均码字长度R= (2+2+2+3+3) /5=2.4。说明:由于“1”和“0”的指定是任意的, 故由上述过程编出的最佳码不是唯一的, 但其平均码长是一样的, 故不影响编码效率与数据压缩性能。

三、部分源代码

function varargout = Mianhuffman_GUI(varargin)
% MIANHUFFMAN_GUI M-file for Mianhuffman_GUI.fig
%      MIANHUFFMAN_GUI, by itself, creates a new MIANHUFFMAN_GUI or raises the existing
%      singleton*.
%
%      H = MIANHUFFMAN_GUI returns the handle to a new MIANHUFFMAN_GUI or the handle to
%      the existing singleton*.
%
%      MIANHUFFMAN_GUI('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in MIANHUFFMAN_GUI.M with the given input arguments.
%
%      MIANHUFFMAN_GUI('Property','Value',...) creates a new MIANHUFFMAN_GUI or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before huffman_GUI_OpeningFunction gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to Mianhuffman_GUI_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Mianhuffman_GUI

% Last Modified by GUIDE v2.5 10-Jul-2022 18:54:24

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Mianhuffman_GUI_OpeningFcn, ...
                   'gui_OutputFcn',  @Mianhuffman_GUI_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin & isstr(varargin1)
    gui_State.gui_Callback = str2func(varargin1);
end

if nargout
    [varargout1:nargout] = gui_mainfcn(gui_State, varargin:);
else
    gui_mainfcn(gui_State, varargin:);
end
% End initialization code - DO NOT EDIT


% --- Executes just before Mianhuffman_GUI is made visible.
function Mianhuffman_GUI_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to Mianhuffman_GUI (see VARARGIN)

% Choose default command line output for Mianhuffman_GUI
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes Mianhuffman_GUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = Mianhuffman_GUI_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout1 = handles.output;


% --- Executes during object creation, after setting all properties.
function xylj_CreateFcn(hObject, eventdata, handles)
% hObject    handle to xylj (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end



function xylj_Callback(hObject, eventdata, handles)
% hObject    handle to xylj (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of xylj as text
%        str2double(get(hObject,'String')) returns contents of xylj as a double


% --- Executes on button press in dqxy.
function dqxy_Callback(hObject, eventdata, handles)
% hObject    handle to dqxy (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
[Filename Pathname]=uigetfile('*.txt','请选择文件');       %选择文件框函数
str=[Pathname Filename];      %得到路径和文件名
xinyuan=textread(str,'%s');   %以字符串的形式,读入文本文件
xinyuan=xinyuan:;            %将cell型数据转换成char
set(handles.xylj,'string',str)   %显示信源的路径
set(handles.xy,'string',xinyuan)  %显示信源


% --- Executes during object creation, after setting all properties.
function xy_CreateFcn(hObject, eventdata, handles)
% hObject    handle to xy (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


四、运行结果

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 张成林.霍夫曼编码实现方法的研究[J].教育教学论坛. 2013,(26)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

以上是关于编码译码基于matlab GUI霍夫曼Huffman编码译码含Matlab源码 1976期的主要内容,如果未能解决你的问题,请参考以下文章

编码译码基于matlab GUI CRC+海明编码译码含Matlab源码 1847期

通信基于matlab GUI循环编码译码含Matlab源码 1348期

基于python的二元霍夫曼编码译码详细设计

图像重建基于matlab GUI霍夫曼图像重建含Matlab源码 1168期

编码译码基于matlab QC-LDPC码编码和译码含Matlab译码 2194期

语音压缩基于哈夫曼编解码DCT变换的语音压缩算法仿真