matlab PCM编码

更新时间:2023-11-01 02:49:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

PCM编码:

clear all; close all; %建立原信号

dt=0.002; %取时间间隔为0.01

t=0:dt:10; %时域间隔dt为间隔从0到10画图 fc=1 %xt里最大频率

xt=sin(2*pi*fc*t)+cos(2*pi*fc*t); %xt方程

%采样:时间连续信号 变为 时间离散模拟信号

fs=10; %抽样fs>=2fc,每秒钟内的抽样点数目将等于或大于2fc个 sdt=1/fs; %频域采样间隔0.1 t1=0:sdt:10; %以sdt为间隔从0到10画图

st=sin(2*pi*fc*t1)+cos(2*pi*fc*t1); %coswt=cos2pift,2pif=w figure(1); subplot(311);

plot(t,xt);title('原始信号'); %条状图,连续图 grid on %画背景 subplot(312);

stem(t1,st,'.'); %杆状图 ,离散图 title('抽样信号');

grid on %画背景

%量化编码一步完成

n=length(st); %取st的长度为n,本题函数n为101 M=max(st); A=(st/M)*2048;

?(极性码) a2a3a4(段落码)a5a6a7a8(段内电平码) code=zeros(i,8); %产生i*8的零矩阵 %极性码a1

for i=1:n %if循环语句

if A(i)>=0

code(i,1)=1; %代表正值 else

code(i,1)=0; %代表负值 end

% 段内码a2a3a4

if abs(A(i))>=0&&abs(A(i))<16

code(i,2)=0;code(i,3)=0;code(i,4)=0;step=1;start=0; elseif 16<=abs(A(i))&&abs(A(i))<32

code(i,2)=0;code(i,3)=0;code(i,4)=1;step=1;start=16; elseif 32<=abs(A(i))&&abs(A(i))<64

code(i,2)=0;code(i,3)=1;code(i,4)=0;step=2;start=32; elseif 64<=abs(A(i))&&abs(A(i))<128

code(i,2)=0;code(i,3)=1;code(i,4)=1;step=4;start=64; elseif 128<=abs(A(i))&&abs(A(i))<256

code(i,2)=1;code(i,3)=0;code(i,4)=0;step=8;start=128; elseif 256<=abs(A(i))&&abs(A(i))<512

code(i,2)=1;code(i,3)=0;code(i,4)=1;step=16;start=256; elseif 512<=abs(A(i))&&abs(A(i))<1024

code(i,2)=1;code(i,3)=1;code(i,4)=0;step=32;start=512; elseif 1024<=abs(A(i))&&abs(A(i))<2048

code(i,2)=1;code(i,3)=1;code(i,4)=1;step=64;start=1024; end

B=floor((abs(A(i))-start)/step); %段内码编码floor取整4she5ru

t=dec2bin(B,4)-48; Tc2bin定义将B变为4位2进制码,-48改变格式 code(i,5:8)=t(1:4); %输出段内码 end

code=reshape(code',1,8*n); %reshape代表从新塑形 code

subplot(313);

stem(code,'.');axis([1 60 0 1]); title('编码信号'); grid on

五、扩展:将自己的语音保存成一个文件,用matlab读出该信号,进行PCM编码。 程序:

[x,fs,bits]=wavread('notify.wav');

subplot(211);plot(x);title('抽样信号');

n=length(x); M=max(x); A=(x/M)*2048;

code=zeros(i,8); for i=1:n

if A(i)>=0

code(i,1)=1; else

code(i,1)=0; end

if abs(A(i))>=0&&abs(A(i))<16

code(i,2)=0;code(i,3)=0;code(i,4)=0;step=1;start=0; elseif 16<=abs(A(i))&&abs(A(i))<32

code(i,2)=0;code(i,3)=0;code(i,4)=1;step=1;start=16; elseif 32<=abs(A(i))&&abs(A(i))<64

code(i,2)=0;code(i,3)=1;code(i,4)=0;step=2;start=32; elseif 64<=abs(A(i))&&abs(A(i))<128

code(i,2)=0;code(i,3)=1;code(i,4)=1;step=4;start=64; elseif 128<=abs(A(i))&&abs(A(i))<256

code(i,2)=1;code(i,3)=0;code(i,4)=0;step=8;start=128; elseif 256<=abs(A(i))&&abs(A(i))<512

code(i,2)=1;code(i,3)=0;code(i,4)=1;step=16;start=256; elseif 512<=abs(A(i))&&abs(A(i))<1024

code(i,2)=1;code(i,3)=1;code(i,4)=0;step=32;start=512; elseif 1024<=abs(A(i))&&abs(A(i))<2048

code(i,2)=1;code(i,3)=1;code(i,4)=1;step=64;start=1024; end

B=floor((abs(A(i))-start)/step);

t=dec2bin(B,4)-48;

code(i,5:8)=t(1:4); end

code=reshape(code',1,8*n); code

subplot(212);

stem(code,'.');axis([1 100 0 1]); title('编码信号'); grid on

本文来源:https://www.bwwdw.com/article/b5f2.html

Top