目录

 一、摘要

二、设计任务

项目作业分析:

三、设计内容

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)演示时,需播放发送和接收到的音频,测试信噪比达到多少数量级时语音信号质量可以接受。

项目作业分析:

  1. 带人声的音频:可以通过MP3录制或者歌曲源文件实现。
  2. 语音信号通信系统、数字传输方式:有一定电子基础的都知道传感器采集音频信号是模拟量,而我们实际传输过程中使用的是数字量。而这就涉及到模拟转数字的过程。而模拟信号数字化必须经过三个过程,即抽样、量化和编码,以实现话音数字化的脉冲编码调制(PCM,Pulse Coding Modulation)技术。
  3. PCM编码:PCM 脉冲编码调制是Pulse Code Modulation的缩写。脉冲编码调制是数字通信的编码方式之一。
  4. 基带传输:不用进行2ASK、2PSK调制。
  5. 加性高斯信道:传输信道为加性高斯白噪声,可通过调用函数awgn()或自写函数实现。
  6. 发送端和接收端分别将模拟语音信号A/D、D/A变换:A/D变换应在编码前,D/A变换应在译码后。
  7. 接收信号误码率随信噪比变化的曲线:可通过调用函数biterr()或者自写函数实现。
  8. 两种编码方法:根据两种编码方法的原理一步步进行代码实现。
  9. 测试信噪比达到多少数量级时语音信号质量可以接受,可通过Adobe Premiere Pro实现。
  10. 为方便接收和译码,可能涉及并行转串行、串行转并行。
  11.  除了误码率,还可以拓展实现眼图,来评估传输系统性能缺陷对基带数字信号传输的影响。
  12. 可能涉及到低通滤波器。

三、设计内容

1.整体设计方案

2.设计内容

(一)采样(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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