主要内容:采用PCM编码,2PSK结合simulink实现语音信号的传输仿真。(注:代码为本人参考部分csdn文章改写)封面为部分运行结果。

PCM,2PSK相关知识就不多说了,直接贴代码吧:

%% 产生信号
load chirp % matlab自带语音信号
y1=[y,y];
x=y1(1:20000); %取前20000个采样点
sound(x,Fs);
%% PCM编码
x1=x/0.8.*2048;
yy=pcm_encode(x1);
time=0.0001:0.0001:16;
time_workspace=time';
pcm_code1=yy';
workspace_var=[time_workspace,pcm_code1];
figure;
subplot(1,1,1);
stem(yy(1:80),'.');
title('PCM编码后的波形');
figure;
subplot(1,1,1);
plot(x);
title('原始语音信号');
%% 基带信号求反
%由于PSK中的是双极性信号,因此对上面所求单极性信号取反来与之一起构成双极性码
st1=yy(1:160000);
t=1:1:160000;
st2=t;
j=160000;
for k=1:jif st1(k)>=1st2(k)=0;elsest2(k)=1;end
end
figure;
subplot(1,1,1)
stem(st2(1:80),'.');
title('基带信号反码');
axis([0,80,0,1]);
pcm_code2=st2';
%% 译码
demodata=simout(2:160001);
zz=pcm_decode(demodata,0.8);
figure;
subplot(1,1,1);
plot(zz);
title('译码的语音信号');
sound(zz,Fs);
figure;
plot(x,'b');
hold on
plot(zz,'r');
legend('原语音信号','恢复的语音信号');
title('语音信号对比');
% sound(zz,Fs);
%% 误码计算
code1=code(2:160001);
[number1,ratio1]=symerr(code1,demodata);
%% PCM编码函数
function y = pcm_encode( x )
y=zeros(length(x),8); %存储矩阵(全零)
z=sign(x); %判断x的正负
x=abs(x);%取绝对值
%%段落码判断段区间的取值范围为前开后闭区间
for k=1:length(x)%符号位的判断if z(k)>0y(k,1)=1;elseif z(k)<0y(k,1)=0;endif x(k)>128 && x(k)<=2048 %在第五段与第八段之间,段位码第一位都为“1”y(k,2)=1;endif (x(k)>32 && x(k)<=128) || (x(k)>512 && x(k)<=2048)y(k,3)=1; %在第三四七八段内,段位码第二位为“1”endif (x(k)>16&&x(k)<=32)||(x(k)>64&&x(k)<=128)||(x(k)>256&&x(k)<=512)||(x(k)>1024&&x(k)<=2048)y(k,4)=1; %在二四六八段内,段位码第三位为“1”end
end
%段内码判断程序
N=zeros(1,length(x));
for k=1:length(x)N(k)=y(k,2)*4+y(k,3)*2+y(k,4)+1; %找到x位于第几段
end
a=[0,16,32,64,128,256,512,1024]; %量化间隔
b=[1,1,2,4,8,16,32,64]; %除以16,得到每段的最小量化间隔
for m=1:length(x)q=ceil((x(m)-a(N(m)))/b(N(m))); %求出在段内的位置if q==0y(m,(5:8))=[0,0,0,0]; %如果输入为零则输出“0”elsek=num2str(dec2bin(q-1,4)); %编码段内码为二进制y(m,5)=str2double(k(1));y(m,6)=str2double(k(2));y(m,7)=str2double(k(3));y(m,8)=str2double(k(4));end
end
%将N行8列矩阵转换为1行8*N列的矩阵
y=y';
y=reshape(y,1,length(x)*8);
end
%% PCM译码函数
function x=pcm_decode(y,max)
%将1行8*N列的矩阵转换为N行8列矩阵
y=reshape(y,8,length(y)/8);
y=y';%PCM译码
n=size(y,1); %求出输入码组的个数
a=[0,16,32,64,128,256,512,1024]; %段落起点值
b=[1,1,2,4,8,16,32,64]; %每段的最小量化间隔
for k=1:nt1=y(k,1); %取符号t2=y(k,2)*4+y(k,3)*2+y(k,4)+1; %判断段落位置t3=y(k,5)*8+y(k,6)*4+y(k,7)*2+y(k,8); %判断段内位置if t3==0 %段内码为零时m(k)=(a(t2)+1+0.5*b(t2))/2048*max;elsem(k)=(a(t2)+b(t2)*t3+0.5*b(t2))/2048*max; %还原出量化后的电平值end        %判断符号位if t1==0x(k)=-m(k);elsex(k)=m(k);end
end
end

部分运行结果:

代码需要结合simlink模型使用,可根据相关知识写一个,不复杂。代码中从工作区导入的变量名:workspace_var,使用两个from workspace模块分别设置:[time_workspace,pcm_code1],[time_workspace,pcm_code2];从simulink导出的数据变量名:simout,使用to workspace模块。

注意事项:电脑配置低的simulink运行可能比较慢,我设置的仿真时间16,如果需要改这个时间,则相对的需要改代码中的simout(2:160001),否则可能出现索引数组超出范围。

