语音信号基带传输通信系统仿真基于PCM编码和汉明码.docx
《语音信号基带传输通信系统仿真基于PCM编码和汉明码.docx》由会员分享,可在线阅读,更多相关《语音信号基带传输通信系统仿真基于PCM编码和汉明码.docx(34页珍藏版)》请在冰豆网上搜索。
![语音信号基带传输通信系统仿真基于PCM编码和汉明码.docx](https://file1.bdocx.com/fileroot1/2023-2/6/e2aca12f-3846-413c-9c9e-0cad90ff62fc/e2aca12f-3846-413c-9c9e-0cad90ff62fc1.gif)
语音信号基带传输通信系统仿真基于PCM编码和汉明码
语音信号基带传输通信系统仿真
——基于PCM编码和汉明码
学生姓名:
XX指导老师:
XXX
摘要本课程设计的目的主要是仿真通信系统中的信源编码和纠错编码。
录制一段语音信号,对其进行PCM编码后再进行汉明编码,送入二进制对称信道传输,在接收端对其进行汉明解码和PCM解码以恢复原信号,回放比较传输前后的语音质量,改变信道差错率绘制误码率曲线,观察前后信号波形是否一致,并结合理论进行说明。
关键词Matlab;Simulink;PCM;汉明码设计仿真
1引言
本课程设计主要解决语音信号基带传输过程中,通过PCM编码之后再进行汉明编码和汉明解码,然后进行PCM解码并通过滤波器恢复原信号的问题。
通过Simulink软件平台对一个语音信号进行编码传送仿真并恢复原语音信号。
1.1课程设计目的
通过本课程的学习我们不仅能加深理解和巩固理论课上所学的有关PCM编码和解码和汉明码编码解码的基本概念、基本理论和基本方法,而且能锻炼我们分析问题和解决问题的能力。
在利用Simulink进行仿真的过程中,充分了解仿真通信系统中的信源编码和纠错编码。
我们录制一段语音信号,对其进行PCM编码后再进行循环编码,送入二进制对称信道传输,在接收端对其进行汉明解码和PCM解码以恢复原信号,回放比较传输前后的语音质量,在实践的过程中更好的了解整个对PCM编解码和循环码编解码的理解。
2脉冲编码调制PCM原理
2.1PCM工作原理
PCM(PulseCodeModulation)脉码调制是实现语音信号数字化的一种方法。
是对模拟信号数字化的取样技术,将模拟语音信号变换为数字信号的编码方式,特别是对于音频信号。
PCM对信号每秒钟取样8000次;每次取样为8个位,总共64kbps。
取样等级的编码有二种标准。
北美洲及日本使用Mu-Law标准,而其它大多数国家使用A-Law标准,在这次的实验当中,我们采取A-Law标准。
一、语音信号的数字化
语音信号是连续变化的模拟信号,实现语音信号的数字化必须经过抽样、量化和编码三个过程。
1抽样(Samping)
抽样是把模拟信号以其信号带宽2倍以上的频率提取样值,变为在时间轴上离散的抽样信号的过程。
例如,话音信号带宽被限制在0.3~3.4kHz内,用8kHz的抽样频率(fs),就可获得能取代原来连续话音信号的抽样信号。
对一个正弦信号进行抽样获得的抽样信号是一个脉冲幅度调制(PAM)信号。
对抽样信号进行检波和平滑滤波,即可还原出原来的模拟信号。
抽样必须遵循奈奎斯特抽样定理,离散信号才可以完全代替连续信号。
奈奎斯特抽样定理:
若频带宽度有限的,要从抽样信号中无失真地恢复原信号,抽样频率应大于2倍信号最高频率。
抽样频率小于2倍频谱最高频率时,信号的频谱有混叠。
抽样频率大于2倍频谱最高频率时,信号的频谱无混叠。
2量化(quantizing)
把幅度连续变化的模拟量变成用有限位二进制数字表示的数字量的过程称为量化。
即:
抽样信号虽然是时间轴上离散的信号,但仍然是模拟信号,其样值在一定的取值范围内,可有无限多个值。
显然,对无限个样值一一给出数字码组来对应是不可能的。
为了实现以数字码表示样值,必须采用“四舍五入”的方法把样值分级“取整”,使一定取值范围内的样值由无限多个值变为有限个值。
量化后的抽样信号与量化前的抽样信号相比较,当然有所失真,且不再是模拟信号。
这种量化失真在接收端还原模拟信号时表现为噪声,并称为量化噪声。
量化噪声的大小取决于把样值分级“取整”的方式,分的级数越多,即量化级差或间隔越小,量化噪声也越小。
量化误差:
量化后的信号和抽样信号的差值。
量化误差在接收端表现为噪声,称为量化噪声。
量化级数越多误差越小,相应的二进制码位数越多,要求传输速率越高,频带越宽。
为使量化噪声尽可能小而所需码位数又不太多,通常采用非均匀量化的方法进行量化。
非均匀量化根据幅度的不同区间来确定量化间隔,幅度小的区间量化间隔取得小,幅度大的区间量化间隔取得大。
非均匀量化的实现方法有两种:
一种是北美和日本采用的μ律压扩,一种是欧洲和我国采用的A律压扩。
在PCM-30/32通信设备中,采用A律13折线的分段方法,具体是:
Y轴均匀分为8段,每段均匀分为16份,每份表示一个量化级,则Y轴一共有16×8=128个量化级。
;X轴采用非均匀划分来实现非均匀量化的目的,划分规律是每次按二分之一来进行分段。
13折线示意图如下:
图2-1A-Law13折线
由于分成128个量化级,故有7位二进制码(2的7次方=128),又因为Y轴有正值和负值之分,需加一位极性码,故共有8位二进制码。
3编码(Coding)
量化后的抽样信号在一定的取值范围内仅有有限个可取的样值,且信号正、负幅度分布的对称性使正、负样值的个数相等,正、负向的量化级对称分布。
若将有限个量化样值的绝对值从小到大依次排列,并对应地依次赋予一个十进制数字代码(例如,赋予样值0的十进制数字代码为0),在码前以“+”、“-”号为前缀,来区分样值的正、负,则量化后的抽样信号就转化为按抽样时序排列的一串十进制数字码流,即十进制数字信号。
简单高效的数据系统是二进制码系统,因此,应将十进制数字代码变换成二进制编码。
根据十进制数字代码的总个数,可以确定所需二进制编码的位数,即字长。
这种把量化的抽样信号变换成给定字长的二进制码流的过程称为编码。
话音PCM的抽样频率为8kHz,每个量化样值对应一个8位二进制码,故话音数字编码信号的速率为8bits×8kHz=64kb/s。
量化噪声随量化级数的增多和级差的缩小而减小。
量化级数增多即样值个数增多,就要求更长的二进制编码。
因此,量化噪声随二进制编码的位数增多而减小,即随数字编码信号的速率提高而减小。
自然界中的声音非常复杂,波形极其复杂,通常我们采用的是脉冲代码调制编码,即PCM编码。
PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。
二、时分复用
所谓时分复用,是将某一信道按时间加以分割,各路信号的抽样。
值依一定的顺序占用某一时间间隔(也成时隙),即多路信号利用同一信道在不同的时间进行各自独立的传输。
时分复用的特点:
1复用设备内部各通路的部件基本通用
2要求收、发两端同时工作,要求有良好的同步系统。
时分复用的目的:
一个信道传输多路信号,即若干路信号可以采用时分复用方式以一定的结构形式复接成一路高速率的复合数字信号-群路信号。
数字复接包括bit复接和码组复接。
PCM-30/32路通信设备是采用码组复接的时分复用系统。
PCM-30/32路系统的帧结构如下图所示
图2-2
图中帧周期T=1/8000秒=125us,将其平均分成32个时隙,每个时隙的时间间隔为125/32=3.91us,每一时隙传送8位编码,每个码的时间间隔为3.91us/8=488ns,每帧共传送32×8=256位码字。
在30/32路PCM系统中,帧结构中第一个时隙TS0用于传送帧同步信号,TS16用于传送话路信令,故只有30个时隙用于传送话音信号,所以只能提供30个话路。
当采用共路信令传送方式时,必须将16帧再构成一个更大的帧,称为复帧。
复帧的重复频率为500Hz,周期为2ms。
3汉明码编码原理
3.1汉明码编码原理
当计算机存储或移动数据时,可能会产生数据位错误,这时可以利用海明码来检测并纠错,简单的说,海明码是一个错误校验码码集,由Bell实验室的R.W.Hamming发明,因此定名为海明码。
用于数据传送,能检测所有一位和双位差错并纠正所有一位差错的二进制代码。
汉明码的编码原理是:
在n位有效信息位中增加k为检验码,形成一个n+k位的编码,然后把编码中的每一位分配到k个奇偶校验组中。
每一组只包含以为校验码,组内按照奇偶校验码的规则求出该组的校验位。
汉明码
能够纠正1位错码且编码效率较高的一种线性分组码
汉明码的构造原理。
在偶数监督码中,由于使用了一位监督位a0,它和信息位an-1…a1一起构成一个代数式:
在接收端解码时,实际上就是在计算
若S=0,就认为无错码;若S=1,就认为有错码。
现将上式称为监督关系式,S称为校正子。
由于校正子S只有两种取值,故它只能代表有错和无错这两种信息,而不能指出错码的位置。
若监督位增加一位,即变成两位,则能增加一个类似的监督关系式。
由于两个校正子的可能值有4中组合:
00,01,10,11,故能表示4种不同的信息。
若用其中1种组合表示无错,则其余3种组合就有可能用来指示一个错码的3种不同位置。
同理,r个监督关系式能指示1位错码的(2r–1)个可能位置。
一般来说,若码长为n,信息位数为k,则监督位数r=n-k。
如果希望用r个监督位构造出r个监督关系式来指示1位错码的n种可能位置,则要求
例:
设分组码(n,k)中k=4,为了纠正1位错码,由上式可知,要求监督位数r³3。
若取r=3,则n=k+r=7。
我们用a6a5¼a0表示这7个码元,用S1、S2和S3表示3个监督关系式中的校正子,则S1、S2和S3的值与错码位的对应关系可以规定如下所列:
表3-1
由表中规定可见,仅当一位错码的位置在a2、a4、a5或a6时,校正子S1为1;否则S1为零。
这就意味着a2、a4、a5和a6四个码元构成偶数监督关系:
同理,a1、a3、a5和a6构成偶数监督关系:
以及a0、a3、a4和a6构成偶数监督关系
在发送端编码时,信息位a6、a5、a4和a3的值决定于输入信号,因此它们是随机的。
监督位a2、a1和a0应根据信息位的取值按监督关系来确定,即监督位应使上3式中S1、S2和S3的值为0(表示编成的码组中应无错码):
上式经过移项运算,解出监督位
给定信息位后,可以直接按上式算出监督位,结果见下表
表3-2
接收端收到每个码组后,先计算出S1、S2和S3,再查表判断错码情况。
例如,若接收码组为0000011,按上述公式计算可得:
S1=0,S2=1,S3=1。
由于S1S2S3等于011,故查表可知在a3位有1错码。
按照上述方法构造的码称为汉明码。
表中所列的(7,4)汉明码的最小码距d0=3。
因此,这种码能够纠正1个错码或检测2个错码。
由于码率k/n=(n-r)/n=1–r/n,故当n很大和r很小时,码率接近1。
可见,汉明码是一种高效码。
4电路连接与参数设置
4.1PCM编码模块
PCM编码模块包括Zero-OrderHold、Saturation、Abs、Relay、A-Law
Compressor、Gain、Quantizer、IntegertoBitConverter和Mux。
图4-1PCM编码模块
Zero-OrderHold:
零阶保持器,其作用是在信号传递过程中,把第nT时刻的采样信号值一直保持到第(n+1)T时刻的前一瞬时,把第(n+1)T时刻的采样值一直保持到(n+2)T时刻,依次类推,从而把一个脉冲序列变成一个连续的阶梯信号。
因为在每一个采样区间内连续的阶梯信号的值均为常值,亦即其一阶导数为零,故称为零阶保持器[
Saturation:
限幅器,将输入信号幅度值限制在PCM编码的定义范围内,即[-1,1]。
Relay:
模块的门限设置为0,其输出即可作为PCM编码输出的最高位——极性码,但是在matlab中不是连续的,因此eps是最小值,无限接近0,用之代替0,大于这个数的时候输出1,小于它的时候输出0,用0,1来表示电平的正负。
Abs:
样值取绝对值,因为要进行A-Law编码应为正数,而进行编码之后,再与经relay输出的极性码复用。
A-LawCompressor:
13折线压缩器,其参数固定设置为87.6,对信号进行A律压缩。
Gain:
增益模块将样值范围放大到0~127,即把[0,1]范围内的数字,用0~127来表示。
Quantizer:
量化器,取间距为1,并将其进行四舍五入取整,最后将整数编码为7位二进制序列,作为PCM编码的低7位,因为前面Gain模块将信号成了128份,这里采用7位二进制数表达这128位数。
IntegertoBitConverter:
整数位转换器
Mux:
复用器,将多路合成一路信号,最高位为8为二进制数的极性码。
参数设置:
图4-2Zero-OrderHold:
零阶保持器参数设置
图4-3Saturation:
限幅器参数设置
图4-4Relay参数设置
图4-5Abs取绝对值参数设置
图4-6A-LawCompressor:
13折线压缩器参数设置
4-7Gain参数设置
图4-8Quantizer参数设置
图4—9IntegertoBitConverter:
整数位转换器参数设置
图4-10Mux参数设置
4.2PCM解码模块
PCM解码模块主要包括(图4-11)所示,解码就好像编码的逆过程,包括的模块有Demux、Mux1、Relay1、BittoIntegerconverter、Gain2、A-LawExpander、Product,AnalogFilterDesign。
图4-11PCM解码模块
模块的功能实现:
Demux、Mux1、Relay1、BittoIntegerconverter、Gain2、A-LawExpander,这些模块的功能与PCM编码中的器件实现的功能是一个逆过程,故不再赘述。
Product:
乘法器,作用是将输入的信号进行相乘。
AnalogFilterDesign:
模拟滤波器的设计,dedign method 是指滤波器的设计方法:
有巴特沃斯、切比雪夫I型、切比雪夫II型、还有椭圆滤波器。
filter type 是指低通、高通、带通还是带阻。
再下面的filter order是指滤波器的阶数,往下的最后一项就是设置的通频、组频等,也就是滤波器的截止频率,这里采用巴特沃斯低通滤波器,由于pcm编码和hamming编码均是在低频之下的编码。
参数设置:
图4-12Demux参数设置
图4-13Mux1参数设置
图4-14BittoIntegerConverter参数设置
图4-15Relay1参数设置
图4-16Gain1参数设置
图4-17A-LawExpander参数设置
图4-18product参数设置
图4-19AnalogFilterDesign:
模拟滤波器的参数设置
4.3汉明编解码模块
此模块中包含如下图4-20所示的三个模块,HammingEncoder,BinarySymmetricChannel,HammingDcoder。
图4-20汉明编解码模块
HammingEncoder:
汉明码编码模块,这里的是为(7,4)hamming编码,输入为4位,输出7位,其中3位是校验码。
HammingDecoder:
汉明码解编码模块,将7位的,通过3位验证码检验是否发生错码,并纠正错码之后,输出4位码。
BinarySymmetricChannel:
二进制对称信道是离散无记忆信道(discretememorylesschannel)在J=K=2时的特例。
它的输入和输出都只有0和1两种符号,并且发送0而接收到1,以及发送1而收到0(即误码)的概率相同,所以称信道是对称的。
此时条件差错概率(conditionalprobability)由p表示。
二进制对称信道的转移概率如图。
图4-21二进制对称信道的转移概率如图
参数设置:
图4-22汉明码编码模块的参数设置
图4-23BinarySymmetricChannel的参数设置
图4-24汉明码解码模块的参数设置
4.3并串转换
这一部分包含的模块有,FrameStatusConversion,buffer,unbuffer三种器件,这个模块的功能简介,由于经过PCM编码之后的数据是一帧的,而这一帧是为8位,而hamming码编码模块中的输入端应当输入4为的编码,位数不对应,因此需要将位数进行一个转换。
图4-25并联转为串联模块
FrameStatusConversion:
帧状态转换
Buffer:
可将信号转换为一个尺寸较大或者较小的,如,四位的可转变为1位或8位,buffer1输出为8位,buffer2为4位。
Unbuffer:
将一个帧输出标量样品在较高的采样率。
参数设置:
图4-26FrameStatusConversion参数设置
图4-27Buffer1参数设置
图4-28Unbuffer参数设置
图4-29Buffer2参数设置
串联变并联
这个模块的主要功能是为了实现串联的信号变为并联信号,其包含的器件有Unbuffer,IntegerDelay,Buffer,Reshape。
图4-30串联转为并联数据
IntegerDelay:
整数延迟,
Reshape:
转换为一维矩阵
参数设置
图4-31Unbuffer参数设置
图4-32IntegerDelay参数设置
图4-33Buffer的参数设置
图4-34Reshape参数设置
4.4误码率模块
此模块中包含有两个抽样,分别由Zero-Orderhold和relay构成,ErrorRateCalculation,Display,ToWorkspace。
图4-35误码率模块
ErrorRateCalculation:
计算所接受数据的错误率,Tx解输入端,Rx接输出端。
由于开始是测算整个的误码率,是对模拟信号进行测算,所以加入了抽样,在本次测算hamming信道中的误码率,可将两个抽样去掉,对结果无影响。
Display:
输入值的数字显示,显示误码率的大小。
ToWorkspace:
写输入指定的数组或结构在MATLAB的主要工作区。
数据不可用,直到仿真停止或暂停。
参数设置
图4-36Zero-Orderhold2参数
图4-37Relay2参数设置
图4-38ErrorRateCalculation参数设置
图4-39Toworkspace参数设置
图4-40Display参数设置
4.5示波器显示模块
由simulink模块加入两个scope,用以观察编码波形,和信号输入输出前后的对比。
图4-41scope1
图4-42scope的连接图
参数设置:
图4-43scope的参数设置
图4-44scope的参数设置
4.6总电路图
图4-45总电路图连接
5电路调试
5.1正弦波测试电路
在这此调试当中,首先是利用正弦信号来进行初步的电路测试,因为正弦信号更利于观察波形的改变情况。
经调试之后的到下图5-2,将信道误码率设置为0的时候的波形的输出图。
下图5-3,是信道误码率不为0时的图形,可以看出,信道误码率对信号的传输有影响,发生了严重的失真.
图5-1sinewave正弦信号输入
图5-2信道误码率设置为0
图5-3信道误码率为0.2
5.2接入语音信号
在经过正弦信号的的调试之后,再语音信号接入模块进行调试,将下载好的音频信号用录音机进行格式的转换,转换为PCM格式的,频率8000Hz,将其加入到work文件夹之下,再设置其参数如下图5-5。
运行程序之后,观察scope中的图形,当信道误码率为0是的图形图下,可以看出,信号基本无失真。
图5-4语音信号输入模块
图5-5语音信号模块参数设置
图5-6输入语音信号的属性
接入电路之后的波形显示
图5-7语音信号的输入输出对比
5.3误码率曲线绘制图
首先修改信道中的参数,将hamming信道中的参数修改为下图,在将计算误码率模块中的Outputedate改为workspace。
图5-8修改信道的误码率设置为F
图5-9设置ErrorRateCalculation模块
再编写m文件,如下所示
x=0:
0.01:
0.10;%设定信道误信率的范围
y=x;%
fori=1:
length(x)%给定i值的范围
F=x(i);%通过不同的i来设置不同的信道误信率
sim('pcmhamming');%sim函数是运行整个的模块
y(i)=ErrorVec
(1);%计算平均值
end
plot(x,y);%输出
xlabel('信道中的差错率');ylabel('误码率');title('误码率曲线')
图5-10编写M文件
输出的误码率曲线,横坐标表示
图5-11误码率曲线图
6结束语及错误总结
通过两周的通信原理课程设计真的学会了很多,短短的两周不仅加固了我对专业知识掌握,并且在自己动手设计制作这个课程设计的过程中充分锻炼了自己的实践能力。
从整个课程设计的开始设计制作到完成,经历了查找资料,着手设计,遇到瓶颈,寻求帮助,解决问题等等,在这一系列的过程中我体会到了痛苦并快乐的真正含义。
在这个过程当中出现了很多的问题,像是开始很多参数没有设置多,导致波形出现下图6-1的情况,这是由于判决器的设置,在低于eps是设置为了0,所以0以下的波形均没有显示。
图6-1
还有在编写误码率曲线的m文件的时候,对于sim函数不熟悉,导致程序没有运行出来,如图6-2。
后来自己在网上查找各种资料之后终于解决了。
图6-2
当测试完正弦信号之后加入语音信号,开始没有将语音信号进行一个格式的转换,导致不能加入到模块中去,后来加入模块中之后,没有将信号参数修改,也导致信号不能用,问题的解决并不是凭我的一个人的努力,所以要感谢老师的解释还有同学的帮助
图6-3
其实在整个的实验过程当中,出现了很多的错误,在这个过程当中,其实最重要的就是不断的发现错误,改正错误,不断的完善,并在这个过程当中提升自己解决问题的能力。
7参考文献
[1]《通信原理》第六版樊昌信,曹丽娜著
[2]MATLAB7.0SIMULINK6.0建模仿真开发与高级工程应用黄永安编著
[3]BaiduXX