博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Matlab PCM编码解码
阅读量:4324 次
发布时间:2019-06-06

本文共 3735 字,大约阅读时间需要 12 分钟。

        好久没发博文了,这两天正好在做通原的实验,正好学学怎么用Live Writer。

        通常我们会把模拟信号抽样、量化,直到最后变换成二进制符号的集成过程称为脉冲编码调制(Pulse Code Modulation),实现的主要包括三个步骤:抽样(sampling)、量化(quantization)和编码(coding)。

         1、Sampling

          Matlab仿真过程中选定模拟信号sin(4*t),按抽样定理,抽样频率只需高于模拟信号最高频率的两倍即可,但是实际情况下会大于两倍的模拟最高频率。

        

         2、Quantization

         量化方法包括:均匀量化和非均匀量化。这里主要讨论非均匀量化,并模拟A率压缩,通过13折现近似实现。

代码如下:

%13折线量化function y=zhe13(x) x=x/max(x); z=sign(x);x=abs(x); for i=1:length(x)     if ((x(i)>=0)&x(i)<1/64)              y(i)=16*x(i);          else if ((x(i)>=1/64)&x(i)<1/32)            y(i)=8*x(i)+1/8;               else if ((x(i)>=1/32)&x(i)<1/16)                  y(i)=4*x(i)+2/8;                   else if ((x(i)>=1/16)&x(i)<1/8)                        y(i)=2*x(i)+3/8;                       else if ((x(i)>=1/8)&x(i)<1/4) y(i)=x(i)+4/8;                              else if ((x(i)>=1/4)&x(i)<1/2)                               y(i)=(1/2)*x(i)+5/8;                               else y(i)=(1/4)*x(i)+6/8;                            end                    end                end;            end;        end;    end;end; y=z.*y;

     

       3、Coding

       编码包括A率13折线编码和解码两个过程,具体原理可参考樊昌信所著《通信原理》第六版中‘模拟信号的数字传输’一章。

代码如下,包括A率13折线编码和A率13折线解码:

% A率13折线编码 function CodeofPCM = C_CodeofPCM(A_Crent,Amax)
%% 极性Jixing = 1; if A_Crent<0         Jixing=0; endJixing = dec2bin(Jixing,1);%% 段号  DuanHao = 0; A_Crentmaxto1 = floor(abs(A_Crent)/Amax*2048); LinghuaJG = 0; %分段操作 if A_Crentmaxto1 < 16        DuanHao = 0;       DuanluoQS = 0;        LinghuaJG = 1; elseif A_Crentmaxto1 < 32       DuanHao = 1;        DuanluoQS = 16;       LinghuaJG = 1;elseif A_Crentmaxto1 < 64      DuanHao = 2;       DuanluoQS = 32;    LinghuaJG = 2; elseif A_Crentmaxto1 < 128        DuanHao = 3;        DuanluoQS = 64;      LinghuaJG = 4;elseif A_Crentmaxto1 < 256      DuanHao = 4;       DuanluoQS = 128;    LinghuaJG = 8; elseif A_Crentmaxto1 < 512        DuanHao = 5;         DuanluoQS = 256;     LinghuaJG = 16;elseif A_Crentmaxto1 < 1024     DuanHao = 6;        DuanluoQS = 512;       LinghuaJG = 32;else    DuanHao = 7;         DuanluoQS = 1024;      LinghuaJG = 64; endDuanHao = dec2bin(DuanHao,3); %% 段内码 if A_Crentmaxto1 == 2048        A_Crentmaxto1 = A_Crentmaxto1-1; endDuanNeima1 = floor((A_Crentmaxto1-DuanluoQS)/LinghuaJG);DuanNeima  = dec2bin(DuanNeima1,4); %% PCM码组 CodeofPCM PCM = strcat(Jixing,DuanHao, DuanNeima); CodeofPCM = str2num(PCM);
% A率13折线解码 function A_Crent=D_CodeofPCM(CodeofPCM) CodeofPCM_int = CodeofPCM;%% 极性判断  Jixing = 1; if floor(CodeofPCM_int/10^7) == 0       Jixing = -1; end%% 段号 DuanHao = floor(mod(abs(CodeofPCM_int),10^7)/10^4); DuanHao = num2str(DuanHao); DuanHao = bin2dec(DuanHao); switch DuanHao      case 0            DuanluoQS=0;                LinghuaJG=1;       case 1             DuanluoQS=16;           LinghuaJG=1;       case 2               DuanluoQS=32;           LinghuaJG=2;        case 3                DuanluoQS=64;              LinghuaJG=4;       case 4           DuanluoQS=128;            LinghuaJG=8;       case 5             DuanluoQS=256;            LinghuaJG=16;      case 6               DuanluoQS=512;            LinghuaJG=32;       case 7                DuanluoQS=1024;           LinghuaJG=64; end%%段内码提取DuanNeima = mod(abs(CodeofPCM_int),10^4); DuanNeima = num2str(DuanNeima); DuanNeima = bin2dec(DuanNeima); absofA_Crent = DuanluoQS + LinghuaJG*DuanNeima + 0.5*LinghuaJG; A_Crent=absofA_Crent*Jixing/2048;

 

 

    PCM具体实现:

    1、选取模拟信号x = sin(4*t),抽样频率为10Hz,得到:

   2、量化,13折线量化:

 

   3、编码:

   编码得到:

      Columns 1 through 8

       11111110    11111011    11101110     1111001     1111101     1111111     1111111     1111111

     Columns 9 through 16

       1111101     1111010    10000000    11111010    11111101    11111111    11111111    11111111

     Columns 17 through 21

        11111101    11111001     1101110     1111011     1111110

 

    解码后与编码比较:

 

 

 

 

转载于:https://www.cnblogs.com/ksheep/archive/2013/05/10/3071385.html

你可能感兴趣的文章
[Hive - LanguageManual] Alter Table/Partition/Column
查看>>
可持久化数组
查看>>
去除IDEA报黄色/灰色的重复代码的下划波浪线
查看>>
Linux发送qq、网易邮件服务配置
查看>>
几道面试题
查看>>
【转】使用 WebGL 进行 3D 开发,第 1 部分: WebGL 简介
查看>>
js用正则表达式控制价格输入
查看>>
chromium浏览器开发系列第三篇:chromium源码目录结构
查看>>
java开发操作系统内核:由实模式进入保护模式之32位寻址
查看>>
第五讲:单例模式
查看>>
Python编程语言的起源
查看>>
Azure ARMTemplate模板,VM扩展命令
查看>>
(转)arguments.callee移除AS3匿名函数的侦听
查看>>
onNewIntent调用时机
查看>>
MYSQL GTID使用运维介绍(转)
查看>>
04代理,迭代器
查看>>
解决Nginx+PHP-FPM出现502(Bad Gateway)错误问题
查看>>
Java 虚拟机:互斥同步、锁优化及synchronized和volatile
查看>>
2.python的基本数据类型
查看>>
python学习笔记-day10-01-【 类的扩展: 重写父类,新式类与经典的区别】
查看>>