可以去我上传的资源中直接下载simulink文件,和上面代码配套。

基于matlab的语音信号PCM编码-2PSK传输仿真相关推荐

  1. 基于matlab的语音信号滤波处理

    基于matlab的语音信号滤波处理 摘要:本课程设计的主要目的是在MATLAB环境下,使用窗口设计法设计一个滤波器,并对语音信号进行滤波去噪.开发平台为MATLAB,设计方法为窗口设计法.用麦克风采集 ...

  2. Matlab语音采集与读写程序,基于MATLAB的语音信号录制采集和分析的程序设计

    理 论广 角 ● I 基于 MATLAB的语音信号录制采集和分析的程序设计 刘 晓炯 (西北民族大学电气工程学院 甘肃 兰州I 730030) [摘 要]语音信号处理技术是语音处理领域中新近发展起来的 ...

  3. matlab如何采集两路语音信号,基于MATLAB的语音信号采集与处理

    内容介绍 原文档由会员 大雨倾盆 发布 基于MATLAB的语音信号采集与处理 2.4万字 114页 原创作品,已通过查重系统 摘要 语音信号处理作为目前发展最为迅速的信息科学研究领域的核心技术,它是一 ...

  4. 判断清浊音 matlab,基于MATLAB的语音信号的清浊音分析.doc

    基于MATLAB的语音信号的清浊音分析 目录 1 语音信号概述1 1.1 语音信号的基本组成1 1.2 语音信号的"短时谱"1 1.3 基音周期2 1.4 短时分析技术2 2 语音 ...

  5. 基于matlab的语音信号去噪毕业论文,MATLAB的FIR数字滤波器语音信号的去噪研究和仿真...

    摘要:语音信号作为人类语言交流的重要手段,语音处理的质量直接影响人们的正常通信.本文基于MATLAB对语音信号及加噪信号进行时域和频域分析,设计了FIR数字滤波器,完成对加噪信号滤波的处理.结果表明设 ...

  6. matlab语音加入正弦噪声,基于Matlab的语音信号去噪声处理 毕业论文.doc

    基于Matlab的语音信号去噪声处理 毕业论文 本科毕业论文(设计) 题目:基于Matlab的语音信号去噪声处理 姓 名: 学 号: 1142051102 专 业: 电子信息工程 院 系: 电子通信工 ...

  7. 《数字语音处理》- 1. 基于MATLAB的语音信号时域特征分析

    声明 本文仅在CSDN发布,其他均为盗版.请支持正版! 正版链接: https://blog.csdn.net/meenr/article/details/117629753 基于MATLAB的语音信 ...

  8. 频域参数 matlab,基于MATLAB的语音信号时频域参数分析

    22 科技广场 2007.9 基于MATLAB的语音信号时频域参数分析 the Character Analysis of Speech Signal with Time and Frequency ...

  9. 基于matlab 的语音信号分析和处理,基于matlab_的语音信号分析和处理

    基于matlab_的语音信号分析和处理 1 基于MATLAB 的语音信号分析和处理 福建师范大学协和学院 信息技术系 电子信息科学与技术专 124122006028 王祯飞 指导老师 黄小芬[摘要]本 ...

最新文章

  1. CSDN 字体颜色表
  2. 通过View.post()获取View的宽高
  3. win10如何关闭文件夹或者照片的最近浏览?
  4. 邀请 | 关于微软容器服务,你需要知道的二三事
  5. Visual Studio 2010 中的 SharePoint 开发
  6. 成功驱动HD4600-Clover引导
  7. ES6 -数组的扩展
  8. linux如何检测文件完整,shell脚本实现linux系统文件完整性检测
  9. (一)Quartz2.2.1 简单例子
  10. Android Studio的Project有某个项目,Build Variants却没有,如何添加物已有项目?
  11. 【金万维】天联高级版客户端打开U8报错:未监听端口
  12. 微信公众号使用:设置开发者密码(AppSecret)的步骤
  13. python中空格怎么打_191012 python3关于空格打印、赋值、+=符号的小坑
  14. 【虚拟机】虚拟化架构与系统部署(Windows系统安装)
  15. Lumion 11软件介绍
  16. BZOJ 4043 [Cerc2014] Vocabulary
  17. asp.net mvc 中的部分视图
  18. 分享几个比较通用的学习网站
  19. 不忘初心 牢记使命 拉卡拉支付积极履行社会责任
  20. 灵格斯Lingoes词典2012过期问题的解决

热门文章

  1. 关于MSN骗子病毒!!!
  2. java web 订餐系统_javaWeb应用 ssm架构 三方外卖系统
  3. flutter 局部刷新
  4. ubuntu下安装python教程_怎么在ubuntu安装python
  5. Windows11 22H2版连接共享打印机出现709错误解决方法
  6. 微信小程序购物车功能
  7. Java 根据id不同,生成唯一礼包码
  8. Ctrl Shift G被搜狗占用之封杀搜狗快捷方式
  9. Nodejs 菜鸟教程学习-创建第一个应用
  10. 2月7号A股迎来开门红,机构龙虎榜与游资开启新的征程