实验要求:

1、随机序列1和随机序列2要求不能一样,信道编码选择卷积码。
2、在信道编码后,加个扩频模块,用伪随机序列扩频。

扰码要求如下:

代码如下所示:

err_rate = [];
snr_min = -10;
snr_max = 0;
for snr = snr_min:snr_maxerr_num = 0;for cir = 1:25000Ts = 1;%码元持续时间sample_rat = 100;%采样频率wav_freq = 10;%载波频率msg_num = 4;%选择生成码的个数exp_rat = 5;%扩频系数[msg] = rand_msg_cre(msg_num);%产生4个非全0随机信息[msg_out] = cre_m(msg,msg_num);%产生m序列[msg_scramblered] = scrambler(msg_out);%扰码处理[msg_conved] = conv_msg(msg_scramblered);%卷积码处理[msg_expanded] = freq_expand(msg_conved,exp_rat);%扩频[sig_BPSKed] = BPSK_code(msg_expanded,sample_rat,Ts,wav_freq);%2PSK编码[sig_channel] =awgn(sig_BPSKed,snr);%高斯信道[msg_rec] = BPSK_decode(sig_channel,sample_rat,Ts,wav_freq);%BPSK抽样解码[msg_de_expand] = Msg_de_expand(msg_rec,exp_rat);%反扩频[msg_vtb_decode] = vtb_decode(msg_de_expand);%维特比译码[msg_de_scramb] = scrambler(msg_vtb_decode);%扰码处理扰码处理后的信息不变[msg_de_m] = [msg_de_scramb(1),msg_de_scramb(2),msg_de_scramb(3),msg_de_scramb(4)];%m序列解出原信息err_num = err_num+sum(xor(msg,msg_de_m));enderr_rate = [err_rate err_num/(cir*msg_num)];
end
snrr = snr_min:snr_max;
semilogy(snrr,err_rate);xlabel("SNR(dB)");ylabel("error rate");

各个函数代码如下所示:

函数rand_msg_cre:

function [rand_msg] = rand_msg_cre(rand_msg_num)
%UNTITLED3 此处显示有关此函数的摘要
%   产生信息,避免全0状态
rand_msg = zeros(1,rand_msg_num);
while sum(rand_msg) == 0rand_msg = randi([0,1],1,rand_msg_num);
end
end

函数cre_m:

function [msg_out] = cre_m(msg_in,length)
%UNTITLED6 此处显示有关此函数的摘要
%   产生m序列
msg_out=zeros(1,length-1);
for i=1:length^2-1msg_in(5)=xor(msg_in(4),msg_in(1));msg_out(i)=msg_in(1);msg_in(1)=msg_in(2);msg_in(2)=msg_in(3);msg_in(3)=msg_in(4);msg_in(4)=msg_in(5);
end

函数scrambler:

function [msg_aft_scramb] = scrambler(msg_before_scramb)
%UNTITLED 此处显示有关此函数的摘要
%   此处显示详细说明
m=length(msg_before_scramb);
x(1:7)=[1 1 1 1 1 1 1];
msg_aft_scramb=zeros(1,m);
for i = 1:mx(8)=xor(x(4),x(7));x(7)=x(6);x(6)=x(5);x(5)=x(4);x(4)=x(3);x(3)=x(2);x(2)=x(1);x(1)=x(8);x_out(i)=x(1);msg_aft_scramb(i)=xor(msg_before_scramb(i),x_out(i));
end

函数conv_msg:

function [msg_out] = conv_msg(msg_in)
%UNTITLED2 此处显示有关此函数的摘要
%   此处显示详细说明
data_stream = [0,0];
msg_out = [];
for ik = 1:length(msg_in)data_stream = [data_stream,msg_in(ik)];ci = data_stream(ik+2);di = xor(data_stream(ik+2),data_stream(ik));ei = xor(xor(data_stream(ik+2),data_stream(ik+1)),data_stream(ik));msg_out = [msg_out,ci,di,ei];
end

函数freq_expand:

