目录
一、摘要
二、设计任务
项目作业分析:
三、设计内容
1.整体设计方案
2.设计内容
四、结果与分析
这个项目在我的B站上有专门的视频演示:【通信原理课程设计】利用MATLAB实现PCM编码的语音基带传输系统 +【PPT创意模板】+【星尘×海伊】Talking to the Rain_哔哩哔哩_bilibili
本项目基于PCM编码的原理,利用MATLAB实现了一个简单语音信号基带传输系统,经过最终测试,各部分功能均能实现。使用数字传输方式,传输信道为加性高斯信道,基带传输(没有进行调制),发送端和接收端分别将模拟语音信号A/D、D/A变换,其中录制的输入音频左声道主要采用8位A律13折线量化编码、右声道主要采用11位均匀量化编码。
1)通过信号误码率随信噪比变化的曲线可以看出,随着信噪比的增大,误码率逐渐降低。
2)信号编译码同时使用两种不同的压缩编码实现,可以看出非均匀量化编码的8位A律13折线量化编码在性能上要优于11位均匀量化编码。
3)通过测试,可以知道信噪比>=9dB时语音信号质量是可以接受的。
4)通过MATLAB模拟观测的眼图可以看出信噪比在15dB时的系统传输性能是良好的。
任务:自己录制一段带人声的音频,用数字传输方式,传输信道为加性高斯信道,基带传输(不需进行调制),发送端和接收端分别将模拟语音信号A/D、D/A变换,采用PCM编码。
要求:
(1)画出接收信号误码率随信噪比变化的曲线。
(2)信号编译码使用8位A律13折线编码、11位均匀量化编码都实现,并比较两种编码方法对接收到音频信号质量的影响。
(3)演示时,需播放发送和接收到的音频,测试信噪比达到多少数量级时语音信号质量可以接受。
(一)采样(Sampling):
采样频率:人对频率的识别范围是 20HZ - 20000HZ, 如果每秒钟能对声音做 20000 个采样, 回放时就足可以满足人耳的需求;8000hz 为电话采样;22050 的采样频率是常用的;44100已是CD音质, 超过48000的采样对人耳已经没有意义。
因此本项目采样率采用44100。
FLAC中文可解释为无损音频压缩编码。FLAC是一套著名的自由音频压缩编码,其特点是无损压缩。不同于其他有损压缩编码如MP3及AAC,它不会破坏任何原有的音频信息,所以可以还原音乐光盘音质。
因此本项目将原音频得到的矩阵数据.mat文件作为输入的模拟信号,每次循环读写处理的是音频5秒的数据。(后面想到了一种思路是利用resample函数进行间隔采样或者整倍数采样。)
(二)ADC-量化(Quantizing):
抽样信号虽然是时间轴上离散的信号,但仍然是模拟信号,其样值在一定的取值范围内,可有无限多个值。显然,对无限个样值一一给出数字码组来对应是不可能的。为了实现以数字码表示样值,必须采用“四舍五入”的方法把样值分级“取整”,使一定取值范围内的样值由无限多个值变为有限个值。这一过程称为量化。
量化后的抽样信号与量化前的抽样信号相比较,当然有所失真,且不再是模拟信号。这种量化失真在接收端还原模拟信号时表现为噪声,并称为量化噪声。量化噪声的大小取决于把样值分级“取整”的方式,分的级数越多,即量化级差或间隔越小,量化噪声也越小。
本项目左声道采用8位A律13折线法量化,涉及取模、归一、乘2048等;右声道采用11位均匀量化法,一共12位,1位是符号位,11位是量化,涉及找波形最大值、找出波形最小值、量化区间的端点等,取整时采用向上取整法。
(三)编码(Coding):
量化后的抽样信号就转化为按抽样时序排列的一串十进制数字码流,即十进制数字信号。简单高效的数据系统是二进制码系统,因此,应将十进制数字代码变换成二进制编码,根据十进制数字代码的总个数,可以确定所需二进制编码的位数,即字长(采样位数)这种把量化的抽样信号变换成给定字长的二进制码流的 过程称为编码。
PCM信号未经过任何编码和压缩处理(无损压缩)。与模拟信号比,它不易受传送系统的杂波及失真的影响。动态范围宽,可得到音质相当好的效果。编码上采用A律13折线编码。
A律是PCM非均匀量化中的一种对数压扩形式。数字脉冲编码调制(PCM)是目前模拟信号数字化的基本方法,PCM包括采样、量化、编码三个步骤,其中量化是对抽样值的取值离散,根据量化间隔的不同选取分为均匀量化和非均匀量化,非均匀量化可以有效地改善信号的量化信噪比。语音信号的量化常采用ITU建议的两种对数形式的非均匀量化压缩特性:A律和μ律,A律编码主要用于30/32路一次群系统, A律PCM用于欧洲和中国。
本项目左声道依据原理采用8位A律13折线法编码,较难;右声道则较为简单,主要十进制为转二进制编码。
(四)串行发送:
本项目调用了reshape()重构数组函数,将编码后的阵列转为串行序列,经过发送端口时乘以5V,以TTL电平发送。
(五)加性高斯信道:
本项目调用了awgn()函数实现。
(六)串行接收:
因为是单极性波形,本项目在接收端口以TTL电平的一半(2.5V)进行抽样判决,并再次使用reshape()重构数组函数将序列恢复原来的阵列。
(七)译码(Decoding):
译码相对于编码较为简单,其原理是相对的。
(八)DAC生成交流信号:
主要是归一化电压,恢复到原来的幅度,并滤去直流分量。
(九)低通滤波器
本项目自己根据滤波原理设计了低通滤波器系数,并调用filter()函数实现效果。
y[n] = 2.2188y[n-1] - 3.0019y[n-2] + 2.4511y[n-3] - 1.2330y[n-4] + 0.3109y[n-5] + 0.0079 ( x[n] + 5x[n-1] + 10x[n-2] + 10x[n-3] + 5x[n-4] + x[n-5] );
% B = 0.0079 * [ 1, 5, 10, 5, 1]; % 分子系数
% A = [ 1, -2.2188, 3.0019, -2.4511, 1.2330, -0.3109]; % 分母系数
(十)输出
输入时调用了audioread()函数,输出时调用了audiowrite()函数。
(十一)误码率随信噪比变化曲线
根据可调用函数调用biterr函数的原理自写了误码率函数,并且为优化运算速度,本项目单独从main.m中提取为Rate_SNRcurve.m做演示。
(十二)眼图绘制
本项目主要根据眼图原理,自写函数实现。
1.通过信号误码率随信噪比变化的曲线可以看出,随着信噪比的增大,误码率逐渐降低。当信噪比17dB时,13折线法的左声道误码率已经为0,11位均匀量化编码的右声道接近0,当信噪比大于17dB时,对通信质量已完全没有影响。
2. 信号编译码同时使用两种不同的压缩编码实现,可以看出非均匀量化编码的8位A律13折线量化编码在性能上要优于11位均匀量化编码。
3. 通过测试,可以知道信噪比>=9dB时语音信号质量是可以接受的。
右声道在12dB时就出现轻微噪音,9dB时候明显,3dB时就已完全听不清。
左声道在9dB时出现轻微噪音,6dB时候明显,但-3dB时仍可以听到人声,-6dB时才完全听不清。
因此,由此也可知,非均匀量化编码的8位A律13折线量化编码在性能上要优于11位均匀量化编码。
4. 通过MATLAB模拟观测的眼图可以看出信噪比在15dB时的系统传输性能是良好的。
在这之前,虽然使用MATLAB,但总是一知半解,通过这一次项目大作业,使我加深了对MATLAB的使用理解,相信这会对我以后的熟练增加不可磨灭的实践经历,同时,这次项目大作业也大大激发了我的兴趣,在此之前我从未想过MATLAB可以强大到处理音频信号,这是我大学第一次做出工程量达到近300多行代码,且功能完整的项目,但收获巨大的同时,过程也是痛苦的。
主要遇见的问题:
1. 系统不能传送并行数据。
这个难题在搞懂以后才发现很简单,只需调用重构数组或矩阵函数即可,而且MATLAB虽然循环处理能力差,但矩阵运算很强大,百万级别的数据,几乎0秒实现重构。
2. 数组索引必须为正整数或逻辑值。
这个问题多次出现,但每次都莫名其妙被解决,直到最后项目快成型时的最后一次卡住了进程,令人头疼很久。最后发现数组索引不能带小数点之外,我出问题的原因是sign本身为MATLAB自带的一个函数,而我在后面时用了一个sign作为符号变量,这两起了冲突。
3.内存不足
随着处理音频的加大,处理数据已经超过了MATLAB默认能处理的3GB内存,后来通过分段处理数据,加虚拟内存,修改MATLAB内存分配,终于解决问题,但实测发现,一次最多处理350万条数据。
4.学会了pause()函数在MATAB中的妙用。
2020年 11月 18日
(1)著作(书)类:
[1] 樊昌信,曹丽娜 . 通信原理教程(第六版) [M]. 北京 :国防工业出版社, 2007.
(2)期刊(会议)论文类:
[1]梁红玉,陈冬梅,胡煜.语音信号数字传输系统GUI设计与仿真[J].通信技术,2011,44(06):92-94.
[2]雷欣.基于MATLAB的2ASK数字调制与解调的系统仿真[J].电脑知识与技术,2010,6(24):6823-6825.
[3] 周春梅 . 语音压缩编码 PCM[J]. 硅谷, 2012(4):37.
[4] 程菊花 . 基于 MATLAB的 PCM调制系统的仿真和分析 [J]. 浙江传媒学院学报, 2005( 3):25-27.
(3)学位论文类:
[1]童刚,基于 MATLAB 的语音信号 PCM 编译码实现,北京:首都师范大学,年度
(4)网络资料类:
[1] 薩薩萨摩耶的鱼塘,matlab二进制数字基带传输系统仿真实践——通信原理篇——信噪比与误码率的计算,https://blog.csdn.net/qq_41400572/article/details/93138804,2019.06
[2] 充满活力的早晨,PCM音频编码,https://www.jianshu.com/p/cfb3d4dc3676,2018.11
[3] csdnwbdream,基带信号的眼图实验,https://blog.csdn.net/,2019.05
[4] xiaozhen_12,matlab运行出现“变量似乎会随着迭代次数改变而变化,请预分配内存,以提高运行速度”问题,https://blog.csdn.net/wu_cai_/article/details/44159043,2017.04
[5] wu_cai_,Matlab 音频高低通滤波https://blog.csdn.net/xiaozhen_12/article/details/70168978,2015.03
[6] virlaser_,基于MATLAB的PCM编码解码实现,https://blog.csdn.net/weixin_44041884/article/details/86354999,2019.01
[7] 醉雨轩Y,matlab 声道分离合并与组合,https://blog.csdn.net/,2017.02
[8] 忠言睿长_,Matlab提示内存不足,https://blog.csdn.net/,2017.08