一 实验题目
设计一个采用2PSK调制的数字通信系统
➢设计系统整体框图及数学模型;
➢产生离散二进制信源,进行信道编码(汉明码),产生BPSK信号; ➢加入信道噪声(高斯白噪声); ➢BPSK信号相干解调,信道解码;
➢系统性能分析(信号波形、频谱,白噪声的波形、频谱,信道编解
二 实验基本原理
数字信号的传输方式分为基带传输和带通传输,在实际应用中,大多数信道具有带通特性而不能直接传输基带信号。为了使数字信号在带通信道中传输,必须使用数字基带信号对载波进行调制,以使信号与信道的特性相匹配。这种用数字基带信号控制载波,把数字基带信号变换为数字带通信号的过程称为数字调制。
数字调制技术的两种方法:①利用模拟调制的方法去实现数字式调制,即把数字调制看成是模拟调制的一个特例,把数字基带信号当做模拟信号的特殊情况处理;②利用数字信号的离散取值特点通过开关键控载波,从而实现数字调制。这种方法通常称为键控法,比如对载波的相位进行键控,便可获得相移键控(PSK)基本的调制方式。
图1 相应的信号波形的示例
1 0 1
调制原理
数字调相:如果两个频率相同的载波同时开始振荡,这两个频率同时达到正最大值,同时达到零值,同时达到负最大值,它们应处于\"同相\"状态;如果其中一个开始得迟了一点,就可能不相同了。如果一个达到正最大值时,另一个达到负最大值,则称为\"反相\"。一般把信号振荡一次(一周)作为360度。如果一个波比另一个波相差半个周期,我们说两个波的
相位差180度,也就是反相。当传输数字信号时,\"1\"码控制发0度相位,\"0\"码控制发180度相位。载波的初始相位就有了移动,也就带上了信息。
相移键控是利用载波的相位变化来传递数字信息,而振幅和频率保持不变。在2PSK中,通常用初始相位0和π分别表示二进制“1”和“0”。因此,2PSK信号的时域表达式为其中,
(t)=Acos
t+
)
表示第n个符号的绝对相位:
=
因此,上式可以改写为
图2 2PSK信号波形
解调原理
2PSK信号的解调方法是相干解调法。由于PSK信号本身就是利用相位传递信息的,所以在接收端必须利用信号的相位信息来解调信号。下图2-3中给出了一种2PSK信号相干接收设备的原理框图。图中经过带通滤波的信号在相乘器中与本地载波相乘,然后用低通滤波器滤除高频分量,在进行抽样判决。判决器是按极性来判决的。即正抽样值判为1,负抽样值判为0.
2PSK信号相干解调各点时间波形如图 3 所示. 当恢复的相干载波产生180°倒相时,解调出的数字基带信号将与发送的数字基带信号正好是相反,解调器输出数字基带信号全部出错.
图 32PSK信号相干解调各点时间波形
这种现象通常称为\"倒π\"现象.由于在2PSK信号的载波恢复过程中存在着180°的相位模糊,所以2PSK信号的相干解调存在随机的\"倒π\"现象,从而使得2PSK方式在实际中很少采用.
三 仿真方真
产生随机n位二进制码元 输 出 2PSK 误码率 仿真 抽 样 判 决 低 通 滤 波 低 通 滤 波 加性AWGN 汉 明 码 编 码 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('理论值','实际值')、
五 实验结果及分析
图1.随机产生的15位二进制序列波形
图2.汉明码编码后的序列波形极其频谱
由图2可看出输入信号经过汉明码编码后的波形与理论推出的序列相同
图3.经过2psk调制后的信号波形及其频谱
图3中显示的2psk由于显示幅度限制已叠在一起,放大看可得到以理论相同的正弦波波形,在0,1变换出有π的相位变化,并且信号的频谱图符合信号频率被载波搬移的解释。
图4.信号通过信道加入白噪声后的波形极其频谱
图4所示是信号加入高斯白噪声后的波形,其中信噪比可调,实验中信噪比为10dB。在频谱图下方可以看到高斯白噪声的频谱密度,和理论的高斯白噪声频谱密度相同。
图5.经过相干解调后的信号波形及其频谱
经过调制的2psk信号只能通过相干解调。实验中当信号与载波相乘后与实验原理中的推导相符。
图6.经过低通滤波器后的信号波形及其频谱
经过低通滤波后,除去信号中的高频成分和大部分高斯白噪声
图7.低通滤波器的传输函数的频谱及相谱图
图8.经过抽样判决后的信号极其频谱
经过抽样判决后输出的波形与编码后的波形一致
图9.判决后的信号经过汉明码译码后的波形
将上一步中的信号经过汉明码译码后得到与输入波形相同的信号。
可得出这个2psk通信系统可实现。
图10.2psk信噪比与误码率关系图
六 心得体会
通过这次通信原理实验,我发现自己的基础知识和应用能力都很差。刚拿到题目时,在如何实现汉明码编码处就卡住,再后来的译码,由于程序有问题,每次都进入死循环。最后通过各种网上的资料解决了种种问题。通过了这次实验,我加深了课堂上所学的理论知识,提高了知识的应用能力。熟悉了MATLAB的运行环境,掌握了一些MATLAB语言和函数的调用,很大程度上提高了自己的能力。
因篇幅问题不能全部显示,请点此查看更多更全内容