PCM编解码的MATLAB实现.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
clc % clear all close all fs=100; t=1/fs:1/fs:1; n=8; s1=cos(2*pi*t); s=s1/max(abs(s1)); %信号归一化 y=Alaw(s); %A律量化 [qu c] = u_quantize(y,n); qu1=decode(c,length(s),ceil(log2(n))+1); x=invAlaw(qu1); x=x*max(abs(s1)); plot(t,s1) hold on plot(t,x,'r') figure(2) function y=Alaw(s0) A=87.6; A0=1/A; s=abs(s0); y=zeros(1,length(s)); y(find(s<=A0))=(A*s(find(s<=A0))/(1+log(A))).*sign(s0(s<=A0)); y(find(s>A0))=((1+log(A*s(find(s>A0))))/(1+log(A))).*sign(s0(s>A0)); function x=invAlaw(y) A=87.6; A0=1/A; y0=abs(y); index=find(y0<=1/(log(A)+1)); % x(index)=(log(A)+1)/A*y0(index).*sign(y(index)); x(index) = y0(index)*(1+log(A))/A.*sign(y(index)); index=find(y0>1/(log(A)+1)); x(index) = 1/A*exp(y0(index)*(1+log(A))-1).*sign(y(index)); % x(index)=1/A*exp(y0(index)/(1/(log(A)+1))-1).*sign(y(index)); function [qu c] = u_quantize(y0,n) %%%%%%%%均匀量化 m=0:1/n:1; q=m(1:n)+1/(2*n); n1=ceil(log2(n)); y=abs(y0); for i=1:n qu(find((y>=m(i)) & y<=m(i+1))) = q(i); codi(find((y>=m(i)) & y<=m(i+1))) = i-1; end qu=qu.*sign(y0); %%%%%%%%编码 c=zeros(1,length(y0)*(n1+1)); for k=1:length(y0) c((k-1)*(n1+1)+2:k*(n1+1)) = dectobin(codi(k),n1); if y0(k)>0 c((k-1)*(n1+1)+1) = 1; end end % cod=dec2bin(codi); % [r l]=size(cod); % for k=1:r % c((k-1)*(l+1)+1)=sign(y0(k)+abs(y0(k))); % for k1=2:l+1 % c((k-1)*(l+1)+k1)=str2num(cod(k,k1-1)); % end % end % % cod = str2num(cod); % %%%%%%%将符号数组转换为数字 % r=ceil(log2(n+1)); % c=zeros(1,length(codi)*r); % for k=1:length(codi) % l=length(cod(k,:)); % for j=1:length(cod(k,:)) % c((k-1)*r+j)=str2num(cod(k,j)); % end % end function qu1=decode(c,N,n0) % N=length(c)/8; n=2^(n0-1); m=0:1/n:1; q=m(1:n)+1/(2*n); % mi=zeros(1,N); for i=1:N mi=bintodec(c((i-1)*n0+2:i*n0)); qu1(i)=q(mi+1); if c((i-1)*n0+1)==0 qu1(i)=-qu1(i);

文档评论(0)

annylsq + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档