% 以下为(10,6)循环码,g=x4+x+1生成的码组,一位发生错误后打表程序
tab = zeros(1,10);
for i =1:10
E = [0 0 0 0 0 0 0 0 0 1];
E = circshift(E',i)';
x_r = [1 1 0 0 0 0 1 1 1 1];
x_r = double(xor(x_r,E));
g = [1,0,0,1,1];
r_g = gf(x_r,1);% r_g为接收码字的二元域形式r(x)
g_g = gf(g,1);% 生成多项式向量的二元域形式g(x)
% 用r(x)除以生成多项式g(x),得出余式即校验子多项式s(x),
[~,s_g] = deconv(r_g,g_g);
s = s_g.x;
tab(11-i)= s(7)*8+s(8)*4+s(9)*2+s(10);
end
clc;clear;close all;
N=1000;
x = randi(64,1,N)-1;%生成N个随机数列
x_bit = reshape((de2bi(x))',1,6*N); %转换为二进制信息流,长度为N*6
g = [1,0,0,1,1]; %生成多项式
x_encode = cyclic_enco(x_bit,g);%编码序列
SER_sum = zeros(1,1000);
Pe = linspace(0.01,0.5,1000);
for i = 1:1000
%差错图谱
E = randsrc(1,length(x_encode),[[0,1];[1-Pe(i),Pe(i)]]);
%根据差错图谱得到实际接收码字
x_r = double(xor(x_encode,E));
%译码
x_decode = cyclic_deco(x_r,g);
%计算误码率
x1 = bi2de(reshape(x_decode,6,N)')';
SER = sum(x1~=x)/N;
SER_sum(i) = SER;
end
plot(Pe,SER_sum)
title('错误概率与误码率曲线');xlabel('Pe');ylabel('SER')
% 绘制直接传输时的误码率图用作对比
for i = 1:1000
%差错图谱
E = randsrc(1,length(x_bit),[[0,1];[1-Pe(i),Pe(i)]]);
%根据差错图谱得到实际接收码字
x_r = double(xor(x_bit,E));
x1 = bi2de(reshape(x_r,6,N)')';
SER = sum(x1~=x)/N;
SER_sum(i) = SER;
end
hold on
plot(Pe,SER_sum)
legend('循环码','直接传输');
function [ code_out ] = cyclic_enco(x,g)
%(10,6)循环码编码
%输入原序列x,生成多项式g
% 系统循环码编码的原理是,首先用x^r乘以信息码字多项式m(x),这里r = 4;然后用x^r*m(x)除以生成多项式g(x),
% 得余式r(x);最后得系统循环码多项式c(x) = x^r*m(x) + r(x)
code_out = zeros(1,length(x)/6*10);
for i=1:length(x)/6
x_code = [x(6*i-5:6*i),zeros(1,4)]; % 在信息码字后面补上4个零,相当于乘上x^r
% 把信息码字多项式向量和生成多项式向量转到二元域GF(2)上,函数gf(X,M)用于从向量X生成GF(2^M)上对应的向量
x_g = gf(x_code,1);
gen_g = gf(g,1);
% 用x^r*m(x)除以生成多项式g(x)
[~,rem_g] = deconv(x_g,gen_g); % 在Matlab中,多项式除法等同于解卷积运算
rem = rem_g.x; % rem_g.x表示二元域向量rem_g的一个属性,即多项式的系数。注意rem_g.x是在实数域中,而rem_g是在二元域中
% 输出系统循环码
code_out(10*i-9:10*i) = [x(6*i-5:6*i),rem(7:10)];
end
end
function [ decode_out ] = cyclic_deco(x_r,g)
%(10,6)系统循环码译码器
decode_out = zeros(1,length(x_r)/10*6);
for i=1:length(x_r)/10
x_code = x_r(10*i-9:10*i);
r_g = gf(x_code,1);% r_g为接收码字的二元域形式r(x)
g_g = gf(g,1); % 生成多项式向量的二元域形式g(x)
% 用r(x)除以生成多项式g(x),得出余式即校验子多项式s(x),
[~,s_g] = deconv(r_g,g_g);
s = s_g.x;
% 查表求错误图样
switch s(7)*8+s(8)*4+s(9)*2+s(10)% s[1..10]的后四位是理论上的余式;因为case语句不接受向量参数,所以把校验子向量按二进制转化为标量
case 0
e = 0; % e表示错误的位置,如果e为零,则表示没有错误
case 1
e = 1; % 第一位错,以下类推
case 2
e = 2;
case 4
e = 3;
case 8
e = 4;
case 3
e = 5;
case 6
e = 6;
case 12
e = 7;
case 11
e = 8;
case 5
e = 9;
case 10
e = 10;
otherwise
e = 0;%???????????? disp('检测出错误,但无法纠正');
end
if e~=0
E = [0 0 0 0 0 0 0 0 0 1];
E = circshift(E',11-e)';
x_code = double(xor(x_code,E));
end
decode_out(6*i-5:6*i) = x_code(1:6);
end
end
没有合适的资源?快使用搜索试试~ 我知道了~
16QAM通信系统仿真matlab
共33个文件
m:27个
wav:5个
asv:1个
需积分: 5 19 下载量 111 浏览量
2022-03-05
17:02:03
上传
评论 12
收藏 4.42MB ZIP 举报
温馨提示
1、设计数字通信系统,按发射端和接收端两大模块分别编程实现教材上第5页图1-5的全部内容; 2、信源:自己录一段的语音; 3、信源编码:自选一种编码方式; 4、加密:使用DES、RSA或其它加密算法,可以直接应用网上资料; 5、信道编码:自选一种编码方式; 6、数字调制:QAM调制; 7、信道:高斯、瑞利、莱斯信道; 8、性能分析:容量、传输速率、误码率、误比特率、眼图、星座图、频带利用率、能量效率(见提醒)。
资源详情
资源评论
资源推荐
收起资源包目录
M_QAM5.zip (33个子文件)
M_QAM
rsa_decrypt.m 934B
PCMdecode.m 1KB
luyin2.m 953B
1.wav 4.58MB
luyin.m 1KB
qam16.m 2KB
random_binary.m 322B
rsa_encrypt.m 907B
two2four.m 279B
RSA.m 1KB
WindowsDing.wav 187KB
constel.m 622B
luyin
data1.wav 125KB
Qam16_modulate.asv 2KB
M_QAM.m 1KB
qam.m 394B
M_QAM1.m 1KB
qamdet.m 451B
cyclic_decode.m 2KB
four2two.m 541B
cyc_ori.m 2KB
M_QAM2.m 957B
CRC.m 3KB
Qam16_modulate.m 2KB
data1.wav 861KB
rsa_pq.m 2KB
recorderFile.wav 200KB
distortion.m 185B
bshape.m 221B
QAM_3.m 1KB
PCMencode.m 2KB
try1.m 459B
cyclic_encode.m 1KB
共 33 条
- 1
linux小小萌新
- 粉丝: 9
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0