实验四 OFDM调制解调仿真
一、实验目的
(1)了解OFDM调制解调的原理。 (2)学会用星座图分析系统性能。 二、实验内容
(1)编写MATLAB程序,实现OFDM系统调制解调。 (2)绘制各步骤图形并分析系统特性。 三、实验代码
1、主代码如下: clear all; close all;
N=input('请输入码元数'); SNR=input('请输入信噪比');
xx=randint(1,4*N); %原序列 figure(1),stem(xx,'.k'); %原序列图形 title('原序列'); B=0;
for m=1:4:4*N
A=xx(m)*8+xx(m+1)*4+xx(m+2)*2+xx(m+3); B=B+1; ee(B)=A; end
figure(2),stem(ee,'.b'); title('化为0~15的码元'); yy=star(ee,N);
figure(3),plot(yy,'.r'); %映射后的星座图 title('映射后的星座图');
ff=ifft(yy,N); %傅里叶反变换 N1=floor(N*1/4); N3=floor(N*3/4); N5=floor(N*5/4); figure(4),stem(ff,'.m'); title('傅里叶反变换后');
for j=1:N1 %加循环前缀 ss(j)=ff(N3+j); end
for j=1:N %变成长度为N*5/4的序列 ss(N1+j)=ff(j); end
figure(5),stem(ss,'.k'); %画出图形 title('加N/4循环前后缀');
%ss=wgn(1,N5,0,10,'dBW','complex');
ss=awgn(ss,SNR); %加入噪声
figure(6),stem(ss,'.m'); %加入噪声后的图形 title('加入噪声后');
zz=fft(ss((N1+1):N5),N); %傅里叶变换 figure(7),plot(zz,'.b'); %画图 title('傅里叶变换后');
rr=istar(zz,N); %星座图纠错 figure(8),plot(rr,'.r'); %画图 title('纠错后的星座图');
dd=decode(rr,N); %解码 figure(9),stem(dd,'.m'); %画图 title('星座图纠错并解码后'); ?=d2b(dd,N);
bb=d2bb(dd,N); %转化为0/1比特流 figure(10),stem(bb,'.b');
title('转化为0/1比特流后'); 2、调用的函数: (1)星座图映射 %星座图映射
function yy=star(xx,N)
B=[-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 j=1:N
yy(j)=B(xx(j)+1); end
(2)星座图逆映射 %星座图逆映射
function rr=istar(zz,N) for j=1:N
if(mod((floor(real(zz(j)))),2)==0) zz1(j)=ceil(real(zz(j))); else zz1(j)=floor(real(zz(j))); end
if(mod((floor(imag(zz(j)))),2)==0) zz1(j)=zz1(j)+ceil(imag(zz(j)))*i; else zz1(j)=zz1(j)+floor(imag(zz(j)))*i; end
rr(j)=zz1(j); end
(3)十进制转二进制
function bb=d2b(dd,N) %十进制转二进制 for j=1:N*4 bb(j)=; end
for j=1:4:N*4
bb1=dec2bin(dd(floor(j/4)+1),4); for k=1:4
bb(4*(j-1)+k)=bb1(k); end
end
(4)十进制转化为01比特流
%十进制转化为01比特流 function bb=d2bb(dd,N) for j=1:N*4 bb(j)=1; end j=1;
while(j<=N*4) N1=ceil(j/4)
a4=mod(dd(N1),2);
dd(N1)=floor(dd(N1)/2); a3=mod(dd(N1),2);
dd(N1)=floor(dd(N1)/2); a2=mod(dd(N1),2);
dd(N1)=floor(dd(N1)/2); a1=mod(dd(N1),2); bb(j)=a1; j=j+1; bb(j)=a2; j=j+1; bb(j)=a3; j=j+1; bb(j)=a4; j=j+1; end
(5)星座图逆映射
function yy=decode(rr,N) for j=1:N
switch(rr(j))%星座图逆映射 case -3-3*i yy(j)=0; case -3-i yy(j)=1; case -1-3*i yy(j)=2; case -1-i yy(j)=3; case -3+3*i
yy(j)=4; case -3+i yy(j)=5; case -1+3*i yy(j)=6; case -1+i yy(j)=7; case 3-3*i yy(j)=8; case 3-i
yy(j)=9; case 1-3*i yy(j)=10; case 1-i
yy(j)=11; case 3+3*i yy(j)=12; case 3+i
yy(j)=13; case 1+3*i yy(j)=14; case 1+i
yy(j)=15; otherwise break; end
end 四、
五、实验结果

