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

news/2024/11/23 19:40:22/

一、实验原理

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

模拟信号的数字化过程:

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

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

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

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

模拟信号抽样及频谱:

2、量化与编码

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

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

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

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

二、A律13折线法

• 1位:极性正负

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

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


三、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:nIs=x(1,bb);if Is>1||Is<-1,error('input must within [-1,1]'),endIs=round(Is*2048);C=zeros(1,8);  %将8位PCM编码初始化为全0if Is>0C(1)=1 ;  %判断抽样值的正负end% the polarity determins C(1)abIs=abs(Is);if 0<abIs && abIs<=16C(2:4)=[0 0 0];    %8级量化编码q=1;a=0;C(5:8)=e_coding(abIs,q,a); %16级量化编码endif 16<abIs && abIs<=32C(2:4)=[0 0 1];q=1;a=16;C(5:8)=e_coding(abIs,q,a);endif 32<abIs && abIs<=64C(2:4)=[0 1 0];q=2;a=32;C(5:8)=e_coding(abIs,q,a);endif 64<abIs && abIs<=128C(2:4)=[0 1 1];q=4;a=64;C(5:8)=e_coding(abIs,q,a);endif 128<abIs && abIs<=256C(2:4)=[1 0 0];q=8;a=128;C(5:8)=e_coding(abIs,q,a);endif 256<abIs && abIs<=512C(2:4)=[1 0 1];q=16;a=256;C(5:8)=e_coding(abIs,q,a);endif 512<abIs && abIs<=1024C(2:4)=[1 1 0];q=32;a=512;C(5:8)=e_coding(abIs,q,a);endif 1024<abIs && abIs<=2048C(2:4)=[1 1 1];q=64;a=1024;C(5:8)=e_coding(abIs,q,a);enda13_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:16if Is>a+(k-1)*q && Is<=a+k*qfour=dec2bin(k-1,4);four=str2num(four(:))';elseend
endend

(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/8MM(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==0q=1;    %段内量化间隔a=0;    %段落起始电平end
%     段落序号i=2   if temp==1q=1;a=16;end
%     段落序号i=3    if temp==2q=2;a=32;end
%     段落序号i=4    if temp==3q=4;a=64;end
%     段落序号i=5    if temp==4q=8;a=128;end
%     段落序号i=6    if temp==5q=16;a=256;end
%     段落序号i=7    if temp==6q=32;a=512;end
%     段落序号i=8    if temp==7q=64;a=1024;endA= 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;endoutData(1,kk)=R;%译码后数据
end
end

 以上就是pcm基于A律13折线的编码与解码的全部模块了,放到一起就可以运行了,记得把文件名改成自己的,然后放到同一目录中。


http://www.ppmy.cn/news/384044.html

相关文章

DLNA(明基的返校讲座)

数位家庭技术的两大标准 DLNA是目前产业界最大的标准&#xff0c;DLNA建议采用UPnP这个业界标准。 UPnP世界有七、八百家公司加入&#xff0c;在DLNA这一块有将近快三百家厂商加入&#xff0c;几乎市面上看的到的品牌都有加入这两大协会。这两个是非常显眼的工业标准&#xff0…

[转帖]从光刻机的发展,看懂ASML为何是不可取替

从光刻机的发展&#xff0c;看懂ASML为何是不可取替 http://mini.eastday.com/mobile/171230223351249.html# 2017-12-30 22:33 来源&#xff1a;半导体行业观察 阿斯麦(ASML.O)是全球最大的半导体光刻机设备及服务提供商&#xff0c;在细分领域具备垄断地位。总部位于荷兰费…

蓝牙基本介绍及相关应用

蓝牙(BlueTooth)技术详解 沸沸扬扬的数字和信息的世界不断有活力的注入&#xff0c;而BlueTooth为语音、文字及影像的无线传输大开方便之门&#xff0c;瞬间便带来了移动通讯的新视野。即便BlueTooth仍旧有许多细节亟待解决,但当BlueTooth技术较为完善的那一天&#xff0c;无…

为什么我抓不到baidu的数据包

最近&#xff0c;有位读者问起一个奇怪的事情&#xff0c;他说他想抓一个baidu.com的数据包&#xff0c;体验下看包的乐趣。 但却发现“抓不到”&#xff0c;这就有些奇怪了。 我来还原下他的操作步骤。 首先&#xff0c;通过ping命令&#xff0c;获得访问百度时会请求哪个I…

软件测试面试通关秘籍,一些回答的“禁忌“

“你为什么从上一家公司离职&#xff1f;”这个问题在面试时基本都会被问到&#xff0c;这是无法避免的问题。那么什么样的理由才能做到既反映实际情况&#xff0c;又能得到HR认可呢&#xff1f;以下的几种回答千万不能脱口而出。 1、毫无顾忌地说前公司的坏话 1&#xff09;…

内网渗透—隧道搭建Ngrok与Frp内网穿透

这里写目录标题 1. 前言1.1. 隧道技术介绍1.2. 代理技术介绍1.2.1. 正向代理1.2.2. 反向代理1.2.3. 透明代理1.2.4. 正向代理与透明代理区别 2. 内网穿透2.1. Ngrok2.1.1. 访问Ngrok2.1.2. 代理设置2.1.2.1. 开通代理2.1.2.2. 配置隧道2.1.2.3. 下载客户端 2.1.3. 配置客户端2.…

【方法调用(解析与分派)】

文章目录 方法调用&#xff08;解析与分派&#xff09;小故事 方法调用&#xff08;解析与分派&#xff09; 方法调用是指在程序运行时&#xff0c;程序通过方法名来执行这个方法的过程。方法调用的实现需要解析和分派两个步骤。 解析&#xff08;Resolution&#xff09;是指…

达人评测 i5 1340P和 r7 7840H对比 i51340P和 r77840H选哪个

r7 7840h采用4nm工艺架构&#xff1a;全新Zen 4核心数&#xff1a;8核线程数&#xff1a;16线程睿频&#xff1a;5.1GHz核显情况&#xff1a;780M集显 TDP功耗 35-54W最高支持内存频率 DDR5-5600&#xff0c;LPDDR5x-7500 选 r77840H还是i51340P这些点很重要 http://www.adiann…