通信原理实验报告

更新时间:2024-04-09 19:40:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

学 院 专 业 学生姓名学 号 班级

通信原理实验报告

电子信息工程学院 通信工程

二〇一五年一月

实验一 FM 调制及解调

一、实验目的

1、运用所学知识实现对简单信号的调整和解调。

2、在对信号的幅度,频率等的调制中,掌握方法,观察调制波形。 3、了解MATLAB有关信号调用的子函数

二、基本原理

单音频信号

经FM调制后的表达式为 其中

同实验一中相仿,定义必要的仿真参数,在此基础上可得到载波信号和调制信号。根据

可得到频偏,由此可写出最终的FM信号的表达式进行仿真计

算。对FM信号进行傅里叶变换可得频谱特性,变换依旧使用实验一中给出的t2f.m函数。

三 仿真方案

四 、仿真代码

clear all

ts=0.001; %信号抽样时间间隔 t=0:ts:10-ts; %时间向量 fs=1/ts; %抽样频率

df=fs/length(t); ?t的频率分辨率

msg=randint(100,1,[-3,3],123); %生成消息序列,随机数种子为123 msg1=msg*ones(1,fs/10); %扩展成取样信号形式 msg2=reshape(msg1.',1,length(t)); Pm=fft(msg2)/fs; %求消息信号的频谱 f=-fs/2:df:fs/2-df; subplot(2,1,1)

plot(t,fftshift(abs(Pm))) title('消息信号频谱')

int_msg(1)=0; %消息信号积分 for ii=1:length(t)-1

int_msg(ii+1)=int_msg(ii)+msg2(ii)*ts; end kf=50;

fc=250; %载波频率

Sfm=cos(2*pi*fc*t+2*pi*kf*int_msg); %调频信号 Pfm=fft(Sfm)/fs; % FM信号频谱 subplot(2,1,2)

plot(f,fftshift(abs(Pfm))) % 画出已调信号频谱 title('FM信号频谱')

Pc=sum(abs(Sfm).^2)/length(Sfm) %已调信号功率 Ps=sum(abs(msg2).^2)/length(msg2) %消息信号功率 fm=50;

betaf=kf*max(msg)/fm % 调制指数 W=2*(betaf+1)*fm % 调制信号带宽

五、实验结果及分析

分析:Pc = 0.5000 Ps = 0.5000 betaf =1 W = 200

已调信号的功率:Pc =0.5007 消息信号的功率:Ps =0.4975 调制指数:betaf =1 调制信号的带宽:W =200

得出FM信号的解调采用的解调器是具有频率—电压转换特性的鉴频器,因而解调出的消息信号幅度是随着输入频率变化的。 如果调制信号通过AWGN信道,解调出的信号会叠加上噪声,而且是随着消息信号的幅度叠加的。

实验二 2PSK调制数字通信系统

一 、实验题目

设计一个采用2PSK调制的数字通信系统 1.设计系统整体框图及数学模型;

2.产生离散二进制信源,进行信道编码(汉明码),产生BPSK信号; 3.加入信道噪声(高斯白噪声); 4.BPSK信号相干解调,信道解码;

5.系统性能分析(信号波形、频谱,白噪声的波形、频谱,信道编解 二 实验基本原理

数字信号的传输方式分为基带传输和带通传输,在实际应用中,大多数信道具有带通特性而不能直接传输基带信号。为了使数字信号在带通信道中传输,必须使用数字基带信号对载波进行调制,以使信号与信道的特性相匹配。这种用数字基带信号控制载波,把数字基带信号变换为数字带通信号的过程称为数字调制。 数字调制技术的两种方法:①利用模拟调制的方法去实现数字式调制,即把数字调制看成是模拟调制的一个特例,把数字基带信号当做模拟信号的特殊情况处理;②利用数字信号的离散取值特点通过开关键控载波,从而实现数字调制。这种方法通常称为键控法,比如对载波的相位进行键控,便可获得相移键控(PSK)基本的调制方式。

图1 相应的信号波形的示例

调制原理

数字调相:如果两个频率相同的载波同时开始振荡,这两个频率同时达到正最大值,同时达到零值,同时达到负最大值,它们应处于\同相\状态;如果其中一个开始得迟了一点,就可能不相同了。如果一个达到正最大值时,另一个达到负最大值,则称为\反相\。一般把信号振荡一次(一周)作为360度。如果一个波比另一个波相差半个周期,我们说两个波的

相位差180度,也就是反相。当传输数字信号时,\码控制发0度相位,\码控制发180度相位。载波的初始相位就有了移动,也就带上了信息。

相移键控是利用载波的相位变化来传递数字信息,而振幅和频率保持不变。在2PSK中,通常用初始相位0和π分别表示二进制“1”和“0”。因此,2PSK信号的时域表达式为

解调原理

2PSK信号的解调方法是相干解调法。由于PSK信号本身就是利用相位传递信息的,所以在接收端必须利用信号的相位信息来解调信号。下图2-3中给出了一种2PSK信号相干接收设备的原理框图。图中经过带通滤波的信号在相乘器中与本地载波相乘,然后用低通滤波器滤除高频分量,在进行抽样判决。判决器是按极性来判决的。即正抽样值判为1,负抽样值判为0.

2PSK信号相干解调各点时间波形如图所示. 当恢复的相干载波产生180°倒相时,解调出的数字基带信号将与发送的数字基带信号正好是相反,解调器输出数字基带信号全部出错.

2PSK信号相干解调各点时间波形

这种现象通常称为\倒π\现象.由于在2PSK信号的载波恢复过程中存在着180°的相位模糊,所以2PSK信号的相干解调存在随机的\倒π\现象,从而使得2PSK方式在实际中很少采用.

三 、仿真边框图

四 、程序源代码

clear all; close all; clc;

max = 15;

s=randint(1,max); %长度为max的随机二进制序列 Sinput=[];

for n=1:length(s); if s(n)==0;

A=zeros(1,2000); else s(n)==1;

A=ones(1,2000); end

Sinput=[Sinput A]; end figure(1);

subplot(211); plot(Sinput); grid on

axis([0 2000*length(s) -2 2]); title('输入信号波形');

Sbianma=encode (s,7,4,'hamming'); %汉明码编码后序列 a1=[]; b1=[]; f=1000;

t=0:2*pi/1999:2*pi;

for n=1:length(Sbianma); if Sbianma(n)==0;

B=zeros(1,2000); %每个值2000个点 else Sbianma(n)==1;

B=ones(1,2000); end

a1=[a1 B]; %s(t),码元宽度2000 c=cos(2*pi*f*t); %载波信号

b1=[b1 c]; %与s(t)等长的载波信号,变为矩阵形式end

figure(2);

subplot(211) plot(a1); grid on;

axis([0 2000*length(Sbianma) -2 2]); title('编码后二进制信号序列'); a2=[]; b2=[];

for n = 1:length(Sbianma); if Sbianma(n) == 0;

C = ones(1,2000); %每个值2000点 d = cos(2*pi*f*t); %载波信号 else Sbianma(n) == 1; C = ones(1,2000);

d = cos(2*pi*f*t+pi); %载波信号 end

a2 = [a2 C]; %s(t),码元宽度2000 b2 = [b2 d]; %与s(t)等长的载波信号 end

tiaoz = a2.*b2; %e(t)调制 figure(3); subplot(211); plot(tiaoz); grid on;

axis([0 2000*length(Sbianma) -2 2]); title('2psk已调制信号'); figure(2); subplot(212); plot(abs(fft(a1)));

axis([0 2000*length(Sbianma) 0 400]); title('编码后二进制信号序列频谱');

figure(3); subplot(212);

plot(abs(fft(tiaoz)));

axis([0 2000*length(Sbianma) 0 400]); title('2psk信号频谱')

%-----------------带有高斯白噪声的信道----------------------

tz=awgn(tiaoz,10); %信号tiaoz加入白噪声,信噪比为10 figure(4);

subplot(211); plot(tz); grid on

axis([0 2000*length(Sbianma) -2 2]); title('通过高斯白噪声后的信号'); figure(4); subplot(212); plot(abs(fft(tz)));

axis([0 2000*length(Sbianma) 0 800]); title('加入白噪声的2psk信号频谱');

%-------------------同步解调----------------------------- jiet=2*b1.*tz; %同步解调 figure(5);

subplot(211);plot(jiet); grid on

axis([0 2000*length(Sbianma) -2 2]);title('相乘后的信号波形') figure(5);

subplot(212); plot(abs(fft(jiet)));

axis([0 2000*length(Sbianma) 0 800]); title('相乘后的信号频率');

%----------------------低通滤波器--------------------------- fp=500; fs=700; rp=3; rs=20; fn=11025;

ws=fs/(fn/2);

wp=fp/(fn/2);%计算归一化角频率

[n,wn]=buttord(wp,ws,rp,rs); %计算阶数和截止频率 [b,a]=butter(n,wn); %计算H(z) figure(6);

freqz(b,a,1000,11025); subplot(211);

axis([0 40000 -100 3]) title('lpf频谱图'); jt=filter(b,a,jiet); figure(7); subplot(211); plot(jt); grid on

axis([0 2000*length(Sbianma) -2 2 ]); title('经低通滤波器后的信号波形'); figure(7);

subplot(212); plot(abs(fft(jt)));

axis([0 2000*length(Sbianma) 0 800]); title('经低通滤波器后的信号频率');

%-----------------------抽样判决-------------------------- for m=1:2000*length(Sbianma); if jt(m)<0; jt(m)=1; else jt(m)>0; jt(m)=0; end end figure(8);

subplot(211); plot(jt) grid on

axis([0 2000*length(Sbianma) -2 2]); title('经抽样判决后信号jt(t)波形') figure(8); subplot(212); plot(abs(fft(jt)));

axis([0 2000*length(Sbianma) 0 800]); title('经抽样判决后的信号频谱'); grid on;

n=500:2000:2000*length(Sbianma); a5=[];

a5=[a5 jt(n)];

s1=decode (a5,7,4,'hamming'); a6=[];

for n=1:length(s1); if s1(n)==0;

G=zeros(1,2000); else s1(n)==1; G=ones(1,2000); end

a6=[a6 G]; end figure(1);

subplot(212); plot(a6); grid on

axis([0 2000*length(s) -2 2]); title('汉明码译码后的波形') grid on

%------------------2psk误码率仿真-------------------------

snrdB_min=-10; snrdB_max=10;

snrdB=snrdB_min:1:snrdB_max; Nsymbols=200; snr=10.^(snrdB/10);

h=waitbar(0,'SNR Iteration'); len_snr=length(snrdB); for j=1:len_snr

waitbar(j/len_snr);

sigma=sqrt(1/(2*snr(j))); error_count=0; for k=1:Nsymbols

d=round(rand(1)); %随即数据

x_d=2*d-1; %0,1分别转化为-1,1 n_d=sigma*randn(1); %加噪

y_d=x_d+n_d; %加噪后接收 if y_d>0 d_est=1; else

d_est=0; end

if(d_est~=d)

error_count=error_count+1; end end

errors(j)=error_count; end ber_sim=errors/Nsymbols;

ber_theor=(erfc(sqrt(snr))).*(1-0.5*erfc(sqrt(snr))); figure(9);

semilogy(snrdB,ber_theor,'-',snrdB,ber_sim,'*'); axis([snrdB_min snrdB_max 0.0001 1]); xlabel('信噪比'); ylabel('误码率'); title('2psk信噪比误码率关系图'); legend('理论值','实际值') 五 、实验结果及分析

实验四 PCM实验

一、实验目的

1、 通过本课程设计,巩固通信原理PCM编码的有关知识; 2、 熟悉A 3、 确定PCM编码量化误差;

4、 学会用MATLAB来进行通信系统仿真。 二、实验原理

脉冲编码调制(PCM,Pulse Code Modulation)在通信系统中完成将语音信号数字化功能。是一种对模拟信号数字化的取样技术,将模拟信号变换为数字信号的编码方式,特别是对于音频信号。PCM 对信号每秒钟取样 8000 次;每次取样为8个位,总共64kbps。PCM的实现主要包括三个步骤完成:抽样、量化、编码。分别完成时间上离散、幅度上离散、及量化信号的二进制表示。根据CCITT的建议,为改善小信号量化性能,采用压扩非均匀量化,有两种建议方式,分别为AA律方式。

由于A律压缩实现复杂,常使用13折线法编码,采用非均匀量化PCM编码示意图如图1所示。

三、程序源代码

clear all; t=0:0.01:5;

m=sin(2*pi*t+2*pi*rand(1)); v=1; mm=m/v;

smm=floor(mm*2048); subplot(4,1,1); plot(t,m); ylim([-2 2]);

y1=pcm_encode(smm); y2=pcm_decode(y1,v) subplot(4,1,2); plot(t,y2); ylim([-1 1]);

x=6*0.5*sin(2*pi*t+2*pi*rand(1)); xx=x/(6*0.5); v=6*0.5;

sxx=floor(xx*2048); y=pcm_encode(sxx); yy=pcm_decode(y,v);

nq=sum((x-yy).*(x-yy))/length(x);

sq=mean(yy.^2); snr=(sq/nq);

snrq=10*log10(mean(snr)) subplot(4,1,3); plot(t,x);

subplot(4,1,4); plot(t,yy);

函数一

pcm_encode.m

function [out]=pcm_encode(x) %x encode to pcm code n=length(x); %-40960

out(i,1)=1;%符号位 else

out(i,1)=0;%符号位 end

if abs(x(i))>=0&abs(x(i))<32

out(i,2)=0;out(i,3)=0;out(i,4)=0;step=2;st=0; elseif 32<=abs(x(i))&abs(x(i))<64

out(i,2)=0;out(i,3)=0;out(i,4)=1;step=2;st=32; elseif 64<=abs(x(i))&abs(x(i))<128

out(i,2)=0;out(i,3)=1;out(i,4)=0;step=4;st=64; elseif 128<=abs(x(i))&abs(x(i))<256

out(i,2)=0;out(i,3)=1;out(i,4)=1;step=8;st=128; elseif 256<=abs(x(i))&abs(x(i))<512

out(i,2)=1;out(i,3)=0;out(i,4)=0;step=16;st=256; elseif 512<=abs(x(i))&abs(x(i))<1024

out(i,2)=1;out(i,3)=0;out(i,4)=1;step=32;st=512; elseif 1024<=abs(x(i))&abs(x(i))<2048

out(i,2)=1;out(i,3)=1;out(i,4)=0;step=64;st=1024; elseif 2048<=abs(x(i))&abs(x(i))<4096

out(i,2)=1;out(i,3)=1;out(i,4)=1;step=128;st=2048; else

out(i,2)=1;out(i,3)=1;out(i,4)=1;step=128;st=2048; end

if (abs(x(i))>=4096)

out(i,2:8)=[1 1 1 1 1 1 1]; else

tmp=floor((abs(x(i))-st)/step);

t=dec2bin(tmp,4)-48; %函数dec2bin输出的是ASCII字符串,48对应0

out(i,5:8)=t(1:4); end end

out=reshape(out',1,8*n);%行变列

函数二

pcm_decode.m

function [out]=pcm_decode(in,v) Tcode the input pcm code

%in:input the pcm code 8 bits sample %v:quantized level n=length(in);

in=reshape(in',8,n/8)';%列变行 slot(1)=0; slot(2)=32; slot(3)=64; slot(4)=128; slot(5)=256; slot(6)=512; slot(7)=1024; slot(8)=2048;

step(1)=2; step(2)=2; step(3)=4; step(4)=8;

step(5)=16; step(6)=32; step(7)=64; step(8)=128;

for i=1:n/8

ss=2*in(i,1)-1;%+1 -1

tmp=in(i,2)*4+in(i,3)*2+in(i,4)+1;%2进制转换10进制 st=slot(tmp);

dt=(in(i,5)*8+in(i,6)*4+in(i,7)*2+in(i,8))*step(tmp)+0.5*step(tmp); out(i)=ss*(st+dt)/4096*v; end

四、实验结果及分析

五、设计总结

通过本课程设计的学习,复习所学的专业知识,使课堂学习的理论知识应用于实践,通过本课程设计的实践使自己具有一定的实践操作能力;又掌握Matlab,并能熟练运用该软件设计并仿真通信系统;通过信息处理实践的课程设计的实践,掌握设计信息处理系统的思维方法和基本开发过程。通过Matlab仿真对PCM调制系统的采样、量化、编码的仿真与计算,使得分析PCM调制系统变得直观简单。

实验五 循环码实验

一、实验目的

1、通过实验了解循环码的工作原理。

2、深刻理解RS 码构造、RS 编译码等相关概念和算法。 二、实验原理

1、RS循环码编译码原理与特点 设C使

线性分组码的码字集合,如果对任它的

循环移位也属于C,则称该码为循环码。

该码在结构上有另外的限制,即一个码字任意循环移位的结果仍是一个有效码字。其特点是:(1)可以用反馈移位寄存器很容易实现编码和伴随式的计算;(2)由于循环码有很多固有的代数结构,从而可以找到各种简单使用的译码办法。 如果一个

线性码具有以下的属性,则称为循环码:如果n元组

是子空间S的一个码字,则经过循环移位得到的

中的一个码字;或者,一般来说,经过j次循环移位后得到的

也是S中的一个码字。

S

RS码的编码系统是建立在比特组基础上的,即字节,而不是单个的0和1,因此它是非二进制BCH码,这使得它处理突发错误的能力特别强。

循环码特点有:

1)循环码是线性分组码的一种,所以它具有线性分组的码的一般特性,且具有循环性,纠错能力强。

2)循环码是一种无权码,循环码编排的特点为相邻的两个数码之间符合卡诺中的邻接条件,即相邻数码间只有一位码元不同,因此它具有一个很好的优点是它满足邻接条件,没有瞬时错误(在数码变换过程中,在速度上会有快有慢,中间经过其他一些数码形式,即为瞬时错误)。

3)码字的循环特性,循环码中任一许用码经过牡环移位后,所得到的码组仍然是许用码组。 对所有的i=0,1,2,……k-1,用生成多项式g(x)

三、程序源代码

,有:

m = 3;

n = 2^m-1; %定义码长 k = n-m; %信息位长

msg = randint(k*4,1,2); %随机提取信号,引起一致地分布的任意整数矩阵 subplot(2,2,1) stem(msg)

title('编码器输入信号')

p=cyclpoly(n,k) %循环码生成多项式,n=7,k=4

code = encode(msg,n,k,'cyclic',p); %编码函数,对信号进行差错编码 subplot(2,2,2) stem(code)

title('编码器输出信号')

recode=decode(code,n,k,'cyclic',p) %对信号进行译码,对接收到的码字进行译码,恢复出原始的信息,译码参数和方式必须和编码时采用的严格相同 subplot(2,2,3)

stem(recode)

title('译码器输出信号') t=-1:0.01:1;

x=recode; %将recode赋值给x,并进行长度与fft设定 N=length(x); fx=fft(x); df=100/N; n=0:N/2; f=n*df;

subplot(2,2,4);

plot(f,abs(fx(n+1))*2/N); grid; title('频谱图')

四、实验结果及分析

以randint函数重新做一个输入信号并进行编码,结果与上例相似,输入与输出一致。 由上面所有的图可以发现,编码器输入信号并不完全相同,因为对信号的提取是随机的,所以码元也是随机的,信号经过编码器后,因为要加入监督码,所以波形变得更加密集了。信号经过译码后,波形和编码器输入信号大致相同,说明循环码的检错和纠错能力可以。

stem(recode)

title('译码器输出信号') t=-1:0.01:1;

x=recode; %将recode赋值给x,并进行长度与fft设定 N=length(x); fx=fft(x); df=100/N; n=0:N/2; f=n*df;

subplot(2,2,4);

plot(f,abs(fx(n+1))*2/N); grid; title('频谱图')

四、实验结果及分析

以randint函数重新做一个输入信号并进行编码,结果与上例相似,输入与输出一致。 由上面所有的图可以发现,编码器输入信号并不完全相同,因为对信号的提取是随机的,所以码元也是随机的,信号经过编码器后,因为要加入监督码,所以波形变得更加密集了。信号经过译码后,波形和编码器输入信号大致相同,说明循环码的检错和纠错能力可以。

本文来源:https://www.bwwdw.com/article/d16r.html

Top