function [msg_after_expand] = freq_expand(msg_before_expand,expand_ratio)
%UNTITLED3 此处显示有关此函数的摘要
%   此处显示详细说明
msg_after_expand = [];
m=length(msg_before_expand)*expand_ratio;
x(1:7)=[1 1 1 1 1 1 1];
msg_to_scramb=zeros(1,m);
for i = 1:mx(8)=xor(x(4),x(7));x(7)=x(6);x(6)=x(5);x(5)=x(4);x(4)=x(3);x(3)=x(2);x(2)=x(1);x(1)=x(8);msg_to_scramb(i)=x(1);
end
for ik = 1:length(msg_before_expand)for jk = 1:expand_ratiomsg_after_expand = [msg_after_expand,xor(msg_before_expand(ik),msg_to_scramb((ik-1)*expand_ratio+jk))];end
end

函数BPSK_code:

function [sig_BPSK] = BPSK_code(sig_into,sample_rat,Ts,wav_freq)
%UNTITLED4 此处显示有关此函数的摘要
%   此处显示详细说明
sig_BPSK = [];
Ph = 0:2*wav_freq*pi/sample_rat:2*pi*wav_freq*(Ts-1/sample_rat);%Ph为相位
gt1 = -1*sin(Ph.*ones(1, Ts*sample_rat)); %通道消息码为1
for ik = 1:length(sig_into)sig_BPSK = [sig_BPSK,(sig_into(ik)*2-1)*ones(1,length(Ph)).*gt1];
end
end

函数BPSK_decode:

function [Msg_decode] = BPSK_decode(sig_in,sample_rat,Ts,wav_freq)Ph = 0:2*wav_freq*pi/sample_rat:2*pi*wav_freq*(Ts*length(sig_in)/sample_rat-1/sample_rat);%Ph为相位sig_local = -1*sin(Ph.*ones(1,length(sig_in)));
sig_rec = sig_in.*sig_local;hd = fir_des1;
sig_lp = filter(hd,sig_rec);t1 = sample_rat/2:sample_rat:length(sig_in)-sample_rat/2;
Msg_decode = [];
for ik = 1:length(sig_in)/sample_ratMsg_decode = [Msg_decode,sign(sig_lp(t1(ik)))];
end
Msg_decode = (Msg_decode+ones(1,length(Msg_decode)))/2;
end

函数Msg_de_expand:

function [msg_out] = Msg_de_expand(msg_rec,expand_rat)msg_out = [];
m = length(msg_rec);
x(1:7)=[1 1 1 1 1 1 1];
msg_to_de_scramb=zeros(1,m);
for i = 1:mx(8)=xor(x(4),x(7));x(7)=x(6);x(6)=x(5);x(5)=x(4);x(4)=x(3);x(3)=x(2);x(2)=x(1);x(1)=x(8);msg_to_de_scramb(i)=x(1);
end
Msg_to_decode = xor(msg_to_de_scramb,msg_rec);
for ik = 1:expand_rat:length(msg_rec)-expand_rat+1msg_out((ik+expand_rat-1)/expand_rat) = sign(sum(Msg_to_decode(ik:(ik-1+expand_rat))));
end
end

函数vtb_decode:

function [msg_output] = vtb_decode(msg_input)
%   code_pre 第一位为汉明距离,第二三位为预设的00,第四、五、六为第一、二、三个输入的码
cir_len = length(msg_input)/3;
code_pre = [0,0,0,0,0,0;0,0,0,0,0,1;0,0,0,0,1,0;0,0,0,0,1,1;0,0,0,1,0,0;0,0,0,1,0,1;0,0,0,1,1,0;0,0,0,1,1,1];
code_conv = zeros(8,9);%输出序列存储位置
for ik = 1:8%分8行,即000-111;for jk = 1:3%%先做1-3的幸存距离ci = code_pre(ik,jk+3);di = xor(code_pre(ik,jk+3),code_pre(ik,jk+1));ei = xor(xor(code_pre(ik,jk+1),code_pre(ik,jk+2)),code_pre(ik,jk+3));code_conv(ik,jk*3 - 2) = ci;code_conv(ik,jk*3 - 1) = di;code_conv(ik,jk*3 ) = ei;end%%%产生卷积码code_pre(ik,1) = sum(xor(code_conv(ik,1:9),msg_input(1:9)));%%汉明距
end
for lk = 1:4if code_pre(2*lk-1,1)<code_pre(2*lk,1)code_pre(2*lk,:) = code_pre(2*lk-1,:);elsecode_pre(2*lk-1,:) = code_pre(2*lk,:);end
end
%%%%%%至此1-3考察完毕for ik = 4:cir_lenfor jk = 1:8code_pre(jk,ik+3) = mod(jk+1,2);%%01010101ci = code_pre(jk,ik+3);di = xor(code_pre(jk,ik+3),code_pre(jk,ik+1));ei = xor(xor(code_pre(jk,ik+1),code_pre(jk,ik+2)),code_pre(jk,ik+3));code_conv(jk,ik*3-2) = ci;code_conv(jk,ik*3-1) = di;code_conv(jk,ik*3) = ei;%%产生三位卷积码code_pre(jk,1) = code_pre(jk,1)+sum(xor(msg_input(ik*3-2:ik*3),code_conv(jk,ik*3-2:ik*3)));%%将新增汉明距加到原有汉明距里面去endfor lk = 1:4if code_pre(2*lk-1,1)<code_pre(2*lk,1)code_pre(2*lk,:) = code_pre(2*lk-1,:);elsecode_pre(2*lk-1,:) = code_pre(2*lk,:);endend%%筛选幸存路径
end
[data_min,p_min] = min(code_pre(:,1));
msg_output = code_pre(p_min,4:3+cir_len);
end

函数fir_des1:

function Hd = fir_des1
%FIR_DES1 返回离散时间滤波器对象。% MATLAB Code
% Generated by MATLAB(R) 9.8 and DSP System Toolbox 9.10.
% Generated on: 15-Apr-2021 19:48:15% Equiripple Lowpass filter designed using the FIRPM function.% All frequency values are in Hz.
Fs = 100;  % Sampling FrequencyFpass = 1;              % Passband Frequency
Fstop = 2;              % Stopband Frequency
Dpass = 0.17099735734;  % Passband Ripple
Dstop = 0.1;            % Stopband Attenuation
dens  = 20;             % Density Factor% Calculate the order from the parameters using FIRPMORD.
[N, Fo, Ao, W] = firpmord([Fpass, Fstop]/(Fs/2), [1 0], [Dpass, Dstop]);% Calculate the coefficients using the FIRPM function.
b  = firpm(N, Fo, Ao, W, {dens});
Hd = dfilt.dffir(b);% [EOF]

运行结果如下所示:

运行数据较多想快速出结果可减少cir循环

