用MATLAB程序开发设计PCM编码调制系统文档格式.docx

上传人:wj 文档编号:8448309 上传时间:2023-05-11 格式:DOCX 页数:19 大小:750.72KB
下载 相关 举报
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第1页
第1页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第2页
第2页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第3页
第3页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第4页
第4页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第5页
第5页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第6页
第6页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第7页
第7页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第8页
第8页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第9页
第9页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第10页
第10页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第11页
第11页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第12页
第12页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第13页
第13页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第14页
第14页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第15页
第15页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第16页
第16页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第17页
第17页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第18页
第18页 / 共19页
用MATLAB程序开发设计PCM编码调制系统文档格式.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

用MATLAB程序开发设计PCM编码调制系统文档格式.docx

《用MATLAB程序开发设计PCM编码调制系统文档格式.docx》由会员分享,可在线阅读,更多相关《用MATLAB程序开发设计PCM编码调制系统文档格式.docx(19页珍藏版)》请在冰点文库上搜索。

用MATLAB程序开发设计PCM编码调制系统文档格式.docx

式中表示归一化输入,定义为

以分贝(dB)计的SQNR为

量化以后,这些已量化的电平用比特对每个已量化电平进行编码.编码通常使用自然二进制码(NBC),即最低电平映射为全0序列,最高电平映射为全1序列,全部其余的电平按已量化值的递增次序映射。

非均匀量化的基本原理

正变换:

,其中是归一化输入(),是一个参数,在标准律的非线性中它等于255。

反变换:

在非均匀量化PCM中,输入信号首先通过一非线性环节以减小输入的动态范围,再将输出加到某一均匀PCM系统上。

在接收端,输出再通过另一非线形环节,该环节是在发送端所用的非线性环节的逆特征。

这样,总的效果就等效于一个在量化电平之间具有非均匀间隔的PCM系统。

非均匀量化时,量化器随着输入信号的大小采用不同的量化间隔,大信号时采用大的量化间隔,小信号时采用小的量化间隔,可以以较少的量化电平数达到输入动态范围的要求

一般对语音信号传输来说,所使用的非线性可以是律的非线性,或是A律的非线性,中国和欧洲采用A率压缩特性(A=87.56),北美和日本采用律压缩特性(=255),压缩特性分别如下:

μ律:

A律:

式中,x为归一化输入,y为归一化输出,A、为压缩系数,上式也可以表示为,

由于A律在工程上不好实现,所以我们经常用近似的13折线压缩法去代替A率压缩

下表列出了计算值与13折线时的值的比较。

计算值与A律13折线时值的比较

1

按折线

分段时的

段落

2

3

4

5

6

7

8

斜率

16

表中第二行的值是根据时计算得到的,第三行的值是13折线分段时的值。

可见,13折线各段落的分界点与曲线十分逼近,同时按2的幂次分割有利于数字化。

A律压扩特性是连续曲线,A律不同压扩特性也不同,在电路上实现这样的函数规律是相当复杂的。

实际中,往往采用近似于A律函数规律的13折线()的压扩特性。

这样,它基本上保持了连续压扩特性曲线的优点,。

本设计中所用到的PCM编码正是采用这种压扩特性来编码的。

在13折线法中,无论输入信号是正是负,均按8段折线(8个段落)进行编码。

若用8位折叠二进制码来表示输入信号的抽样量化值,其中用第一位表示量化值的极性,其余七位(第二位至第八位)则表示抽样量化值的绝对大小。

具体的做法是:

用第二至第四位表示段落码,它的8种可能状态来分别代表8个段落的起点电平。

其它四位表示段内码,它的16种可能状态来分别代表每一段落的16个均匀划分的量化级。

这样处理的结果,8个段落被划分成128个量化级。

段落码和8个段落之间的关系如表1所示;

段内码与16个量化级之间的关系见表2所示。

表1段落码表2段内码

段落序号

段落码

段落范围

量化间隔

段内码

111

1024-2048

15

1111

0111

110

512-1024

14

1110

0110

101

256-512

13

1101

0101

100

