【通信原理实验】基于A律13折线的PCM编码与解码(附完整代码)

这篇具有很好参考价值的文章主要介绍了【通信原理实验】基于A律13折线的PCM编码与解码(附完整代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验原理

PCM,Pulse Code Modulation(脉冲编码调制),即把从模拟信号抽样、量化、编码成为二迚制符号的基本过程, 称为脉冲编码调制。

模拟信号的数字化过程:

【通信原理实验】基于A律13折线的PCM编码与解码(附完整代码)

1、抽样 – 时间离散:时间连续的信号 -> 时间离散、幅度连续的信号;

• 抽样定理(香农采样定律、奈奎斯特采样定律):设时间连续信号f(t),其最高截止频率为fm, 如果用时间间隔为𝑇 ≤ 1 2𝑓𝑚 的开关信号对f(t)迚行抽样时,则f(t)就可被样值信号唯一地表示。

• 这样可以只传输这些离散的抽样值,接收端就能恢复原模拟信号。

• 例:典型电话信号的最高频率通常限制在3400Hz,而抽样频率通常采用8000Hz。

模拟信号抽样及频谱:

【通信原理实验】基于A律13折线的PCM编码与解码(附完整代码)

2、量化与编码

•量化:一个连续幅度值的无限数集合 -> 一个 离散幅度值的有限数集合。

• 编码:将量化后的信号编码形成一个二迚制 码组输出。国际标准化的PCM码组是用八位 码组代表一个抽样值。

• 均匀量化:量化间隔保持不变。

• 非均匀量化:根据信号的不同区间来确定量 化间隔 • 非均匀量化优势:当输入信号具有非均匀分 布;改善了小信号时的信噪比。

二、A律13折线法

• 1位:极性正负

• 2-4位:段落码,非均匀量化

• 5-8位:段内码,均匀量化

【通信原理实验】基于A律13折线的PCM编码与解码(附完整代码)


三、pcm编码与解码

题目:对于给定的语音文件进行a律13折线编码,观察原音频信号波形、抽样后音频信号波形、编码后的数据、解码后的数据。

(1)读取语音文件进行抽样量化

%%读取本地wav文件
filePath='Windows XP 关机.wav';
[y,Fs]=audioread(filePath);
y=y';           %转置
yCh1=y(1,:);    %取一个声道

figure
dt=1/Fs;
t=0:dt:(length(yCh1)-1)*dt;
plot(t,yCh1);
title('wav音频信号波形');

 (2)a律13折线编码

sampleVal=8000;%8k抽样率
[sampleData,a13_moddata]=PCM_13Encode(yCh1,Fs,sampleVal);

save('encode_data01.mat','a13_moddata');

figure
dt1=1/sampleVal;
t1=0:dt1:(length(sampleData)-1)*dt1;
plot(t1,sampleData);
title('wav音频信号抽样后的波形');

figure
plot(a13_moddata);
title('编码后的bit数据');

(3)13折线具体编码

在这里我们采用以下引用方式;

function [sampleData,a13_moddata] = PCM_13Encode(inputData,Fs,sampleVal)
[ a13_moddata ] = a_13coding( sampleData );

 a13_moddata 函数:

function  [ a13_moddata ] = a_13coding( x )
n=length(x);
a13_moddata=zeros(1,n*8);
for bb=1:n
    Is=x(1,bb);
    if Is>1||Is<-1,error('input must within [-1,1]'),end
    Is=round(Is*2048);
    C=zeros(1,8);  %将8位PCM编码初始化为全0
    if Is>0
        C(1)=1 ;  %判断抽样值的正负
    end
    
    % the polarity determins C(1)
    abIs=abs(Is);
    
    if 0<abIs && abIs<=16
        C(2:4)=[0 0 0];    %8级量化编码
        q=1;
        a=0;
        C(5:8)=e_coding(abIs,q,a); %16级量化编码
    end
     if 16<abIs && abIs<=32
        C(2:4)=[0 0 1];
        q=1;
        a=16;
        C(5:8)=e_coding(abIs,q,a);
    end
    if 32<abIs && abIs<=64
        C(2:4)=[0 1 0];
        q=2;
        a=32;
        C(5:8)=e_coding(abIs,q,a);
    end
    if 64<abIs && abIs<=128
        C(2:4)=[0 1 1];
        q=4;
        a=64;
        C(5:8)=e_coding(abIs,q,a);
    end
    if 128<abIs && abIs<=256
        C(2:4)=[1 0 0];
        q=8;
        a=128;
        C(5:8)=e_coding(abIs,q,a);
    end
    if 256<abIs && abIs<=512
        C(2:4)=[1 0 1];
        q=16;
        a=256;
        C(5:8)=e_coding(abIs,q,a);
    end
    if 512<abIs && abIs<=1024
        C(2:4)=[1 1 0];
        q=32;
        a=512;
        C(5:8)=e_coding(abIs,q,a);
    end
    if 1024<abIs && abIs<=2048
        C(2:4)=[1 1 1];
        q=64;
        a=1024;
        C(5:8)=e_coding(abIs,q,a);
    end
   
      a13_moddata(1,(bb-1)*8+1:bb*8)=C;  %得到8位pcm编码
    end
end

%16级量化编码函数
function [ four ]=e_coding(Is,q,a)
four=zeros(1,4);
for k=1:16
    if Is>a+(k-1)*q && Is<=a+k*q
        four=dec2bin(k-1,4);
        four=str2num(four(:))';
    else
    end
end

end

(4)pcm解码

clc
clear
sampleVal=8000; 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%读取编码数据 mat文件
data =load('a02.mat') ;  %读取mat 文件
a13_moddata=data.a13_moddata;       %获取mat文件a13_moddata的数据

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%PCM 13折线解码 
[outData] = PCM_13Decode( a13_moddata );

figure
dt1=1/sampleVal;
t1=0:dt1:(length(outData)-1)*dt1;
plot(t1,outData);
title('解码还原后的语音波形');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%将语音数据写入音频WAV文件
writeData=[outData;outData]';%复制声道1数据到声道2,并转置
writeFilePath='decode_data02.wav';
audiowrite(writeFilePath,writeData,sampleVal); 

(5)解码函数

解码引用PCM_13Decode函数,其中具体代码为:

function  [outData] = PCM_13Decode( inputData )

n=length(inputData);
outData=zeros(1,n/8);
MM=zeros(1,8);

for kk=1:n/8
    MM(1:8)=inputData(1,(kk-1)*8+1:kk*8); %取得8位PCM码
    
    temp=MM(2)*2^2+MM(3)*2+MM(4)     ; %将8位PCM码的第2~4位二进制数转化为10进制(三位二进制转十进制)
                %用于判断抽样值在哪个段落内

%     段落序号i=1                
    if temp==0
        q=1;    %段内量化间隔
        a=0;    %段落起始电平
    end
%     段落序号i=2   
    if temp==1
        q=1;
        a=16;
    end
%     段落序号i=3    
    if temp==2
        q=2;
        a=32;
    end
%     段落序号i=4    
    if temp==3
        q=4;
        a=64;
    end
%     段落序号i=5    
    if temp==4
        q=8;
        a=128;
    end
%     段落序号i=6    
    if temp==5
        q=16;
        a=256;
    end
%     段落序号i=7    
    if temp==6
        q=32;
        a=512;
    end
%     段落序号i=8    
    if temp==7
        q=64;
        a=1024;
    end
   
   A= MM(5)*2^3+MM(6)*2^2+MM(7)*2+MM(8)  ;%8位PCM码的第5~8位二进制数转化为10进制
                                          %用于判断抽样值量化级数
                                     
    R=(a+A*q+q/2)/2048;%取量化间隔中点值进行译码
    if  MM(1)==0  %判断极性
        R=-R;
    end
    outData(1,kk)=R;%译码后数据
end
end

【通信原理实验】基于A律13折线的PCM编码与解码(附完整代码)

 以上就是pcm基于A律13折线的编码与解码的全部模块了,放到一起就可以运行了,记得把文件名改成自己的,然后放到同一目录中。文章来源地址https://www.toymoban.com/news/detail-473292.html

到了这里,关于【通信原理实验】基于A律13折线的PCM编码与解码(附完整代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机组成原理--基于Logisim的海明校验码编码电路实验的应用(超详细/设计/实验/作业/练习)

    掌握海明码设计原理,能独立设计实现汉字 GB2312 编码的海明校验编码体系,并最终在实验环境中利用硬件电路实现对应的编码电路。 1.软件:Logisim软件、JAVA环境 2.硬件:计算机Windows 10 在 logisim 中打开实验资料包中的 data.circ 文件,在对应电路中完成海明校验编码电路。输

    2024年02月08日
    浏览(232)
  • 辨析Java与网络通信中的编码与解码

    编码(在Java字符流中) :当我们将字符数据写入字符流时,Java会根据我们指定的字符集(如UTF-8、ISO-8859-1等)将字符转换为相应的字节序列。这个过程就是编码。Java的 Writer 类及其子类负责执行这个编码过程。 解码(在Java字符流中) :当我们从字符流中读取字符数据时,

    2024年03月10日
    浏览(36)
  • Base16的编码和解码原理及代码

    1、将二进制的数据转换为十六进制(0x)来进行显示。 2、原二进制一个字节为8个比特,而一位十六进制字符代表的是四位二进制,所以原二进制的一个字节转换成了两个十六进制的字符,两个字符就是两个字节。是原来大小的两倍 1、准备 首先看ASCII字符代码表,确定我们

    2024年02月16日
    浏览(41)
  • 从原理到实践:音视频编码与解码技术解析

    1.1 引言 音视频编码与解码技术在现代数字媒体领域中扮演着至关重要的角色。随着互联网和移动设备的快速发展,音视频数据的传输和处理变得越来越普遍和重要。理解音视频编码与解码的原理与实践对于开发高质量、高效率的音视频应用程序至关重要。 1.2 音视频编码与解

    2024年02月03日
    浏览(55)
  • 解码器 | 基于 Transformers 的编码器-解码器模型

    基于 transformer 的编码器-解码器模型是 表征学习 和 模型架构 这两个领域多年研究成果的结晶。本文简要介绍了神经编码器-解码器模型的历史,更多背景知识,建议读者阅读由 Sebastion Ruder 撰写的这篇精彩 博文。此外,建议读者对 自注意力 (self-attention) 架构 有一个基本了解

    2024年02月08日
    浏览(51)
  • 编码器 | 基于 Transformers 的编码器-解码器模型

    基于 transformer 的编码器-解码器模型是 表征学习 和 模型架构 这两个领域多年研究成果的结晶。本文简要介绍了神经编码器-解码器模型的历史,更多背景知识,建议读者阅读由 Sebastion Ruder 撰写的这篇精彩 博文。此外,建议读者对 自注意力 (self-attention) 架构 有一个基本了解

    2024年02月08日
    浏览(64)
  • 图片的编码存储与解码输出(基于Android将图片转Base64编码后再次解码会导致图片失真的解决办法)

    链接:https://pan.baidu.com/s/1hvVupGcCf1f41fizF08SNg?pwd=9988  提取码:9988 部分源码: 转Base64编码部分: 以上Android程序运行后会将图片的转为Base64编码进行存储,以下是图片转码后的结果。 下面是进行验证的php代码: 但是解码后输出后的照片出现了严重失真 数据量增加:Base64 编码

    2024年01月18日
    浏览(55)
  • 通信原理板块——线性分组码之监督矩阵、生成矩阵、编解码计算

    微信公众号上线,搜索公众号***小灰灰的FPGA***,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 线性分组码之监督矩阵、生成矩阵、编解码计算 以(n,k

    2024年02月04日
    浏览(50)
  • 通过libfdk_aac编解码器实现AAC音频和PCM的编解码

    了解如何使用libfdk_aac编解码器在Windows环境下实现AAC音频和PCM的编解码,通过FFmpeg进行操作,提高音频质量和压缩效率。

    2024年02月04日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包