一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【通信】基于matlab语音信号仿真【含Matlab源码 957期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、案例简介

1 整体流程设计
1.1 样本音频信号的频谱分析
1.2 对音频信号的滤波
1.3 对音频信号进行PCM编码
1.4 对编码后的信号进行汉明编码
1.5 对编码后的信号进行qpsk调制
1.6 发送信号进入AWGN信道
1.7 对接收到的信号进行qpsk解调
1.8 信道译码-汉明纠错和译码
1.9 对音频信号进行pcm译码并播放

2 主要模块说明
2.1 pcm编解码—pcmcoder()&pcmdecoder()
pcm为脉冲调制,选取的压缩特性为A律,采用十三折线编码算法,如下图所示。

从图中可以看到,先把X轴的0~1分为8个不均匀段,其分法是:将0—1之间一分为二,其中点为l,2,取1/2~1之间作为第八段;剩余的0—1/2再一分为二,中点为1/4,取1/4—1/2之间作为第七段,再把剩余的0—1/4一分为二,中点为1/8,取1/8~1/4之间作为第六段,依此分下去,直至剩余的最小一段为0~1/128作为第一段。而Y轴的0~1均匀地分为八段,它们与x轴的八段一一对应。从第一段到第八段分别为,0~1/8,1/8—2/8,⋯,7/8~l。这样,便可以作出由八段直线构成的一条折线。再加上第三象限的八段折线,共l6段,由于正向一、二两段和负向一、二两段的斜率相同,这四段实际上为一条直线,因此,正、负双向的折线总共由l3条直线段构成,故称其为13折线。
2.2 汉明编解码—hanmingcoder()&hanmingdecoder()
汉明码是一种线性分组码。线性分组码是指将信息序列划分为长度为k的序列段,在每一段后面附加r位的监督码,且监督码和信息码之间构成线性关系,即它们之间可由线性方程组来联系。这样构成的抗干扰码称为线性分组。
码。
设码长为n,信息位长度为k,监督位长度为r=n-k。如果需要纠正一位出错,因为长度为n的序列上每一位都可能出错,一共有n种情况,另外还有不出错的情况,所以我们必须用长度为r的监督码表示出n+1种情况。而长度为r的监督码一共可以表示2^r种情况。采用(7,4)汉明编码,原信息码4位分组,采用3位监督码。
汉明码是一个校验很严谨的编码方式。通过对4个数据位的3个位的3次组合检测来达到具体码位的校验与修正目的(不过只允许1个位出错,两个出错就无法检查出来了)。在校验时则把每个汉明码与各自对应的数据位值相加,如果结果为偶数(纠错代码为0)就是正确,如果为奇数(纠错代码为1)则说明当前汉明码所对应的三个数据位中有错误,此时再通过其他两个汉明码各自的运算来确定具体是哪个位出了问题。 
解码时首先输入7位汉明码a1a2a3a4a5a6a7,然后根据这7位码a1a2a3a4a5a6a7,计算校正子S1,S2,S3,S4的值,可知校正子S与(7,4)汉明码各位之间的关系,要判定校正子与0的关系,若等于0,则表示没有错误;若不为0,则表示其中有一位出错。通过校正子S与错误图样E之间的关系,将得到的错误图样与译码输出进行模二加,纠正错误。将没有错误的汉明码或已经纠正1个错误的汉明码输出,完成译码程序。
2.3 qpsk调制与解调—qpskcoder()&qpskdecoder()


果。

三、部分源代码

clc;clear all;%/*************************读入音频文件*******************************/
long=input('想处理的音乐的长度(推荐值200 000以下,太长会很慢):');
disp('**********请欣赏发送的的音乐*********')
[x,fs]=audioread('高山流水.wav',[1 long]);
sound(x,fs);
X=fft(x,long);
magX=abs(X);
angX=angle(X);figure;%画图
subplot(321);plot(x);title('原始信号波形');
subplot(322);plot(abs(X)); title('原始信号频谱');%/*************************对音频信号滤波*******************************/
N=5;wc=4000/6000;
[b,a]=butter(N,wc);%用巴特沃斯滤波器进行滤波
X=fft(x);
subplot(323);plot(x);title('滤波前信号的波形');
subplot(324);plot(abs(X));title('滤波前信号的频谱');
y=filter(b,a,x);
Y=fft(y);
subplot(325);plot(y);title('IIR滤波后信号的波形');
subplot(326);plot(abs(Y));title('IIR滤波后信号的频谱');%/*************************对音频信号进行pcm编码*************************/
L=length(y);
pcmy=pcmcoder(y,L,long);%/*************************对编码后的信号进行信道编码-汉明编码************/s=pcmy;
L=length(s);
h=zeros(1,L+L/4*3);%产生编码序列
N=L+L/4*3;
h=hanmincoder(s,L);%/*************************对编码后的信号进行qpsk调制********************/
sig=qpskcoder(N,h);%/*************************发送信号进入AWGN信道**************************/
%加入噪声
n=noise(N,L);
r=sig+n;%检测器的输入模块%/*************************对接收到的信号进行qpsk解调********************/
rr=qpskdecoder(N,r);%/*************************信道译码-汉明纠错和译码***********************/
y=hanmingdecoder(rr,L) ;%/*************************对音频信号进行pcm译码************************/
pcmyout=pcmdecoder(y,long);
disp('**********请欣赏接收到的音乐*********')
sound(pcmyout,fs); disp('**********程序结束,谢谢*********')function  y=hanmingdecoder(rr,L) %汉明纠错
for i=1:length(rr)/7s01=xor(xor(xor(rr(7*i-6),rr(7*i-5)),rr(7*i-4)),rr(7*i-2));s02=xor(xor(xor(rr(7*i-6),rr(7*i-5)),rr(7*i-3)),rr(7*i-1));s03=xor(xor(xor(rr(7*i-6),rr(7*i-4)),rr(7*i-3)),rr(7*i-0));if s01==0&&s02==0&&s03==1;rr(7*i)=not(rr(7*i));elseif s01==0&&s02==1&&s03==0;rr(7*i-1)=not(rr(7*i-1));elseif s01==1&&s02==0&&s03==0;rr(7*i-2)=not(rr(7*i-2));    elseif s01==0&&s02==1&&s03==1;rr(7*i-3)=not(rr(7*i-3));elseif s01==1&&s02==0&&s03==1;rr(7*i-4)=not(rr(7*i-4));elseif s01==1&&s02==1&&s03==0;rr(7*i-5)=not(rr(7*i-5));elseif s01==1&&s02==1&&s03==1;rr(7*i-6)=not(rr(7*i-6));elseif s01==0&&s02==0&&s03==0;continue;end
end
%汉明译码(把经过纠错的序列去掉汉明码还原为原始的序列)
y=zeros(1,L);%最后的序列
j=1;
for i=0:length(rr)/7-1y(j)=rr(7*i+1);y(j+1)=rr(7*i+2);y(j+2)=rr(7*i+3);y(j+3)=rr(7*i+4);%取每一个序列单元的前四个码元j=j+4;
end
end

