% simulation of convolutional encoding / Viterbi decoding
clear all;
clc
codeselect=4;
switch codeselect
case 1
Gpoly=[27 31];
case 2
Gpoly=[6 2 6; 2 4 4];
case 3
Gpoly=[4 2 6; 1 4 7];
case 4
Gpoly=[60 30 70; 14 40 74];
otherwise
Gpoly=[70 30 20 40; 14 50 0 54; 4 10 74 40];
end
%===============================================================
% Find key descriptors of the convolutional code
%===============================================================
display_info=1;
[K, M, nu, n, k, coderate, StateTable]=getcodeparameters(Gpoly);
% StateTable
%===============================================================
% Generate Data
%===============================================================
NoBits=1000; % How many bit are to be sent
EbNodBVals=[3:1:6];
BER=zeros(10,length(EbNodBVals));
BER2=BER;
countSNRs=0;
for Simulation=1:10,
for SNR=1:length(EbNodBVals)
countSNRs=countSNRs+1;
NoOfBitErrors=0;
TotalNoOfBits=0;
TotalNoOfCodedBits=0;
NoofCodedBitErrors=0;
BERtemp=Inf;
while NoOfBitErrors<10,
m=floor(rand(1,NoBits).*2); % generate data bits
%===============================================================
% Prepare data by adding leading/trailing zeros to start/end in the zero
% state
%===============================================================
% first add k*nu leading zeros to start from 0 state
m2=[zeros(1,k.*nu) m zeros(1,k.*nu)];
NoOfLeadingAddedZeros=k.*nu;
% add extra zeros to make m a multiple of k
if rem(length(m2),k) > 0 % length(m) must be a multiple of k
% No of input bits to encoder
ExtraZeros=zeros(size(1:k-rem(length(m),k)));
NoOfExtraZeros=length(ExtraZeros);
m2=[m2 ExtraZeros]; % add the zeros
NoOFTrailingAddedZeros=k.*nu+NoOfExtraZeros;
else
NoOFTrailingAddedZeros=k.*nu;
end
%===============================================================
% Encode Data Using Covolutional encoder
%===============================================================
[c,c_bin,PathThroughTrellis]=encoder(m2,k,n,StateTable);
%[c,c_bin]=encoder(m,k,n,StateTable); %If PathThroughTrellis isn't needed
%===============================================================
% simulate Channel
%===============================================================
% simulate BPSK modulator
s=2.*c_bin-1;
% noise
EbNo=10.^(EbNodBVals(SNR)./10);
EsNo=EbNo.*coderate;
Es=1;
No=Es./EsNo;
sigma=sqrt(No.*2)./2;
noise=sigma.*randn(size(s));
sr=s+noise; %awgn, sr= received signal
% hard quantize demodulator
r=zeros(size(sr));
r(sr>=0)=1;
%===============================================================
%Decode Data Using Covolutional Viterbi decoder
%===============================================================
[m2_est,c_bin_est,CumulatedMetric ]=decoder(r, StateTable, M, k , n);
%remove trailing/leading zeros
m_est=m2_est;
m_est(1:NoOfLeadingAddedZeros)=[];
m_est(end- NoOFTrailingAddedZeros+1:end)=[];
NoOfBitErrors=NoOfBitErrors+length(find(m_est~=m));
TotalNoOfBits=TotalNoOfBits+length(m_est);
NoofCodedBitErrors=NoofCodedBitErrors+length(find(c_bin_est~=c_bin));
TotalNoOfCodedBits=TotalNoOfCodedBits+length(c_bin);
end
BER(Simulation,SNR)=NoOfBitErrors./TotalNoOfBits;
BER2(Simulation,SNR)=NoofCodedBitErrors./TotalNoOfCodedBits;
clc
disp(['Sim:' num2str(100.*(countSNRs)./(10.*length(EbNodBVals))) '% ,' ' Eb/No= ' num2str(EbNodBVals(SNR)) ' dB , BER = ' num2str(BER(Simulation,SNR))])
end
end
%===============================================================
% Draw the The Figures of results
%==============================================================
disp('Information for this code')
disp('==========================')
disp([ 'k = ' num2str(k) ' input bits'])
disp(['n = ' num2str(n) ' output bits'])
disp(['code rate = ' num2str(coderate)])
disp(['Total Number of Memory Elements M = ' num2str(sum(M))]);
disp(['Total Number of States : ' num2str(2.^(sum(M)))]);
disp(['Constraint Length nu : ' num2str(nu)]);
disp('==========================')
AverageBER=mean(BER);
semilogy(EbNodBVals,AverageBER,'-*')
grid on;
xlabel('SNR(dB)')
ylabel('BER(log)')
legend('系统数据库')
title('系统性能')
figure(gcf)
没有合适的资源?快使用搜索试试~ 我知道了~
编码译码基于matlab卷积码编解码仿真【含Matlab源码 3108期】.zip
共9个文件
m:8个
jpg:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 193 浏览量
2023-09-08
21:37:06
上传
评论 1
收藏 27KB ZIP 举报
温馨提示
CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:Hammi.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开Hammi.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博主博客文章底部QQ名片; 4.1 CSDN博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、通信、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、信号检测信号识别融合
资源推荐
资源详情
资源评论
收起资源包目录
【编码译码】基于matlab卷积码编解码仿真【含Matlab源码 3108期】.zip (9个子文件)
【编码译码】基于matlab卷积码编解码仿真【含Matlab源码 3108期】
BER_NOchannel.m 2KB
getcodeparameters.m 4KB
bin2deci.m 336B
运行结果.jpg 33KB
BER_channel.m 5KB
deci2bin.m 237B
decoder.m 4KB
encoder.m 994B
oct2bin.m 621B
共 9 条
- 1
资源评论
海神之光
- 粉丝: 5w+
- 资源: 7128
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Linux环境下编译图像查看工具View-image的Ubuntu实践教程
- 基于STM32视频监控系统源码(高分毕业设计项目).zip
- 利用 JavaScript 的 Date 对象获取当前时间,在网页上展示实时数字时钟的源码
- 实验八、Linux gcc源码编译实验(二).doc
- 基于STM32的视频监控系统项目源码(高分毕业设计项目)
- Linux环境下的Opencv编译运行指南:基于Ubuntu系统的图像显示程序实现
- lab8-课外扩展任务-编译opencv程序.7z
- 八月最新完美运营版 PHP在线客服系统服务器完整打包
- 实验九、编写Linux Shell脚本.doc
- 中文字体用于matplotlib
- 实验九+、Linux Shell变量与环境配置.doc
- web服务调用代码,C#实现
- lab9-Linux脚本.7z
- 1736408193931885_110_f0c21c4061d20975109eb2c4bcb0aa89.apk
- 一个 用 HTML 构建页面,JavaScript 处理下拉菜单联动的源码
- 实验十、Linux网络参数配置与网络服务管理.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功