128-256

12

1100

0100

011

64-128

11

1011

0011

010

32-64

10

1010

0010

001

16-32

9

1001

0001

000

0-16

1000

0000

在13折线中,用8位的折叠二进制码表示信号量化值的具体步骤为:

用第2到4位表示段落码,8个段落的起点电平由它的8种可能状态来分别表示。

其他四位表示段内码,每一个段落它的16个均匀的划分量化级由它的16种可能状态来分别表示。

这样就使得8个段落被划分为128个量化级。

再加上负的,相当于一共有256种量化电平数。

解码时,码字电平=段落起始电平+8M5+4M6+2M7+M8*Δk

解码电平=码字电平+Δk2

三、MATLAB程序及仿真结果

注:

1、为便于阅读,本节仅仅给出核心代码,详细代码请见本文附录。

2、文中的图片若不够清晰,子文件夹中还有高清输出的图片(600ppi)

1、生成题中要求的动态信号

题中要求输入模拟信源的最高频率限制在4KHz以内(可以是正弦信号,也可随机产生信号);

信号平均功率的动态范围≥30dB(自行设定幅度区间)。

为了能够适应不同条件,本文生成的是频率范围在0~4k之间变化,动态范围在30~35dB之间的随机信号。

fana=10^4;

%analogfreq

T=1/fana;

%analoginterval

SignalLength=64;

tana=(0:

SignalLength-1)*T;

RealDynamicRange=0;

while(RealDynamicRange<

=30||RealDynamicRange>

=35)

