重庆交通大学计算机与信息学院综合性设计性实验报告
班级:2005 级通信工程 1 班
姓名:
学号:
实验项目名称:OFDM系统仿真
实验项目性质:综合性实验
实验所属课程:无线通信原理与应用
实验室(中心):软件中心
指导教师:
实验完成时间:2008 年 5 月30 日
一、实验目的
1、综合应用《Matlab原理及应用》、《信号与系统》、《现代通信原理》、《无线通信原理及应用》等多门课程知识,使学生建立通信系统的整体概念;
2、培养学生系统设计与系统开发的思想;
3、培养学生利用软件进行通信仿真的能力。
二、实验内容及要求
深入理解OFDM系统仿真的原理和基础,提出仿真方案,完成MATLAB仿真的编制,并要求画出输入信号与解调信号的星座图。
三、实验设备及软件
计算机一台、MATLAB软件
四、设计方案
㈠题目:OFDM与MATLAB仿真
㈡设计的主要思路
1、产生64个[0,15]之间的随机数,放入数组X中;
2、对这64个数进行16QAM的星座点映射,映射后的数据放入数组X1中;
3、对X1进行IFFT变换,结果放入数组X2中;
4、对X2加入循环前缀,结果把数据放入数组X3中;
5、对X3加入一定的噪声信号,结果放在数组X4中;
6、对X4去前缀后进行FFT变换,结果被放在数组Y2中;
7、对Y2再次进行星座点映射,得到解调后的OFDM数据Y;
8、对Y进行误码分析。
㈢主要功能
1、能对N*64 (N为正整数)个输入数据在加噪后进行OFDM调制,并解调;
2、能够画出输入数据与输出数据的星座图;
3、能在不同信噪比信道的情况下,对信号进行误码分析。
五、主要代码
主程序代码
clear;
close all;
clc;
disp('请按任意键继续......')
pause
snr=input('请你输入信号经信道时的信噪比snr(以dBW为单位):');
N=64;%N为载波数,即一个OFDM符号的长度
%----------------------------发射部分----------------------------
for k=1:N
X(k)=fix(rand()*16);%随机产生64个[0,15]之间的整数
X1(k)=QAM16_mod(X(k));%进行星座图映射,X 可以认为是已经进行串/并转换后的输出信号
end
disp('原输入的数据为:')
disp(X)
figure(1)
plot(real(X1),imag(X1),'.r');
title('随机输入数据的星座图');
xlabel('An(实部)');
ylabel('Bn(虚部)');
X2=ifft(X1,N);%对X进行傅里叶反变换
X3=[X2((N-0.25*N+1):N),X2];%在该OFDM符号中加入循环前缀
X4=awgn(X3,snr);%接收机最终接收的信号
figure(2)
subplot(2,2,1)
plot(1:numel(X3),real(X3),'r');
title('加入噪声前的信号波形(实部部分)');
subplot(2,2,3)
plot(1:numel(X4),real(X4),'r');
title('加入噪声后的信号波形(实部部分)');
subplot(2,2,2)
plot(1:numel(X3),imag(X3),'b');
title('加入噪声前的信号波形(虚部部分)');
subplot(2,2,4)
plot(1:numel(X4),imag(X4),'b');
title('加入噪声后的信号波形(虚部部分)');
%------------------------------接收部分------------------------------
Y1=X4(0.25*N+1:N+0.25*N);
Y2=fft(Y1,N);
figure(3)
plot(real(X1),imag(X1),'.r',real(Y2),imag(Y2),'.b');
title('接收的OSDF符号的星座图')
xlabel('An(实部)');
ylabel('Bn(虚部)');
for k=1:numel(Y1)
[Y(k),Y3(k)]=QAM16_demod(Y2(k));
end
disp('接收机最终得到的数据为:')
disp(Y)
error=0;%解调后错误的个数
for k=1:N
if X(k)~=Y(k)
error=error+1;
end
end
disp('解调后错误的个数为:')
disp(error)
disp('误码率为:')
disp(error/N)
子程序QAM16_mod的代码
function complex=QAM16_mod(number)
%16QAM星座图映射---把输入的数映射成对应的坐标(复数)
A=[-3-3*i,-3-i,-1-3*i,-1-i,-3+3*i,-3+i,-1+3*i,-1+i,3-3*i,3-i,1-3*i,1-i,3+3*i,3+i,1+3*i,1+i]; complex=A(number+1);
%complex为对输入数据进行星座点映射后的坐标(复数)
子程序QAM16_demod的代码
function [number,complex]=QAM16_demod(c)
%16QAM星座图重映射---在星座图上对散乱的点找最近的点作为它的星座点
%complex为离星座点最近的那点的坐标,即是解调后的坐标
%number为解调后的OFDM数据
A=[-3-3*i,-3-i,-1-3*i,-1-i,-3+3*i,-3+i,-1+3*i,-1+i,3-3*i,3-i,1-3*i,1-i,3+3*i,3+i,1+3*i,1+i]; for k=1:16
B(k)=sqrt((real(c)-real(A(k)))^2+(imag(c)-imag(A(k)))^2);
end
number=find(B==min(B))-1;
complex=A(find(B==min(B)));
六、测试结果及说明
当输入信噪比为20dBW时的情况
请按任意键继续......
请你输入信号经信道时的信噪比snr(以dBW为单位):20
原输入的数据为:
10 10 0 10 15 9 12 0 12 10 2 8 3 8 0 9 6 2 1 1 4 15 15 8 15 11 3 12 14 2 10 4 10 7 14 3 10 5 7 7 11 3 11 13 6 6 15 14 11 4 13 15 4 15 7 0 4 11 7 1 3 15 5 2
接收机最终得到的数据为:
10 10 0 10 15 9 12 0 12 10 3 8 3
8 1 9 6 2 1 1 4 15 15 8 15 11
11 13 14 2 8 4 10 7 14 3 10 5 7
7 11 3 11 13 14 6 15 14 11 4 13 15
4 1
5 5 0 4 11 7 0 3 15 5 10
解调后错误的个数为:
9
误码率为:
0.1406
当输入信噪比为30dBW时的情况
请按任意键继续......
请你输入信号经信道时的信噪比snr(以dBW为单位):30
原输入的数据为:
0 10 11 0 1 14 12 9 10 15 8 12 9 15 0 15 3 14 10 7 0 7 12 4 11 4 11 11 11 9 15 2 3 13 0 8 3 9 4 1 8 14 9 0 15 2 13 9 13 1 10 1 7 10 2 7 1 9 9 4 3 0 6 12
接收机最终得到的数据为:
0 10 11 0 1 14 12 9 10 15 8 12 9
15 0 15 3 14 10 7 0 7 12 4 11 4 11 11 11 9 15 2 3 13 0 8 3 9 4 1 8 14 9 0 15 2 13 9 13 1 10 1 7 10 2 7 1 9 9 4 3 0 6 12
解调后错误的个数为:
误码率为:
七、实验体会
1、对OFDM的MATLAB仿真有了较深入的理解;
2、对16QAM的星座点映射有了详细的了解;
3、学会了画星座图;
4、在仿真过程中,加噪函数awgn()的设置直接影响到OFDM的解调效果;
5、在输入信噪比snr>=30dBW时,解调效果较明显,误码基本为0。