通信原理实验报告PCMADPCM编译码实验.docx
- 文档编号:7206861
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:27
- 大小:1.06MB
通信原理实验报告PCMADPCM编译码实验.docx
《通信原理实验报告PCMADPCM编译码实验.docx》由会员分享,可在线阅读,更多相关《通信原理实验报告PCMADPCM编译码实验.docx(27页珍藏版)》请在冰豆网上搜索。
通信原理实验报告PCMADPCM编译码实验
PCM/ADPCM编译码实验
一、实验原理和电路说明
PCM/ADPCM编译码模块将来自用户接口模块的模拟信号进行PCM/ADPCM编译码,该模块采用MC145540集成电路完成PCM/ADPCM编译码功能。
该器件工作前通过显示控制模块将其配置成直接PCM或ADPCM模式,使其具有以下功能:
1、对来自接口模块发支路的模拟信号进行PCM编码输出。
2、将输入的PCM码字进行译码(即通话对方的PCM码字),并将译码之后的模拟信号送入用户接口模块。
电路工作原理如下:
PCM/ADPCM编译码模块中,由收、发两个支路组成,在发送支路上发送信号经U501A运放后放大后,送入U502的2脚进行PCM/ADPCM编码。
编码输出时钟为BCLK(256KHz),编码数据从语音编译码集成电路U502(MC145540)的20脚输出(DT_ADPCM1),FSX为编码抽样时钟(8KHz),晶振U503(20.48MHz)。
编码之后的数据结果送入后续数据复接模块进行处理,或直接送到对方PCM/ADPCM译码单元。
在接收支路中,收数据是来自解数据复接模块的信号(DT_ADPCM_MUX),或是直接来自对方PCM/ADPCM编码单元信号(DT_ADPCM2),在接收帧同步时钟FSX(8KHz)与接收输入时钟BCLK(256KHz)的共同作用下,将接收数据送入U502中进行PCM/ADPCM译码。
译码之后的模拟信号经运放U501B放大缓冲输出,送到用户接口模块中。
二、实验内容及现象记录与分析
1.准备工作:
加电后,将KB03置于左端PCM编码位置,此时MC145540工作在PCM编码状态。
将K501设置在右边。
2.PCM/ADPCM编码信号输出时钟和抽样时钟信号观测
①输出时钟和抽样时钟即帧同步时隙信号观测:
测量、分析和掌握PCM编码抽样时钟信号与输出时钟的频率、占空比以及它们之间的对应关系等。
记录与分析:
上图中上方CH1黄色波形为PCM编码信号抽样时钟,CH2蓝色波形为输出时钟。
由图中右侧测量数据可见,抽样信号频率为8kHz,输出时钟信号频率为256kHz(见下图CH2频率,上图测得为260.4kHz存在误差,因为时间轴选取得太密)。
由上图可以看出,蓝色输出时钟信号占空比为50%。
一个抽样时钟高电平内有8个输出时钟周期,一个抽样时钟低电平内有24个输出时钟周期,推得黄色抽样时钟信号占空比为25%,输出时钟信号与抽样时钟信号都是方波且具有相同的相位。
下图为相应的芯片时序图:
PCM对电平进行256级量化,即对于每一个采样点进行8bit的编码,抽样信号为8kHz则编译码信号的频率应为64kHz。
而实际中并不是整个抽样周期间隔都用来传输这8bit,只用周期的1/4来发送数据,所以抽样时钟上的占空比为25%。
此举为实际应用中对信号进行多路复用提供了条件。
所以输出时钟为64kHz的4倍,即256kHz。
②抽样时钟信号与PCM编码数据测量:
分析和掌握PCM编码输出数据与抽样时钟信号及输出时钟的对应关系。
记录与分析:
上图中黄色CH1信号为抽样时钟信号,蓝色CH2信号为PCM编码输出信号。
可见当抽样时钟信号为高电平时,PCM编码有输出,当抽样时钟为低电平时,PCM编码输出恒为低电平。
由上文已知抽样时钟高电平内有8个输出时钟周期,所以PCM编码输出信号一次输出对应8个输出时钟周期。
由上图可见PCM编码输出信号的下降沿不是垂直的,而是倾斜下滑的。
由上文芯片时序图知DT的最后一个比特数据只占半个周期。
如果最后一个比特是0则对PCM编码输出无影响,如果最后一个比特是1,那么在后半个周期电平会被下拉至0,则PCM编码输出信号出现下降沿不垂直而是倾斜的情况。
③在ADPCM编码状态。
重复上述步骤:
比较PCM编码和ADPCM编码时序,码元传送速率上的区别。
记录与分析:
黄色CH1信号为ADPCM编码信号抽样时钟,蓝色CH2信号为输出时钟。
前者为8kHz,后者为256kHz,与PCM情况相同。
由上图可见,ADPCM的输出时钟占空比与PCM相同,仍为50%,而抽样时钟高电平只对应4个输出时钟周期,所以占空比只有PCM的一半,即12.5%,而采样频率8kHz并没有变,也就是每个采样点由原来PCM的采样8bit变为采样4bit。
则码元速率由PCM的64kHz降为32kHz。
相应的芯片时序图见下图:
ADPCM编码信号与PCM类似,见下图:
两者区别在于ADPCM编码信号在一个抽样时钟高点平内只输出4bit,而不是PCM编码的8bit。
3.PCM编码
①分析和掌握PCM编码输出数据与抽样时钟信号(同步沿、脉冲宽度)及输出时钟的对应关系。
由于是对1kHz信号进行8KHz采样,因此必须记录下连续的8个编码数据。
记录与分析:
测得连续8个输出值为:
NO1:
10100111
NO2:
10001110
NO3:
10001101
NO4;10011110
NO5;00100111
NO6:
00001110
NO7:
00001101
NO8;00011110
可以发现点1、2、3、4与5、6、7、8对应互为相反数,即点n与点n+4除第一位符号位不同外,其余7位数字完全相同,也即每半个周期对应4个抽样点。
与8kHz对1kHz信号进行抽样的条件相符。
由于点数太多,不一一展开,选取2个点作为例子:
这是NO1:
10100111
这是NO5:
00100111
②由测量数据,按照A律13折线或u律15折线编码规则通过matlab计算恢复正弦波形:
要求编写matlab程序将所测量的PCM编码数据按照G.711标准中的A律和u律编码规则恢复为电平值,按A律和u律需分别绘出至少3张图:
PCM编码数据恢复后的波形图及其频谱图。
将采样点插值后得到平滑正弦波形图。
Matlab程序与分析:
A律:
设计思路:
PCM编码分为三段,第1位为符号位,2-4位为段落码,5-8位为电平码,由下图可知对应关系。
根据上图对应关系,将PCM编码的符号位、段落码、电平码分别提取,乘以对应倍数加上每段的起始电平值得到对应的恢复电平值。
注意上表中段落码将000和010合并为了同一区域。
实际上000和001对应的段落起始电平不同,程序中要进行区分。
遇到的问题及解决办法:
(1)在分别将每种段落码情况下的恢复电平值分类的时候,我发现A律的表格给出的是7种情况,因为段落码000和001对应的是同一种电平码倍数,但是实际情况有8种(000-111),因为000和001对应的起始电平值是不同的。
我一开始完全按照A律表格写的分类方法得到的恢复值如果电平码相同的话在000和001两种段落码情况下是一样的。
后来自己算出了001的起始电平值为33,增加了一种分类情况。
(2)一开始直接用fft变换之后就画出的频域图,感觉很不正常,输入信号1kHz的分量竟然比3kHz分量还要小。
如下图:
感觉像是进行了叠加。
后来发现fft和频率点好像不是完全线性对应的,需要在FFT之后再使用fftshift和取绝对值对结果进行调整。
(3)恢复波形时使用巴特沃斯低通滤波器的参数选择一开始我不知道该怎么选。
因为从频谱上能看到有很大的3000Hz的分量,所以如果以3k代入算出的参数[b,a]=butter(4,3000/(8000*10/2));得到的波形不是个正弦波,如下图:
改为1k滤去3kHz分量的话,[b,a]=butter(4,1000/(8000*10/2));得到恢复波形就是个比较好看的正弦波了。
matlab程序:
closeall
clearall%清屏
S=[10100111;
10001110;
10001101;
10011110;
00100111;
00001110;
00001101;
00011110];
temp=zeros(1,8);%创建临时0矩阵
fori=1:
1:
8
code=S(i,:
);%依次取入抽样点
mesg1=4*(~code
(2))+code(3)*2+(~code(4));%提取段落码,注意A律要求所有偶数位为反
mesg2=8*(~code(5))+4*(~code(6))+2*(~code(7))+(~code(8));%提取电平码
mesg3=(-1)^(code
(1)+1);%判断符号
switch(mesg1)%根据段落码、电平码和符号算出恢复电平
case0
temp(i)=mesg3*(2*mesg2+1);
case1
temp(i)=mesg3*(33+2*mesg2+1);%注意段落码为1时与0的不同在于起始电平为33
case2
temp(i)=mesg3*(66+4*mesg2);
case3
temp(i)=mesg3*(132+8*mesg2);
case4
temp(i)=mesg3*(264+16*mesg2);
case5
temp(i)=mesg3*(528+32*mesg2);
case6
temp(i)=mesg3*(1056+64*mesg2);
case7
temp(i)=mesg3*(2112+128*mesg2);
end
end
temp2=[temp,temp,temp,temp,temp];%延拓
form=1:
40
temp3(10*m)=temp2(m);%插入0点进行调整
end
j=0.000125:
0.000125:
0.005;
subplot(3,1,1);
stem(j,temp2);%画出时域波形
title('PCM-G.711-Alawby101180166')
xlabel('时域');
axis([0,0.0025,-3500,3500]);
fz=8000;
tz=1/fz;%设定抽样频率
df=0.5;
[M,m,df]=fftseq(temp2,tz,df);%利用实验1中的fftseq进行傅里叶变换
M=M/fz;
r=[0:
df:
df*length(m)-df]-fz/2;
subplot(3,1,2);
plot(r,abs(fftshift(M)));%画出频域波形
xlabel('频域');
[b,a]=butter(4,1000/(8000*10/2));%4阶巴特沃斯滤波器
x=filter(b,a,temp3);
subplot(3,1,3);
j1=0.0000125:
0.0000125:
0.005;%作图域
disp(j1);
plot(j1,x);%画出恢复的正弦波形
axis([0,0.005,-500,500]);
xlabel('恢复波形');
运行结果如下图:
从上图频域波形中可以看出,A律编码规则得到的抽样波形有很大的3kHz频谱分量。
用4阶巴特沃斯滤波器截止频率4kHz滤波恢复的波形如下图:
明显3kHz分量影响很严重,与正弦波输入信号差距较大。
要用1kHz截止频率才能得到比较好的正弦波恢复波形。
而语音话路一般为3400Hz,所以A律编码规则可能不适合于语音信道使用。
u律:
设计思路:
做完A律之后再做u律就简单多了,参照pdf中u律编码对应关系,修改一下A律仿真程序中的系数即可。
遇到的问题及解决方法:
因为做过A律之后问题已经大部分解决了,u律上遇到最大的问题就是提取段落码和电平码时哪些位要取反的问题,A律是偶数位进行取反,u律与A律不同,我一开始取错了,得到结果如下图:
后来改正了,2、3、4位(即段落码)不取反,其他位取反就得到了正确结果。
matlab程序:
closeall
clearall%清屏
S=[10100111;
10001110;
10001101;
10011110;
00100111;
00001110;
00001101;
00011110];
temp=zeros(1,8);%创建临时0矩阵
fori=1:
1:
8
code=S(i,:
);%依次取入抽样点
mesg1=4*(code
(2))+code(3)*2+(code(4));%提取段落码
mesg2=8*(~code(5))+4*(~code(6))+2*(~code(7))+(~code(8));%提取电平码
mesg3=(-1)^(~code
(1)+1);%判断符号
switch(mesg1)%根据段落码、电平码和符号算出恢复电平
case0
temp(i)=mesg3*(4191+256*mesg2);
case1
temp(i)=mesg3*(2079+128*mesg2);
case2
temp(i)=mesg3*(1023+64*mesg2);
case3
temp(i)=mesg3*(495+32*mesg2);
case4
temp(i)=mesg3*(231+16*mesg2);
case5
temp(i)=mesg3*(99+8*mesg2);
case6
temp(i)=mesg3*(33+4*mesg2);
case7
temp(i)=mesg3*(2*mesg2);
end
end
temp2=[temp,temp,temp,temp,temp];%延拓
form=1:
40
temp3(10*m)=temp2(m);%插入0点进行调整
end
j=0.000125:
0.000125:
0.005;
subplot(3,1,1);
stem(j,temp2);%画出时域波形
title('PCM-G.711-ulawby101180166')
xlabel('时域');
axis([0,0.0025,-5500,5500]);
fz=8000;
tz=1/fz;%设定抽样频率
df=0.5;
[M,m,df]=fftseq(temp2,tz,df);%利用实验1中的fftseq进行傅里叶变换
M=M/fz;
r=[0:
df:
df*length(m)-df]-fz/2;
subplot(3,1,2);
plot(r,abs(fftshift(M)));%画出频域波形
xlabel('频域');
[b,a]=butter(4,1000/(8000*10/2));%4阶巴特沃斯滤波器
x=filter(b,a,temp3);
subplot(3,1,3);
j1=0.0000125:
0.0000125:
0.005;%作图域
disp(j1);
plot(j1,x);%画出恢复波形
axis([0,0.005,-1000,1000]);
xlabel('恢复波形');
运行结果如下图:
由中间频域图可见,u律编码规则得到的信号主要分量为1kHz的输入信号频率分量,其他频率分量都远小于主频分量。
上图中得到的正弦波恢复波形用的是截止频率为1kHz的巴特沃斯低通滤波器,但是即使用4kHz截止频率,得到的恢复波形也比较接近正弦波,只是稍有失真,见下图:
可见u律编码规则适用于语音信道。
4.ADPCM编码
观察连续9个采样点的编码数据,是否能观察到如PCM编码数据一样的规律,为什么?
记录与分析:
NO1:
0011
NO2:
0101
NO3:
0111
NO4;1111
NO5:
0010
NO6:
1110
NO7:
1110
NO8:
1111
NO9:
0001
从数据来看看不出什么明显的规律,而且PCM编码不会出现连续相同的值,ADPCM编码中读得的第6和第7个值是完全相同的值。
ADPCM编码利用了信号点之间的相关性,每个点的采样值都与之前多个点有关,所以并不存在简单的周期性规律。
且ADPCM编码每个值只占用4bit,相比于PCM的8bit,更为节省频带。
5.PCM译码器
PCM译码器输出模拟信号观测:
用示波器同时观测解码器输出信号端口(TP506)和编码器输入信号端口(TP501),观测信号时以TP501做同步。
定性的观测解码信号与输入信号的关系:
质量、电平、延时。
记录与分析:
上图中CH1黄色波形为1kHz输入信号波形,CH2蓝色波形为经过PCM译码得到的模拟输出波形。
幅值上输入信号峰峰值为2V(实际测得1.96V),译码器输出为2.32V,解码信号输出电平值增加是由于输出前经过了如下电路:
译码输出由R506进入,经U501B放大后,送到输出信号测试端口TP506,由于U501B的放大作用使得解码信号输出电平值比输入电平值增大了。
解码输出信号的质量相比于输入信号要差一些,输入信号为1kHz,而输出信号为1.005kHz,虽然这么小的误差也可能是示波器的测量误差,但是杂波分量的混入也会造成频率的微小偏差。
由下图可以明显看出,解码输出信号波形上叠加了一部分噪声:
在解码信号的波峰和波谷处杂波较多失真较为明显。
失真产生有两方面原因,一是PCM译码之后会混入其他频点的分量,从之前的matlab仿真中看出,A律编码会混入较大的3kHz分量,u律编码虽说没有较为明显的杂波混入,但频谱如下图:
u律编码在2kHz范围内还是有很多小分量的,比如800Hz和1200Hz处。
二是经过低通滤波器恢复模拟信号时会产生失真。
下图是经过截止频率为3400Hz的4阶巴特沃斯低通滤波器得到的u律恢复波形:
可见,波峰和波谷处也是失真最为明显的地方,与示波器观测到的结果吻合。
由上面示波器光标观测图可以看出,解码输出信号相比于输入信号延时了140微秒:
延时是由于信号经过译码电路以及低通滤波电路造成的。
6.PCM/ADPCM频率响应测量:
将测试信号电平固定在2Vp-p,调整测试信号频率,定性的观测PCM/ADPCM解码恢复出的模拟信号电平。
观测输出信号信电平相对变化随输入信号频率变化的相对关系。
比较PCM和ADPCM编码频响特性。
记录与分析:
输入频率(Hz)
200
500
800
1000
2000
3000
3400
3600
ADPCM译码输出Vpp(V)
2.04
2.32
2.32
2.36
2.36
2.32
2.16
1.28
PCM输出Vpp(V)
2.12
2.28
2.32
2.32
2.32
2.36
2.16
1.28
(由于此项实验图片过多,在此每种只贴出2张记录)
ADPCM-200HzADPCM-1000Hz
PCM-200HzPCM-1000Hz
由测得数据画出频响特性曲线如下:
由上图可以看出,ADPCM和PCM的频响特性曲线差不多,在500Hz到3400Hz范围内都有不错的频率响应,输出增益在1.289dB左右。
在500Hz以下和3400Hz以上频率响应出现衰减。
高频端衰减尤其迅速。
两者频率响应的均匀度都较好,ADPCM在500Hz到3000Hz的频率响应均匀度为0.148dB,PCM在500Hz到3000Hz的响应均匀度为0.300dB,可见ADPCM的频率响应均匀度要优于PCM。
7.PCM/ADPCM动态范围测量:
将测试信号频率固定在1000Hz,改变测试信号电平,定性的观测解码恢复出的模拟信号质量,观测信噪比随输入信号电平变化的相对关系。
比较PCM和ADPCM编码动态范围。
记录与分析:
输入Vpp(V)
0.2
1
2
3
4
5
PCM(dB)
-17.8
-3.37
1.43
1.43
0.631
-0.569
ADPCM(dB)
-17.8
-3.77
1.43
1.83
0.631
-1.37
实验过程中实际有示波器测量的不是信噪比,而是对应输入Vpp下解码输出的信号幅值。
(由于此项实验图片过多,在此每种只贴出2张记录)
ADPCM—1VppADPCM—3Vpp
PCM—1VppPCM—3Vpp
由测得数据画出动态特性曲线如下图:
可见ADPCM与PCM的编码动态特性几乎完全相同。
在输入信号Vpp值从1V到5V的变化过程中,输出信号幅值基本维持不变(该图纵轴记录的是输出电平幅值),因为在动态范围内电路有自适应机制,对较低的输入有较高的增益,反之对较高的输入增益较低,因而维持输出电平值在某一固定值附近。
由图可见两者编码的动态范围基本为1V到5V。
输入为0.2V时输出幅值很低,因为已经超出了电路的动态范围。
而从示波器观测到的波形来看,在输入为1V和2V的时候恢复信号波形的失真较小,即信号信噪比较高,在输入信号超过3V之后随着输入幅值的增加而恢复波形的失真越来越大,即信噪比逐渐下降。
由示波器频谱分析可以看出,随着输入幅值增加,二次谐波分量和三次谐波分量明显增大,见下图:
右图是输入幅值增大后的频谱图,明显2kHz处和3kHz处的频谱分量很高,而这两个分量在左图中是没有的。
可见,在2V以内,信噪比较低,而在3V以上,随着输入电平的增加而信噪比减小。
8.(课外选做)按照G.726标准编写ADPCM仿真程序
ADPCM编码首先将输入的A率或
率PCM信号转换成线性PCM码,然后与预测信号相减产生差分信号,再对差分信号进行自适应量化,产生4比特ADPCM码;一方面将产生的ADPCM码送至解码器,另一方面利用ADPCM码进行本地解码以获得量化后的差分信号,编码器将量化之后的差分信号与预测信号相加得到本地重建信号。
我尝试着编了一下,程序如下,但是有很多子函数都没有实现出来,所以没法run起来:
closeall
clearall%清屏
S=[0011;
0101;
0111;
1111;
0010;
1110;
1110;
1111;
0001];
y=zeros(1,9);%量化归一化因子
d=zeros(1,15);%插值信号
Se=zeros(1,9);%递归预测的差值
sr=(zeros(1,11));%重建
I=zeros(1,5);%创建临时0矩阵
fork=1:
1:
9
I
(1)=k;
I(2:
5)=S(k,:
);
ifI(2:
5)==[1,1,1,1]%逆自适应量化模块,由I的值得到dq
dq=2^(y+4.42);%根据I的幅度大小求出逆自适应的输出
elseifI(2:
5)==[1,1,1,0]
dq=2^(y+4.21);
elseifI(2:
5)==[1,1,0,1]
dq=2^(y+4.02);
elseifI(2:
5)==[1,1,0,0]
dq=2^(y+3.81);
elseifI(2:
5)==[1,0,1,1]
dq=2^(y+3.59);
elseifI(2:
5)==[1,0,1,0]
dq=2^(y+3.35);
elseifI(2:
5)==[1,0,0,1]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信 原理 实验 报告 PCMADPCM 译码