通信原理 实验:加入m序列、扰码、扩频、卷积码以及维特比译码功能的数字基带系统仿真相关推荐

  1. 通信使用matlab三元码实验报告,Matlab仿真DSBSC信号与双极性不归零码通信原理实验报告二实验...

    Matlab仿真DSBSC信号与双极性不归零码通信原理实验报告二实验 Matlab 仿真 DSB-SC 信号与双极性不归零码通信原理实验报告二实验题目:Matlab 仿真 DSB-SC 信号与双极性不 ...

  2. 通信原理实验之MPSK和MQAM 信号的星座图【100010369】

    通信原理实验之MPSK/MQAM 信号的星座图 一.实验目的 1.了解 MPSK 信号的星座图: 2.了解 MQAM 信号的星座图. 二.实验仪器 1.序列码产生器 2.2-M 进制转换器 3.PSK ...

  3. fsk调制解调实验报告 matlab,基于MATLAB的-FSK调制与解调-通信原理实验

    <基于MATLAB的-FSK调制与解调-通信原理实验>由会员分享,可在线阅读,更多相关<基于MATLAB的-FSK调制与解调-通信原理实验(2页珍藏版)>请在人人文库网上搜索. ...

  4. 2021-06-04 记一次好玩的通信原理实验

    通信原理实验(hfut) 模拟信号源及 AM.DSB 观测 波形观测 实验结果分析 总结 HDB3码型变换实验 波形观测 总结 眼图观测实验 模拟信号源及 AM.DSB 观测 1. 观察AM.DSB时 ...

  5. matlab 2ask,(最新整理)基于MATLAB的2ASK和2FSK调制仿真(通信原理实验报告)

    <(最新整理)基于MATLAB的2ASK和2FSK调制仿真(通信原理实验报告)>由会员分享,可在线阅读,更多相关<(最新整理)基于MATLAB的2ASK和2FSK调制仿真(通信原理实 ...

  6. 通信原理实验 多径传播 MATLAB仿真

    通信原理实验 多径传播 MATLAB仿真 一.实验目的 通过实验掌握多径传播.信道的频率选择性.相干带宽等概念,理解多径信道对信号传输的影响. 二.实验原理 多径信道指信号传输的路径不止一条,接收端同 ...

  7. [通信原理实验]北京邮电大学信息工程专业

    北京邮电大学通信原理实验报告,适用于信息与通信工程学院信息工程专业,主要实验包括基于SystemView的AM.SSB.FM调制与解调,抽样定理,数字基带传输,2ASK.16QAM调制与解调. 实验报 ...

  8. bpsk传输系统实验matlab,通信原理实验4 BPSK系统仿真matlab程序

    通信原理实验4 BPSK系统仿真matlab程序,波形 实验名称:BPSK系统实验 一.程序代码 close all;clc;clear; ts=1;fc=2; n_sample=200;n_num= ...

  9. 通信原理实验之调频【100010372】

    通信原理实验之调频 一.实验目的 1.掌握利用 VCO 作调频器产生调频信号的方法: 2.掌握采用普通鉴频器进行调频解调的方法: 3.了解调频输出信号的波形及频谱. 二.实验仪器 1.余弦信号发生器 ...

最新文章

  1. SSRS 2012 交互式报表 -- 层次性文档结构图
  2. 进阶丨如何让你的数据分析更加简洁专业
  3. flume高可用-balance-测试运行
  4. Node.js知识梳理之Node.js安装
  5. yum安装nginx,并配置静态资源服务器
  6. 编写高质量代码改善程序的157个建议:第87个建议之区分WPF和WinForm的线程模型...
  7. spark读取kafka数据 createStream和createDirectStream的区别
  8. Dijkstra 路径规划 C#
  9. C51单片机,点亮小灯的入门级教程
  10. delphi mysql 端口_delphi连接mysql
  11. dump文件导入表修复工具——Imports Fixer
  12. 输入两个正整数,求其最大公约数和最小公倍数
  13. 昔者,圣人之作易也,幽赞神明而生蓍
  14. 注塑机服务器显示e011,一种注塑机工业4.0联网系统以及监控方法
  15. 开发第三方分账系统需要多少钱?
  16. 重积分的计算机应用开题报告,重积分的数值计算【信息科学与技术专业】【毕业设计 文献综述 开题报告】.docx...
  17. 分享虚拟机VirtualBox安装win7系统完整步骤。
  18. OpenLayers3基础教程——OL3基本概念
  19. 百度地图API入门1-申请百度API key
  20. python控制浏览器脚本_Chrome 33+浏览器 Cookies encrypted_value解密脚本(python实现)...

热门文章

  1. 解决文字与图片始终不并排的问题
  2. 帝国cms首页写php,帝国cms常用标签汇总
  3. RMA直接接收入库Interface导入
  4. cvm服务器虚拟化,云服务器cvm简单高效便于处理能力提升
  5. P3239 [HNOI2015]亚瑟王(巧妙的概率dp)
  6. NLP中人类的沟通模式
  7. 网站添加用户风险测评
  8. Scala数组函数二(dropRight~intersect)
  9. python中的鸭子模型
  10. 新鲜出炉的 CSP-J 2021 复赛题目 题解