matlab实现语音信号的74汉明编码译码过程

%% 提取数据并做数值转换
clear all
% 读取wav文件
[y, fs] = audioread('audio.wav');
Y=y*10000;
% 将语音数据转换为二进制序列
xvlie = reshape(dec2bin(typecast(int16(Y(:)), 'uint16'))', 1, []) - '0';
bitcode=xvlie';

%% 通信信道模型部分
%数据初步处理完成,编码数据初始化
code=reshape(bitcode,[],4);%信息序列
ecode=hamming74_encode(code);%汉明编码完成
e=rand2(ecode);%噪音 rand1是每行增加0-1为错误,rand2是每行增加2或更多个错误,可以改函数参数
ercode=ecode+e;%噪声添加完成
ercode=mod(ercode,2);
%ecode=mod(ecode,2);

%解码开始
S=hamming74_decode(ercode);%计算伴随式
E=check(S);%根据伴随式找到错误图案
ER=ercode+E;
% S=hamming74_decode(ecode);%计算伴随式
% E=check(S);%根据伴随式找到错误图案
% ER=ecode+E;
ER=mod(ER,2);
result=ER(:, 1:4);
%% 解码恢复部分

% 将二进制序列转换回语音数据
 numSamples = numel(result);
 yout = zeros(numSamples/16, 1);
 for i = 1:numSamples/16
     startIndex = (i - 1) * 16 + 1;
     endIndex = i * 16;
     yout(i) = typecast(uint16(bin2dec(char(result(startIndex:endIndex) + '0'))), 'int16');
 end
 yout=yout/10000;
 yout=reshape(yout,[],2);
% 将语音数据写入wav文件
%audiowrite('output.wav', yOut, fs);
% sound(yout, fs);
subplot(211);
plot(y,'b');
title('原始数据');
subplot(212);
plot(yout,'r');
title('经过信道后的数据');

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值