while(RealDynamicRange<

signal=randi([-300,300],1,SignalLength)/10;

%raiseaccuracy

idx=find(signal==0);

%findall0

signal(idx)=1;

%set0.1totheseindexes

RealDynamicRange=20*log10(max(abs(signal))/min(abs(signal)));

end

%checkfreqrange-------------------

NFFT=2^nextpow2(SignalLength);

ini_fft=fft(signal,NFFT)/NFFT*2;

%showrealityamplitude

f=fana/NFFT*(0:

1:

NFFT-1);

abs_ini_fft=abs(ini_fft);

%limitbandbelow4k

k_stop_freq=floor(4000*NFFT*T);

ini_fft(:

k_stop_freq:

NFFT-k_stop_freq)=0;

%lpf

inisignal=real(ifft(ini_fft)*NFFT/2);

%gettheinputsignal

RealDynamicRange=20*log10(max(abs(inisignal))/min(abs(inisignal)));

end

%checkfreqrangeagain

inisignal_fft=fft(inisignal,NFFT)/NFFT*2;

abs_inisignal_fft=abs(inisignal_fft);

原始产生的随机信号,按照题目要求处理过之后的信号以及频谱如下图所示:

分别为原始随机信号、原始随机信号的带宽;

处理之后带限在0~4kHz之内的信号,处理之后的信号的带宽。

生成信号的动态范围RealDynamicRange本次随机产生结果为34.8dB。

2、信号采样

本节对上述产生的信号进行采样,采样的频率为10000Hz。

%%%%%%%%%%%%%%%%%%%%sampling%%%%%%%%%%%%%%%%%%%%%%%%%

fsam=10^5;

%samplingfreq

Tsam=1/fsam;

tsam=0:

Tsam:

max(tana);

sigsampling=interp1(tana,inisignal,tsam,'

linear'

);

subplot(2,1,1);

plot(tana,inisignal);

title('

analogsignal'

xlabel('

t/s'

ylabel('

f(t)'

subplot(2,1,2);

stem(tsam,sigsampling,'

Marker'

'

none'

samplingsignal'

fs(t)'

print-r600-djpegAnalogAndSamplingSignal;

采样前后信号为

3、信号的均匀量化

%%%%%%%%%%%%%%%%%%%uniformquantization%%%%%%%%%%%%%%%%%%%%%%

N_uniquan=round((25-20*log10(min(abs(inisignal))/max(abs(inisignal)))-4.77)/6.02);

M_uniquan=2^N_uniquan;

sig_uniquan=quant(inisignal,M_uniquan,max(abs(inisignal)))'

;

plot(tana,inisignal,'

b'

holdon;

plot(tana,sig_uniquan,'

r'

print-r600-djpegUniQuan;

delta=2*(max(abs(sig_uniquan)))/(M_uniquan);

sig_uniquancode=round((sig_uniquan-min(sig_uniquan))/delta);

sig_uniquancode_s=dec2bin(sig_uniquancode,N_uniquan);

fid=fopen('

sig_uniquancode_s.txt'

w'

fori=1:

length(inisignal)

fprintf(fid,'

%s\r\n'

sig_uniquancode_s(i,:

));

fclose('

all'

量化之前的信号与量化之后恢复的信号分别为,本次信号均匀量化所需的量化位数为9。

量化信噪比小于25dB。

均匀编码结果如附2所示。

4、PCM编解码

%%%%%%%%%%%%%%%%%%%%%%A_PCM%%%%%%%%%%%%%%%%%%%%%%%%

UniTo1=inisignal/max(abs(inisignal));

%jxmdlmdnm

jxm=zeros(1,length(UniTo1));

dlm=jxm;

dnm=jxm;

quannumdlm=jxm;

length(UniTo1)

%jxm

if(UniTo1(i))<

jxm(i)=0;

elsejxm(i)=1;

%dlm

tmpsig=abs(UniTo1(i));

quannumdlm(i)=round(tmpsig/(1/2048));

startquanV=[0,16,32,64,128,256,512,1024];

quaninterval=[1,1,2,4,8,16,32,64];

if(quannumdlm(i)<

16)

dlm(i)=0;

elseif(quannumdlm(i)>

=16&

&

quannumdlm(i)<

32)

dlm(i)=1;

=32&

64)

dlm(i)=2;

=64&

128)

dlm(i)=3;

=128&

256)

dlm(i)=4;

=256&

512)

dlm(i)=5;

=512&

1024)

dlm(i)=6;

else

dlm(i)=7;

%dnm

dnm(i)=floor((quannumdlm(i)-(startquanV(dlm(i)+1)))/quaninterval(dlm(i)+1));

if(dnm(i)==16)

dnm(i)=15;

jxm_s=dec2bin(jxm);

dlm_s=dec2bin(dlm,3);

dnm_s=dec2bin(dnm,4);

sig_pcmquancode_s.txt'

length(jxm);

%s%s%s\r\n'

jxm_s(i,:

),dlm_s(i,:

),dnm_s(i,:

decodeV=zeros(1,length(inisignal));

recodeV=zeros(1,length(inisignal));

diffpcmquan=zeros(1,length(inisignal));

decodeV(i)=startquanV(dlm(i)+1)+(dnm(i)+0.5)*quaninterval(dlm(i)+1);

diffpcmquan(i)=quannumdlm(i)-decodeV(i);

recodeV(i)=decodeV(i)/2048*max(abs(inisignal));

if(jxm(i)==0)

recodeV(i)=-recodeV(i);

采用了A律13折线PCM编解码,所得的原始信号、解码信号、量化误差如下图所示:

可见,很好地复原了原始信号,量化误差的最大值不超过30,编码结果在附3。

附1:

完整程序

clc;

clear;

tic;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%É

ú

³

É

¯

Ì

¬

Ð

Å

º

-------------

subplot(2,2,1);

plot(tana,signal);

%forbettervisualeff

randomsignal'

%saveas(gcf,'

randomsignal.bmp'

bmp'

subplot(2,2,2);

plot(f(1:

NFFT/2),abs_ini_fft(1:

NFFT/2));

randomsignalband'

f/hz'

f(w)'

randomsignalband.bmp'

subplot(2,2,3);

initialsignal'

initialsignal.bmp'

subplot(2,2,4);

NFFT/2),abs_inisignal_fft(1:

initialsignalband'

print-r600-djpeginputsignal;

initialsignalband.bmp'

%checkdynamicrangeagain

%RealDynamicRange=20*log10(max(abs(sigsampling))/min(abs(sigsampling)));

leng

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2