我以前是干算法的,这行确实累,而且很难带来职务的提升。四十岁以后就不想再考虑写什么算法了,安心教书和养老。2020年,我不得不再次出山,因为有企业求助!于是开始边写算法边发布文章,到2022年8月份,在公 众号里面已经积累几百篇算法仿真方面的文章!需要学习仿真的同学应该关注公 众号《通信工程师专辑》,这样无需到网上找仿真代做服务,容易被骗!想找代做仿真的同学可以比较一下文章的价格和代做价格,自然就知道各自的性价比!!!代做程序会带来很多风险,双方如果搞的不愉快,还会引起很多事端!西电的那场风波就闹的很大。
本来觉得这个课题是非常简单的类型,就无需写出代码给大家参考了,但后台经常会收到同学们关于这方面知识的求助,于是我就写了一篇这方面的内容。课题简单归简单,但讲解依旧是代码结合理论知识的模式,信源编码我接触的不多,本人深耕的是信号处理领域的内容,但简单的PCM量化程序还是可以写出来的,希望能给大家带来一些借鉴和参考。先来看看本课题的设计指南,然后再看程序!
2025年,文章升级为v2版本,增加了大量内容,首次给出了增量调制和连续可变斜率增量调制的仿真程序。
CVSD(连续可变斜率增量调制)和增量调制(Delta Modulation, DM)都是模拟信号数字化的波形编码技术,二者属于同一技术路线,CVSD是增量调制的改进版本。
核心思想是用1位二进制码表示相邻样值的差值(增量)。
若当前样值 > 预测值(前一样值的重构值),输出1,预测值增加一个固定步长。
若当前样值 ≤ 预测值,输出0,预测值减少一个固定步长。
固定步长无法适应信号快速变化,易出现斜率过载(信号变化太快时跟踪不上)或颗粒噪声(信号平缓时量化噪声明显)。
CVSD通过动态调整步长解决了DM的缺陷。
自适应步长:
当连续出现相同符号(如111或000),说明信号变化较快,增大步长以跟踪斜率。
当符号交替出现(如1010),说明信号平缓,减小步长以降低噪声。
后面会详细介绍相关内容并给出仿真程序。先看看本课题涉及的设计指南。
毕业设计指南
1.掌握PCM编解码的基础知识。
2.通过MATLAB仿真,加深对PCM编解码的理解,画出相关图形。
3.通过MATLAB仿真,加深对A律的理解。
4.通过仿真,锻炼自己运用所学知识,独立分析问题、解决问题的综合能力。扩展内容可以加入增量调制内容。
掌握自编函数的编写方法和测试方法。
必须对仿真结果进行分析总结,这是自己学习知识掌握知识的体现!
课题的内容是完成语音信号的PCM编码仿真,如果觉得难度小,可以加入解码仿真。仿真程序应该包含哪些内容呢?
基于MATLAB编写的PCM 编码解码实现程序主要包含以下几个过程。第一:信号的抽样过程,选好采样率!!!第二:PCM 编码;第三:PCM 解码。
信号生成的质量好坏可以进行失真度分析。
比如:PCM对信号每秒钟取样8000次。每次取样为8位比特,总共64kbps。
PCM的实现主要包括三个步骤:抽样、量化、编码,分别完成时间上离散、幅度上离散、及量化信号的二进制表示。量化方式采用13折线A律压缩方式。
1.从计算机的麦克风录取一段段语音信号,录制时间为10-15秒,对录下的语音信号进行时域分析,显示其时频域的波形图;
2.主要内容是将模拟的语音信号进行PCM编码,具体分为抽样、量化、编码。
1.了解论文写作格式及要求,规范文档写作,不准有错别字;
2.语句通顺,定时更新论文版本和程序版本;
3.详细介绍PCM编解码的原理、A律、U律的相关知识和应用;
4.自行在毕业设计系统中提交设计任务书、开题报告、论文提纲、论文正文、答辩PPT。
请参考知网中关于此方面的相关文章!
PCM有均匀PCM、非均匀PCM和自适应PCM几种形式。这里重点介绍一下非均匀量化的概念!非均匀量化的实现方法有两种:一种是北美和日本采用的μ律压扩,一种是欧洲和我国采用的A律压扩。
采用A律13折线的分段方法如下:Y轴均匀分为8段,每段均匀分为16份,每份表示一个量化级,则Y轴一共有16×8=128个量化级。X轴采用非均匀划分来实现非均匀量化的目的,划分规律是每次按二分之一来进行分段。
13折线示意图见下图:
由于分成128个量化级,故有7位二进制码(27=128),又因为Y轴有正值和负值之分,需加一位极性码,故共有8位二进制码。网上也有相关理论知识讲解的文章!
他山之石!
再来看看仿真代码!
%%%%%%% PCM编解码理论仿真程序 %%%%%%%%
%%%%%% File: PCM_theory_sim1.m %%%%%%
%%%% date: 2022-7-18 author: 算法工匠 %%%%%
%%% 程序说明
% 本程序进行简单的PCM编解码仿真。
% 信号为频率波,无噪声。
%%% 仿真环境
% 软件版本:R2021a
clear all;
close all;
clc;
%------------- 程序主体 -----------------%
%%%%%% 原始信号抽样
T = 0.0005;
t = -0.01:T:0.01;
fs = 2000; % 采样频率
sdt = 1/fs;
t1 = -0.01:sdt:0.01;
% 符合奈奎斯特采样准则
xt = cos(2*pi*30*t)+sin(2*pi*120*t);
st = cos(2*pi*30*t1)+sin(2*pi*120*t1);
max = max(abs(st));
figure;
subplot(2,1,1);plot(t,xt);
title('原始信号');grid on;
subplot(2,1,2);stem(t1,st,'.');
title('抽样信号');grid on;
%%%%%% PCM 编码
pcm_encode = func_PCM_coding(xt);
% 自编函数