通信原理大作业–基于MATLAB的数字通信系统仿真设计
本次大作业实验代码为初学matlab所编写,有不规范之处多多见谅呀,有什么问题可以积极评论区询问,不定时解答噢
互相进步,我也是个小菜鸡
文章目录
% 数字通信系统仿真,主要模块:信源、信源编码、信道编码,调制;信道;解调制、信道译码、信源译码、信宿;
% (1)信源:产生一个模拟信号或数字信号 --正弦信号
% (2)信源编码:任何一种压缩编码 --PCM-脉冲编码调制方式
% (3)信道编码:任何一种纠错码(奇偶校验,分组码,等); --线性分组码
% (4)调制: 任何一种调制(2ASK,2PSK,等); --2PSK-二进制相移键控法
% (5)信道:任何一种信道(理想,高斯,等); --高斯白噪声模拟信道噪声
% (6)解调制:解调(4); --相干解调法
% (7)信道译码:译(3); --错码率
% (8)信源译码:译(2)
% (9)信宿:得到一个一个模拟信号或数字信号,即:返原(1)
main-主函数
工程的主体代码,清晰可见的区分编码过程
其中信源的产生为了方便直接使用已经抽样了的正弦信号
% (1)信源:产生一个模拟信号或数字信号
%相当于信源编码里的抽样
t=0:2*pi/399:2*pi; %1个周期-400个点
x=sin(2*t); %2个周期,一个200点
len=length(t); %400
% (2)信源编码:任何一种压缩编码
socode=Sourcecode(t,x); %len-400行-8列
% (3)信道编码:任何一种纠错码(奇偶校验,分组码,等); --线性分组码
chcode=Channelcode(t,socode); %len-400行-12列
% % (4)-(6)调制与解调
% %2PSK+高斯白噪声模拟信道噪声+相干解调法
code=Moanddemodulation1(t,chcode,len);
% (7)信道译码:译(3); --错码率
chdecode=Channeldecode(t,code,len);
% (8)信源译码:译(2)
desocoding=Sourcedecode(t,chdecode);
1. 信源编码(Sourcecode)
对信源信号进行量化-编码处理,得到8位信源编码


function z=Sourcecode(t,x) %信源编码
%2.量化
A=87.6;
y=quantificat(x,A);
%3.编码
z=a_pcm(y);
figure(1)
subplot(4,1,1);plot(t,x);
axis([0 2*pi -1.2 1.2]);
xlabel('时间');ylabel('幅度');title('原始信号');
subplot(4,1,2);plot(t,y)
axis([0 2*pi -1.2 1.2]);
xlabel('时间');ylabel('幅度');title('A律量化后的信号');
figure(2)
subplot(2,1,1);
stem(x);
xlabel('抽样数');ylabel('幅度');title('抽样信号');
subplot(2,1,2);
stem(y);
xlabel('抽样数');ylabel('幅度');title('量化电平');
end
1.1 量化-A率13折线(quantificat)
使用非均匀量化,非均匀量化的实现方法通常在进行量化之前,先将信号抽样值压缩,再进行均匀量化.
使用A压缩率,根据书上公式取A=87.6,x为抽样信号得到量化电平y


function y=quantificat(x,A) %量化
a=1/A; %0.0114
for i=1:length(x)
if x(i)>=0
if(x(i)<=a)
y(i)=(A*x(i))/(1+log(A));
else
y(i)=(1+log(A*x(i)))/(1+log(A));
end
else
if(x(i)>=-a)
y(i)=-(A*-x(i))/( 1+log(A));
else
y(i)=-(1+log(A*-x(i)))/(1+log(A));
end
end
end
end
1.2 编码-4位码字16份(a_pcm)
采用脉冲编码调制法,二进制码选择折叠二进制码

在A律13折线 PCM编码中,共计:

需将每个样值脉冲(Is )编成 8位 二进制码:

极性码:表示样值的极性。正编“1”,负编“0”
段落码:表示样值的幅度所处的段落
段内码:16种可能状态对应代表各段内的16个量化级
根据序号分配图编码

function z=a_pcm(y) %编码
paragraphcode(y); %极性-段落码
pieceofcode(y); %段内码
function paragraphcode(y)
for i=1:length(y)
I=y(i)*2048; %转换为量化单位
%>--1,<--0
if I>0
z(i,1)=1; %极性码-正-1
else
z(i,1)=0; %极性码-负-0
I=-I;
end
if I>128
z(i,2)=1;
if I>512
z(i,3)=1;


3204

被折叠的 条评论
为什么被折叠?



