通信系统课群综合训练与设计-PCM、CMI、汉明码、ASK、衰落信道

news/2025/2/5 5:30:02/

断更了很久,一方面是因为之后开始准备期末考试和课程设计,另一方面也是因为自己因为放假堕落了(好吧,这个是主要原因)。
课程设计做了挺久,整合了很多,参考了不少内容才做出来。服务学弟学妹了,就把我的这个发出来好了。
其中,信源为自己构造的时间函数,数字化方式为PCM编码,基带码为CMI码,信道码为汉明码,调制方式为ASK调制与解调,信道类型为衰落信道,接收端与发送端对应。

1.main函数
%empty the processing
clc;
close all;
clear all;%original signal
clear;
fs=8000;%抽样频率
fc=100;
dt=1/fs;
Ts=dt;
t=0:dt:0.02-dt;
y=0.3*cos(2*pi*fc*t)+0.5*sin(4*pi*fc*t)+0.2*sin(8*pi*fc*t);%输入模拟信号
figure(1);
plot(t,y);
ylim([-2,2]);
title('源信号');%PCM modulation
n=length(t);
y_PCM=PCMENC2(y,n);
figure(2);
stairs(y_PCM);
%zoom xon;
xlim([0 100]);
ylim([-0.2,1.2]);
title('PCM编码信号');%CMI modulation
y_CMI = CMI_coding(y_PCM) ;
t2 = 0:Ts:41*Ts;
figure(3)
stairs(y_CMI);
xlim([0 200]);
ylim([-0.2 1.2]);
%zoom xon;axis([0 length(y_CMI) -0.2 1.2]);
title('CMI编码信号');%Hamming modulation
y_Hamming=encode(y_CMI,7,4,'hamming') ;
figure(4)              
stairs(y_Hamming);
xlim([0 200]);
ylim([-0.2 1.2]);
%zoom xon;axis([0 length(y_Hamming) -0.2 1.2]);
title('Hamming编码');%ASK modulaiton and rayleigh channel
y_DASK = ASK(y_Hamming);%Hamming demodulation
y_DHamming=decode(y_DASK,7,4,'hamming'); 
figure(8)
stairs(y_DHamming);
xlim([0 200]);
ylim([-0.2 1.2]);
%zoom xon;axis([0 length(y_DHamming) -0.2 1.2]);
title('Hammming译码输出信号(CMI)');%CMI demodulation
y_DCMI = CMI_decoding(y_DHamming);
figure(9)
stairs(y_DCMI);
xlim([0 100]);
ylim([-0.2 1.2]);
%zoom xon;axis([0 length(y_DCMI) -0.2 1.2]);
title('CMI译码输出信号(PCM信号)');%PCM demodulation
y_DPCM=PCMDEC2(y_DCMI,n);
figure(10);
plot(t,y_DPCM);
ylim([-2 2]);
title('解码输出');%original signal modulation
figure(11)
plot(t,y);ylim([-2 2]);hold on;
plot(t,y_DPCM);ylim([-2 2]);
title('发送和接收信号对比,蓝色为源信号,红色为接收信号');%signal distortion
di=0;
for k=1:nd=(y(k)-y_DPCM(k))^2/n;di=di+d;
end
di=sqrt(di);
disp('失真度为 '); 
disp(di);2.PCM编码函数
function a=PCMENC2(y,n)                      %S为输入信号
a=zeros(1,8*n);
for i=1:na(8*(i-1)+1)=(sign(y(i))+1)/2;s=round(abs(y(i))*2047);if s<16a(8*(i-1)+2:8*(i-1)+4)=[0 0 0];temp=0;del=1;elseif s<32a(8*(i-1)+2:8*(i-1)+4)=[0 0 1];temp=16;del=1;elseif s<64a(8*(i-1)+2:8*(i-1)+4)=[0 1 0];temp=32;del=2;elseif s<128a(8*(i-1)+2:8*(i-1)+4)=[0 1 1];temp=64;del=4;elseif s<256a(8*(i-1)+2:8*(i-1)+4)=[1 0 0];temp=128;del=8;elseif s<512a(8*(i-1)+2:8*(i-1)+4)=[1 0 1];temp=256;del=16;elseif s<1024a(8*(i-1)+2:8*(i-1)+4)=[1 1 0];temp=512;del=32;elseif s<2048a(8*(i-1)+2:8*(i-1)+4)=[1 1 1];temp=1024;del=64;endb=zeros(1,4);m=4;s1=fix((s-temp)/del);while s1>0b(1,m)=mod(s1,2);s1=(s1-b(1,m))/2;m=m-1;enda(8*(i-1)+5:8*i)=b;
end3.CMI编码函数
function y = CMI_coding(y1)a=reshape(y1',1,numel(y1));
n=0;
m=1;
b=zeros(1,length(a));
c=zeros(1,length(a));
for k=1:length(a)m=mod(n,2);   %CMI编码结果“00”和“11”交替的判决语句;if (a(k)==0)  %如果输入码为“0”,则进行下一步;b(k)=0;   %CMI编码输出的前一位为“0”;c(k)=1;   %CMI编码输出的后一位为“1”;endif (a(k)==0)continue;endif (a(k)==1 && m==1)  %如果输入码为“1”且判决码为1,则进行下一步;b(k)=1;           %CMI编码输出的前一位为“1”;c(k)=1;           %CMI编码输出的后一位为“1”;n=n+1;           %判决辅助码加“1”endif (a(k)==1 && m==0)    %如果输入码为“1”且判决码为0,则进行下一步;b(k)=0;            %CMI编码输出的前一位为“0”;c(k)=0;            %CMI编码输出的后一位为“0”;n=n+1;            %判决辅助码加“1”endend%display('Display encode result:');
y=zeros(1,2*length(a));
for k=1:length(a)if (b(k)==1 &&c(k)==1)     %如果编码后的前一位和后一位都为“1”,则进行下一步;y(1,2*k-1)=1;y(1,2*k)=1;%fprintf('   1 1   ') ;   %CMI编码输出为"11";else if (b(k)==0 &&c(k)==0)   %如果编码后的前一位和后一位都为“0”,则进行下一步;y(1,2*k-1)=0;y(1,2*k)=0;    %fprintf('   0 0   ') ; %CMI编码输出为"00";else y(1,2*k-1)=0;y(1,2*k)=1;      % fprintf('   0 1   ') ;  %CMI编码输出为"01";endend
end4.ASK编译码函数及衰落信道
function  y_DASK =ASK(code)codn=length(code);
fc=10;
fs=fc*6;
code_len=8;
for i=1:codn                 % 产生数字基带信号x((i-1)*code_len+1:code_len*i)=code(i);
end
car=cos(2*pi*fc/fs*(0:length(x)-1)); 
y_ASK=x.*car;
figure(5);
plot(y_ASK);
xlim([0 800]);
ylim([-5 5]);
%zoom xon;axis([0 length(y_ASK) -1.2 1.2]);
title('ASK调制信号');%衰落信道
%y_rayleigh=Rayleigh(y_ASK);
%figure(6);
%plot(y_rayleigh);zoom xon;
%axis([0 800 -2 2]); 
%axis([0 length(y_rayleigh) -2 2]); 
%title('衰落信道'); 
chan=rayleighchan(1/15000,0);
%1/15000代表我们的采样频率,也就是我一个点代表的是多长一段时间单位。
%0就是最大多普勒频移
y_rayleigh=filter(chan,y_ASK);
figure(6);
plot(abs(y_rayleigh));zoom xon;
axis([0 800 -5 5]); 
%axis([0 length(y_rayleigh) -5 5]); 
title('衰落信道'); %解调
yn3=y_rayleigh.*car;
for i=1:length(yn3)if(yn3(i)>=0.02)yn3(i)=1;else yn3(i)=0;end
end
y_DASK=zeros(1,codn);
i1=1;
for i=1:8:length(yn3)y_DASK(i1)=yn3(i);i1=i1+1;
end
figure(7);
%plot(y_DASK);
stairs(y_DASK);
xlim([0 200]);
ylim([-0.2 1.2]);
%zoom xon;axis([0 length(y_DASK) -0.2 1.2]);
title('ASK解调信号(Hamming)');5.CMI译码函数
function y_DCMI=CMI_decoding(y)a=reshape(y',1,numel(y)); 
b=zeros(1,length(a)/2); 
for i=1:length(a)/2 b(i)=a(i*2-1);
end
c=zeros(1,length(a)/2);   
for i=1:length(a)/2 c(i)=a(i*2);
end
y_DCMI=zeros(1,length(a)/2);     
%display('Display decode result:');
for k=1:length(a)/2if(b(k)==1 &&c(k)==1)          %如果CMI码的前序列和后序列为"1",则运行下一步;y_DCMI(k)=1;%fprintf(' 1 '); %输出显示"1";endif (b(k)==0 &&c(k)==0)         %如果CMI码的前序列和后序列都为"0",则运行下一步;y_DCMI(k)=1;%fprintf(' 1  ');  %输出显示"1";endif (b(k)==0 &&c(k)==1)        %如果CMI码的前序列为"0"且后序列为"1",则运行下一步;y_DCMI(k)=0;%fprintf(' 0  ');        %输出显示"0";end
end6.PCM译码函数
function b=PCMDEC2(code,n)for i=1:nif code(8*(i-1)+2:8*(i-1)+4)==[0 0 0]temp=0;del=1;elseif code(8*(i-1)+2:8*(i-1)+4)==[0 0 1]temp=16;del=1;elseif code(8*(i-1)+2:8*(i-1)+4)==[0 1 0]temp=32;del=2;elseif code(8*(i-1)+2:8*(i-1)+4)==[0 1 1]temp=64;del=4;elseif code(8*(i-1)+2:8*(i-1)+4)==[1 0 0]temp=128;del=8;elseif code(8*(i-1)+2:8*(i-1)+4)==[1 0 1]temp=256;del=16;elseif code(8*(i-1)+2:8*(i-1)+4)==[1 1 0]temp=512;del=32;elseif code(8*(i-1)+2:8*(i-1)+4)==[1 1 1]temp=1024;del=64;endb1=0;for m=5:8b1=2*b1+code(8*(i-1)+m);endb(i)=(2*code(8*(i-1)+1)-1)*round(temp+(b1+0.5)*del)/2047;
end

http://www.ppmy.cn/news/568511.html

相关文章

计算机网络--网络编程(1)

简单认识一下传输层中的UDP和TCP&#xff1a; TCP&#xff1a;有链接&#xff0c;可靠传输&#xff0c;面向字节流&#xff0c;全双工 UDP&#xff1a;无连接&#xff0c;不可靠传输&#xff0c;面向数据报&#xff0c;全双工 有链接类似于打电话&#xff0c;通了就是有链接。…

CN2,GIA,CIA,BGP,CMI以及IPLC都是什么意思?

CN2&#xff0c;GIA&#xff0c;CIA&#xff0c;BGP&#xff0c;CMI以及IPLC都是什么意思&#xff1f; 什么是CN2线路&#xff1f; CN2全称为中国电信下一代承载网&#xff0c;英文Chinatelecom Next Carrier Network&#xff0c;缩写为CNCN&#xff0c;进一步缩写为CN2&#x…

MATLAB:绘制用户给定的01序列图并计算其对应的AMI编码,双相编码和CMI编码

下面这段代码是由5个自定义函数组成 第一个自定义函数是为了获取用户的输入&#xff0c;也就是01序列 第二个自定义函数绘制出用户输入的01序列图 第三个和第四个和第五个自定义函数分别求该序列的AMI编码&#xff0c;双相编码和CMI编码 采用的编译器是2014a function return…

mcbbs mysql数据库_我的世界服务器CMI - 多功能基础插件 - 永久更新

价值15欧的插件 仅展示部分特色功能&#xff0c;欲了解全部功能请参“https://www.mcbbs.net/”部分 可显示物品图标的悬浮字系统 PlaceholderAPI变量支持 木牌编辑 通过指令修改木牌内容 传送门系统 自由设置传送目标点&#xff0c;可设置通过传送门执行控制台指令 镜像仿建 适…

计算机支持教学管理任务各种应用,CMI是什么东西?

满意答案 dwpa6r8irf8 2013.03.31 采纳率&#xff1a;53% 等级&#xff1a;12 已帮助&#xff1a;10511人 一、医药类&#xff1a;CMI的含义 CMI是消费者用药信息Customer Medicine Information的英文缩写。是为消费者攥写通俗易懂的医药信息&#xff0c;也就是编制CMI&…

Verilog 代码编写 FPGA 数字CMI编码

题目&#xff1a; 试用 FPGA 实现如下 32bit 数据 32‘hCA535A7E 的 CMI 码&#xff0c;FPGA 输入时钟 30M&#xff0c;码流输出时钟为 5M&#xff0c;给出代码并仿真。 分析&#xff1a; 为了提高通信系统的有效性&#xff0c;一般需要对将要发送的数据进行 信源编码 &…

cmi编码实验_实验二 - 光纤通信系统线路码型CMI - 编译码实验 - 图文 -

实验二 光纤通信系统线路码型CMI 编译码实验 一、实验目的 1、了解线路码型在光纤传输系统中的作用 2、掌握线路码型CMI码的编译码过程以及电路实现原理 二、实验内容 1、验证符合光纤传输系统的线路码型 2、观察线路码型的编译码过程 三、实验仪器 1、ZY12OFCom23BH1型光纤通信…

cmi计算机管理教学全称,计算机管理教学(CMI)的设计和进展.pdf

2013 年第 5 期 信息通信 2013 (总第 127 期) INFORMATION & COMMUNICATIONS (Sum. No 127) ( ) 计算机管理教学CMI 的设计和进展 李志鹏 公安消防部队昆明指挥学校教务处,云南昆明650208 ) 摘要:计算机管理教学又称CMI ,在计算机辅助教学日益广泛的今天,其发展和应用也…