四、运行结果


五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.

【通信】基于matlab语音信号仿真【含Matlab源码 957期】相关推荐

  1. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  2. 【Matlab语音加密】语音信号加密解密(带面板)【含GUI源码 181期】

    一.代码运行视频(哔哩哔哩) [Matlab语音加密]语音信号加密解密(带面板)[含GUI源码 181期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆 ...

  3. 【Matlab语音处理】汉宁窗FIR陷波滤波器语音信号加噪去噪【含GUI源码 1711期】

    一.代码运行视频(哔哩哔哩) [Matlab语音处理]汉宁窗FIR陷波滤波器语音信号加噪去噪[含GUI源码 1711期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  4. 【Matlab通信】DTMF双音多频电话拨号仿真【含GUI源码 805期】

    一.代码运行视频(哔哩哔哩) [Matlab通信]DTMF双音多频电话拨号仿真[含GUI源码 805期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...

  5. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  6. 【Matlab语音处理】声音信号频谱分析仪【含GUI源码 325期】

    一.代码运行视频(哔哩哔哩) [Matlab语音处理]声音信号频谱分析仪[含GUI源码 325期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...

  7. 【Matlab心音信号】EMD心音信号特征提取【含GUI源码 1735期】

    一.代码运行视频(哔哩哔哩) [Matlab心音信号]EMD心音信号特征提取[含GUI源码 1735期] 二.matlab版本及参考文献 1 matlab版本 2014a *2 参考文献 [1] 沈再 ...

  8. 【Matlab语音隐写】DCT+DWT音频数字水印嵌入提取【含GUI源码 836期】

    一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DCT+DWT音频数字水印嵌入提取[含GUI源码 836期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  9. 【Matlab语音隐写】DWT音频数字水印【含GUI源码 712期】

    一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DWT音频数字水印[含GUI源码 712期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...

  10. 【Matlab肌电信号】肌电信号处理【含GUI源码 966期】

    一.代码运行视频(哔哩哔哩) [Matlab肌电信号]肌电信号处理[含GUI源码 966期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继周,杨 ...

最新文章

  1. 美团公开外卖配送中的“预估到达时间”算法规则
  2. Spring Cloud Alibaba基础教程:Nacos的数据持久化
  3. CPU的插槽类型LGA与Socket 的区别
  4. 面试最后HR都要问一句有没有什么问题要问我?
  5. 学嵌入式有两个诀窍:勤奋刻苦+不要脸
  6. 微软Visual Studio 2019版本16.3 正式发布,支持 .NET Core 3.0
  7. 查询学生选修课程管理系统java_JAVA数据库课程设计学生选课管理系统的
  8. 17.合并两个排序的链表
  9. 学生选课管理系统(Java)
  10. IT桌面运维常识系列 - MDT
  11. 关于STM32使用RTC唤醒停止模式的设置
  12. 【第五课】ArcCatalog和ArcToolbox初识
  13. 按键精灵文字替换,文字查找代码
  14. 【Stats】Jarque Bera test正态性检验
  15. 阿里云服务器 免费获取SSL证书 配置HTTPS安全访问
  16. 勤做眼保健操,减轻眼睛疲劳
  17. [干货]网页端、移动端导航设计模式全解
  18. [bzoj 4424]Cf19E Fairy
  19. java jnlp_Java Web Start实践:动态生成JNLP
  20. Matlab Excel服务器,笔记

热门文章

  1. 由一个DEBUG说开去
  2. 用Python将一个文件夹下多个子文件夹中相同文件拷贝到同一个文件夹中并重新命名
  3. Ubuntu下安装Chrome浏览器的方法
  4. 算法与数据结构 第2章 排序基础 下 插入排序
  5. Java面向对象思想
  6. 黑马程序员 Python学习笔记之多文件项目的演练
  7. titit 切入一个领域的方法总结 attilax这里,机器学习为例子
  8. Atitit.软件按钮与仪表盘(13)--全文索引操作--db数据库子系统mssql2008
  9. atitit. js 跨界面 页面 web cs 传值方法总结
  10. paip.提升用户体验----记住用户名与自动登录