通信原理软件实验
实验报告
班级:
姓名:
班内序号:
学号:
电话 :
北 京 邮 电 大 学
Beijing University of Posts and Telecommunications
【实验目的】
本实验是“通信原理”的一个组成部分。在本实验中我们使用的软件工具是 MATLAB。
设计本实验的目的是希望你在以下几方面有所收获;
1 、会 MATLAB 软件的最基本运用。
MATLAB 是一种很实用的数学软件,它易学易用。MATLAB 对于许多的通信仿真类问题来说是
比较合适的。
2、了解计算机仿真的基本原理及方法,知道怎样通过仿真的方法去研究通信问题。
3、加深对通信原理课有关内容的理解。
【实验任务】
1、掌握 matlab 的基本操作及了解基本的仿真方法,分析运行范例程序。
2、按以下要求编制仿真程序并调试运行,其中第四项为可选内容
(1)绘出正弦信号波形及频谱
(2)单极性归零(RZ)波形及其功率谱,占空比为 50%
(3)升余弦滚降波形的眼图及其功率谱。滚降系数为 0.5。发送码元取值为 0、2。
(4)最佳基带系统的 Pe~Eb\No 曲线,升余弦滚降系数 a=0.5,取样值的偏差是 Ts/4。
( 5 ) Pe~Eb\No , 升 余 弦 滚 降 系 数 a=0.5 , 取 样 时 间 无 偏 差 , 但 信 道 是 多 径 信 道 ,
C(f)=abs(1-0.5*exp(-j*2*pi*f*dt)),dt=Ts/2。
(6)仿真数字基带传输系统,包括输入、输出信号波形及其功率谱,眼图(升余弦滚降系
数 a=0.5),Pe~Eb\No 曲线,取样时间无偏差。
(7)自选题(部分相应系统、模拟调制、数字频带传输)。
【实验原理】
从数学的角度来看,信息从一地传送到另一地的整个过程或者其各个环节不外乎是一些
码或信号的变换过程。例如信源压缩编码、纠错编码、AMI 编码、扰码等属于码层次上的变
换,而基带成形、滤波、调制等则是信号层次上的。码的变换是易于用软件来仿真的。要仿
真信号的变换,必须解决信号与信号系统在软件中表示的问题。
时域取样及频域取样
一般来说,任意信号 s t( ) 是定义在时间区间
,
上的连续函数,但所有计算机的
CPU 都只能按指令周期离散运行,同时计算机也不能处理
,
这样一个时间段。即计
算机处理信号是离散运行,有限域的。
对 s(t)的解决方法:我们把 s t( ) 按区间
T
2
, T
2
截短为 s
tT ( ) ,再对
sT 按时间间隔
)(t
t 均匀取样得到
T
t
个样值。仿真时我们用这个样值集合来表示信号 s t( ) 。这样,将会出
现一系列新的问题,现在从频域分析其频谱的变化。显然 t 反映了仿真系统对信号波形的
分辨率, t 越小则仿真的精确度越高。据通信原理所学,信号被取样以后的频谱是频率的
周期函数,其重将(-inf, inf)截短为[-T/2,T/2],再将[-T/2,T/2]的信号均匀采样,采样点
数为 N=T/dt
1.采样信号 xs(i)及其频谱 Xs(ω)
若连续时间信号 x(t)被数采卡 DAQ 中的采样器以等时间间隔 T 采样,则采样时刻 0、T、
2T…所
取得信号 x(t)的瞬时值,就构成了连续信号 x(t)的离散时间序列 xs(i),i=0、1、2…
如下图所示。图一:连续信号与离散信号
当 x(t)的频谱为 X(ω)时,则 xs(i)的频谱 Xs(ω),如下图所示。
为保证不出现频率混叠失真,要求:
取
Bs
1
2
1
t
Hf
2
2
H
t
1
t
Bs 定义为仿真系统的带宽。
即
2
Hf
,
从以上的推导可以看出:信号的时间采样间隔一定,则仿真信号的带宽也就相应定了,
反之仿真信号的带宽一定,则信号的时间采样间隔也就相应定了。
2 对频谱 S(f)的处理
将频域为无限域的频域信号 S(f)截短为[-Bs,Bs]域的信号
S sB
( f
)
,再将带宽为[-Bs,
Bs]的信号
S sB
( f
)
均匀采样,采样点数为 Nf=2Bs/df。
为保证不出现时域波形重叠失真,要求
1
f
T
, 取
1
t
T
, 即
T
1
f
从以上的推导可以看出:信号的频率采样间隔一定,则仿真信号的周期也就相应定了,
反之仿真信号的周期一定,则信号的频率采样间隔也就相应定了。
下面我们看看时域取样点数和频域取样点数的关系:
时域取样点数:
将
T
1
f
带入
N
t
T
t
,
得
N
t
1
t
f
频域取样点数:
将
B
s
1
2
t
带入
N
f
s
2
B
f
,
得
N
f
1
t
f
所以,时域取样点数与频域取样点数取值相同,这样就可以保证连续时间信号及连续频
率信号均不出现重叠失真。
以上是防止重叠失真。
另 外 , 为 了 提 高 仿 真 精 度 , 要 求 提 高 取 样 点 数 N , 其 取 值 为 2 的 冪 次 ,
N
k
,2
k
,2,1,0
为了处理上的方便,我们今后规定采样点数 N 为 2 的整幂。举例来说,假如设计要求的系统
带宽为 1MHz,频域最小分辨率为 10KHz。那么据此可求得 ,取 。对应的其它参数为 , ,,。
频域分析
限于篇幅,我们将不向大家介绍 MATLAB 中关于傅里叶变换的有关函数。为了方便仿真,我
们利用 MATLAB 的提供的函数编写了两个函数 t2f 及 f2t。t2f 的功能是作傅氏变换,f2t 的
功能是作傅氏反变换,它们的引用格式分别为 X=t2f(x)及 x=f2t(X),其中 x 是时域信号 截
短并采样所得的取样值矢量,X 是对 的傅氏变换 截短并采样所得的取样值矢量。这两个函
数存放在\...\matlab\work\目录中。
我们关心的另一个指标是信号的功率谱密度,任意信号 的功率谱的定义是 ,其中 是 截短
后的傅氏变换, 是 的能量谱, 是 在截短时间内的功率谱。对于仿真系统,若 x 是时域取
样值矢量,X 是对应的傅氏变换,那么 x 的功率谱便为矢量 P=(X.*conj(X))/T。
3.随机信号的产生
高斯噪声的产生
由于函数 randn(1,N)产生 N 个互不相关的、均值为零、方差为 1 的高斯随机数,所以可用
它来产生白高斯噪声。设仿真系统的取样点数是 N,系统带宽为 ,矢量 x=n0*Bs*randn(1,N)
的总功率为 n0*Bs,最高频率分量为 Bs,并且各样点的值互不相关,故它代表双边功率谱密
度为 的白噪声。
4.随机码序列的产生
语句 round(rand(1,M))产生 M 个取值 1、0 等概的随机码。函数 round 表示四舍五入。函数
rand 产生均匀分布于区间 的随机数。
语句 sign(randn(1,M))产生 M 个取值 1 等概的随机码。函数 sign(x)对矢量 x 的元素取正
负号,而高斯数 randn 取正负值的概率是相等的.
5.数字基带传输系统
6.产生随机码序列矢量 a。
为了方便起见,我们规定 a 的长度 M 是 2 的整幂。
1) 产生冲击序列信号 。
设矢量 imp 代表信号 。imp 可如下产生:
imp=zeros(1,N);
imp(1:L:N)=a/dt;
其中 N 是 imp 的矢量长度,M 是码元矢量 a 中的码元数,L 是每码元内的样点数。我们
规定 M、N 都是 2 的整幂,于是 L 自然也是 2 的整幂。
3) 产生数字信号
设矢量 s 代表数字信号 ,矢量 g 代表脉冲波形 ,矢量 G 代表其频谱 。那么 s 的产生方法
是:
s=conv(imp,g);
其中,函数 conv 表示卷击。卷击后 s 的长度是 length(imp)+length(g)-1。扣除延迟
时间及拖尾时间收,数字信号为:
ii=find(g==max(g));
s=s([1:N]+ii(1));
也可用频域的方法产生数字信号 :
s=f2t(t2f(imp).*G);
注意此时,imp 的点数应与 g 或 G 相同。若 g 的宽度小于 imp,则应用零补齐。
7.NRZ 及 RZ 信号的产生
对于采用归零(RZ)及不归零(NRZ)矩形脉冲波形的数字信号,可以用简单的方法信号矢
量 s。设 a 是码元矢量,N 是总取样点数,M 是总码元数,L 是每个码元内的点数,那么 NRZ
信号可这样获得:
s=zeros(1,N);
for ii=1:L, s(ii+[0:M-1]*L)=a;,end
对于,若 Rt 是要求的占空比,dt 是仿真系统的时域采样间隔,则 RZ 信号的产生方法是
s=zeros(1,N);
for ii=1:Rt/dt, s(ii+[0:M-1]*L)=a;,end
8.眼图
眼图是数字信号在示波器上重复扫描得到的显示图形。若示波器的扫描范围是 Na 个码元,
那么画眼图的方法是:
tt=[0:dt:Na*L*dt];
hold on
for ii=1:Na*L:N-N*L
plot(tt,s(ii+[1:Na*L]));
end
9.误码率
取样判决
设矢量 a 表示发送的码序列,矢量 y 表示在判决点观测到的叠加有噪声的接收信号,假设信
道无时延。接收机在每隔一个码元间隔 取一个点作为判决量。所有取样结果构成一个矢量
b:若取样时刻无偏差则 b=y(1:L:N),若取样时刻有 的恒定偏差,则 b=y(1+k:L:N)。
若判决门限为 Vth,则判决结果是 c=sign(b-Vth)(双极性结果 1)或 c=(sign(b-Vth)+1)/2
(单极性结果 0、1)。
10.误码率测量
若在一次试观察中发送的码元是长度为 M 的矢量 a,对应的判决结果是矢量 c。误码数
是 a 与 c 中不相同的符号数,即 n_err=length(find(a~=c)),于是误码率为 Pe=n_err/M。
为了提高测量精度,可加大 M 或者重复多次观察。多次观察时,误码率为总误码数除以总码
元数。
【实验结果及分析】
实验一 绘出正弦信号波形及频谱
源程序
global dt df t f N
close all
k=input('取样点数=2^k, k=[10]');
if isempty(k), k=10; end
N=2^k
dt=0.02;
df=1/(N*dt);
T=N*dt;
Bs=N*df/2;
figure(1)
%ms
%KHz
%截短时间
%系统带宽
set(1,'Position',[30,100,450,300])
%设定图1的窗口位置及大小
figure(2)
set(2,'Position',[530,100,450,300])
%设定图2的窗口位置及大小
t=linspace(-T/2,T/2,N); %时域横坐标
%频域横坐标
f=linspace(-Bs,Bs,N);
f0=1;
%f0=1KHz
s=sin(2*pi*f0*t);
S=t2f(s);
a=f2t(S);
P=S.*conj(S)/T;
%S是s的傅氏变换
%功率谱
figure(1)
plot(t,a,'b')
grid
axis([-2,+2,-1.5,1.5'])
xlabel('t (ms)')
ylabel('s(t) (V)')
title('正弦信号波形')
figure(2)
as=abs(S);