matlab仿真 OFDM系统仿真

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真   刘学勇编著第九章内容,有兴趣的读者请阅读原书) 

clear all
N=8;%子载波数
f=1:N;%各个子载波频率
x=randi([0 3],1,N);%子载波上的数据
x1=qammod(x,4);%4-QAM调制
t=0:0.001:1-0.001;%符号持续时间
w=2*pi*f.'*t;
w1=2*pi*(f+0.2).'*t;%频偏为0.2Hz时的子载波角频率
y=x1*exp(j*w);%子载波调制
plot(t,abs(y))%画出调制后的波形包络
for ii=1:N
    y1(ii)=sum(y.*exp(-j*w(ii,:)))/length(t);%无频偏解调第ii个子载波上的数据
end

stem(abs(x1))%显示无频偏时子载波解调后的结果
hold on
stem(abs(y1),'r<')
title('频偏为0时的子载波解调结果')
axis([0 9 0 3])
legend('原始数据','子载波解调后的数据')
for ii=1:N
    y3(ii)=sum(y.*exp(-j*(w1(ii,:))))/length(t);
end
figure
stem(abs(x1))
hold on
stem(abs(y3),'r<')
axis([0 9 0 3])
title('频偏为0.2Hz时的子载波解调结果')
legend('原始数据','子载波解调后的结果')

思路如下:

产生原始数据-4QAM调制-子载波调制-子载波解调(将载波通过乘法的方式进行消除)-画图

这里比较调制和解调的数据都是QAM调制之后的数据,代码并没有对QAM进行解调,而且在比较数据的时候比较的是QAM数据的幅值(abs)

clear all
N=8;%子载波数
x=randi([0 3],1,N)%子载波上的数据
x1=qammod(x,4)%4-QAM调制
f=1:N;%子载波频率
t=0:0.001:1-0.001;%符号持续时间
w=2*pi*f.'*t;
w1=2*pi*(f+0.2).'*t;
y1=x1*exp(j*w);%子载波调制

x2=ifft(x1,N);%IFFT
plot(t,abs(y1));
hold on;

stem(0:1/8:1-1/8,abs(x2)*N,'-r');
legend('模拟调制实现','IDFT实现')
title('OFDM的模拟调制实现与IDFT实现')

x3=fft(x2)%FFT

代码中有两种调制方式,一种是乘上载波调制,除以载波解调(模拟调制)

另一种是用ifft调制,fft解调

 总结:码元相互干扰,符号之间需要间隔,插入空白间隔会造成多径干扰,所以需要插入循环前缀,降低误码率,但是传输了一些无用信息,牺牲了功率和信息速率

clear all
N=64;%系统子载波数
x=randi([0 15],N,2);%2个符号周期的数据
x1=qammod(x,16);%16QAM调制
x2=ifft(x1);%ifft
x3=[zeros(16,2);x2];%空白前缀
x4=[x2(49:end,:);x2];%循环前缀(1)

x3=reshape(x3,1,160);%并串转换
x4=reshape(x4,1,160);

h=sqrt(1/3)*(randn(1,3));%3径信道(2)

y1=x3*h(1)+[zeros(1,8) x3(1:end-8)*h(2)];%只考虑前2径(3)
y2=x4*h(1)+[zeros(1,8) x4(1:end-8)*h(2)];

y3=reshape(y1,80,2);%串并转换
y4=reshape(y2,80,2);

y3=y3(17:end,2);%考虑第2个符号的影响(4)
y4=y4(17:end,2);

y3=fft(y3);%fft
y4=fft(y4);

h1=[h(1) zeros(1,7) h(2)];%信道fft变换(6)
H=fft(h1,N).';
y3=y3./H;%信道均衡(5)
y4=y4./H;

figure
stem(abs(x1(:,2)),'fill');hold on;stem(abs(y3),'r<');stem(abs(y4),'-gs')
legend('原始信号','空白前缀','循环前缀')
axis([0 70 0 max(max(abs(y3),abs(y4)))+2])
title('2径信道结果')

y1=y1+[zeros(1,17) x3(1:end-17)*h(3)];%只考虑前2径
y2=y2+[zeros(1,17) x3(1:end-17)*h(3)];

y3=reshape(y1,80,2);%串并转换
y4=reshape(y2,80,2);

y3=y3(17:end,2);%考虑第2个符号的影响
y4=y4(17:end,2);

y3=fft(y3);%fft
y4=fft(y4);

h1=[h1 zeros(1,11) h(3)];%信道fft变换
H=fft(h1,N).';
y3=y3./H;%信道均衡
y4=y4./H;

figure
stem(abs(x1(:,2)),'fill');hold on;stem(abs(y3),'r<');stem(abs(y4),'-gs')
legend('原始信号','空白前缀','循环前缀')
axis([0 70 0 max(max(abs(y3),abs(y4)))+2])
title('3径信道结果')

(1)

(2)

此处的三径信道是三个常数,信道对信息的影响是信道常数直接与信息相乘得到的。

(3)

如题目,第一个信道的时延为0,所以经过信道的过程为x*h(1);

第二个信道的时延为8,所以信号整体往后移动8个单位,前面空出来的部分全为0,后面超出信号长度的部分直接排除(end-8)

(4)

考虑第二个符号的影响

注意图9-8的解释,载波之间的周期只差不再是正数,也就是载波之间的正交性遭到了破坏,所以载波的解调会受到其它载波的影响,这里第二个符号产生的影响简化为1:15位置的数据损失,

(5)(6)

信道均衡是为了消除信道的影响

已知Y=HX,其中X为输入信号,Y为输出信号,H为信号,那么在Y的基础上左乘X的逆矩阵,就可以实现Y=X

为了实现这一目的,我们需要得到信道的FFT变换,因为信道的采样点分别为0,8,而且

所以信道的矩阵形式为

[h(1) 0 0 0 0 0 0 0 h(2)](从0开始到8,所以长度为9)

后面三径的情况就是在二径的基础上再叠加上最后一个采样点即可。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值