✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
⛄ 内容介绍
利用matlab软件进行汉明码仿真,包含了编码、译码。同时译码分别采用了软判决+最小欧式距离译码、硬判决+最小汉明距离译码方法。
⛄ 部分代码
BitSeq=randi([0,1],[5120000,2]); %生成比特序列
SymbolSeq=bi2de(BitSeq,'left-msb'); %比特序列转化为符号序列
ModulatedSeq=qammod(SymbolSeq,4); %调制后的信号序列
%QPSK实际误码率:
error=zeros([1,11]);
for ebno=0:1:10
AWGNChannel = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (Eb/No)','EbNo',ebno,'BitsPerSymbol',2,'SignalPower',mean(abs(ModulatedSeq).^2));
outsignal=AWGNChannel(ModulatedSeq);
recv=qamdemod(outsignal,4);
rec=de2bi(recv,'left-msb');
[~,error(ebno+1)]=biterr(rec,BitSeq);
end
semilogy(0:1:10,error,'o-');
grid on
axis([0,10,1e-5,1])
hold on
xlabel('Eb/No');
ylabel('BER');
title('AWGN');
%%
BitSeq=randi([0,1],[512000,4]); %生成比特序列
BitSeq_1 = reshape(BitSeq',[2048000,1]);
BitSeq_Encode = encode(BitSeq_1,7,4,'hamming/binary');
ModulatedSeq=qammod(BitSeq_Encode,4,'InputType','bit'); %调制后的信号序列
error=zeros([1,11]);
for ebno=0:1:10
AWGNChannel = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (Eb/No)','EbNo',ebno,'BitsPerSymbol',2,'SignalPower',mean(abs(ModulatedSeq).^2)*7/4);
outsignal=AWGNChannel(ModulatedSeq);
recv = qamdemod(outsignal,4,'OutputType','bit');
rec = decode(recv,7,4,'hamming/binary');
[~,error(ebno+1)]=biterr(rec,BitSeq_1);
end
semilogy(0:1:10,error,'o-');
legend('Uncoded','Soft decision','Hard decision')
%%
function [res] = SoftD(Seq)
% 软判决函数
% INPUT:接收到的编码后的符号
% OUTPUT:软判决后的比特序列
global ModulatedY;
global base;
dist = sum(dis_complex(ModulatedY,Seq),2);
[~,index] = min(dist);
res = base(index,:);
end
function [res] = dis_complex(a,b)
% 复数欧式距离函数
res = sqrt((imag(a)-imag(b)).^2+(real(a)-real(b)).^2);
end
⛄ 运行结果
⛄ 参考文献
[1] 于洪涛.基于均值匹配的Turbo码联合译码的Matlab实现[D].哈尔滨工业大学[2023-07-22].DOI:CNKI:CDMD:2.2009.229135.
[2] 曹亚陆.基于Matlab的卷积码译码器的设计与仿真[J].硅谷, 2011(15):1.DOI:10.3969/j.issn.1671-7597.2011.15.030.
[3] 段晓霞.基于MATLAB编码的PCM编译码实现[J].廊坊师范学院学报:自然科学版, 2019, 19(4):5.DOI:CNKI:SUN:HZJS.0.2019-04-009.