《通信原理》OFDM系统仿真

一、实验内容

1. OFDM系统的子载波的调制;

2.OFDM的IDFT和DFT的实现;

3.OFDM的保护间隔与循环前缀的实现。

二、实验步骤及结果

1.子载波调制

实验一:假设OFDM系统包含8个子载波,fc=1Hz,子载波频率间隔为1Hz,每个子载波采用4-QAM调制,符号周期为1s。

  1. 画出一个符号周期的调制信号波形。
  2. 比较无频偏解调和存在0.2Hz频偏时的解调结果。

2.实验代码

%% OFDM系统仿真1-1
clear all;close all;clc;

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),'rx');
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),'rp');
axis([0,9,0,3]);
title('频偏为0.2Hz时的子载波解调结果');
legend('原始数据','子载波解调后的数据');

3.实验结果

 

 1.OFDM的IDFT/DFT实现

实验二:仿真比较OFDM系统的IDFT/DFT实现与模拟调制实现,其中系统参数与上面的实验一相同。

2.实验代码

%% OFDM系统仿真1-2
clear all;close all;clc;

N=8;                    %子载波数。
x = randi([0,3],1,N);   %子载波上的数据。
x1 = qammod(x,4);       %4-QAM调制。
f = 1:N;                %子载波频率。
t = 0:0.0001;1-0.001;   %符号持续时间。
w = 2*pi*(f+0.2).'*t;
w1 = 2*pi*(f+0.2).'*t;
y1 = x1*exp(j*w);       %子载波调制。
x2 = ifft(x1,N);        %ifft。
plot(t,abs(y1),'-b');
hold on;
stem(0:1/8:1-1/8,abs(x2)*N,'-r');
legend('模拟调制实现','IDFT实现');
title('OFDM的模拟调制实现与IDFT实现');
x3 = fft(x2);

disp(['x1=',num2str(x1)]);
disp(['x2=',num2str(x2)]);
disp(['x3=',num2str(x3)]);

3.实验结构

 

 1.保护间隔与循环前缀

实验三:系统子载波数为64,调制方式为16-QAM,前缀长度为16,多径信道时延分别为0、8和20个采样点,各径功率相等。仿真比较OFDM系统空白前缀与循环前缀只考虑前2径信道和3径信道下的性能。

2.实验代码

%% OFDM系统仿真1-2
clear all;close all;clc;

N = 64;                     %系统子载波数。
x = randi([0,15],N,2);      %2个符号周期的数据。
x1 = qammod(x,16);          %16-QAM调制。
x2 = ifft(x1);              %IFFT。
x3 = [zeros(16,2);x2];      %空白前缀。
x4 = [x2(49:end,:);x2];     %循环前缀。
x3 = reshape(x3,1,160);     % 并串变换
x4 = reshape(x4,1,160);
h = sqrt(1/3)*(randn(1,3)); %3 径信道
%% 
y1 = x3*h(1)+[zeros(1,8),x3(1:end-8)*h(2)]; %只考虑前 2 径
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个符号的影响
y4 = y4(17:end,2);
y3 = fft(y3);                 % FFT
y4 = fft(y4);
h1 = [h(1),zeros(1,7),h(2)]; % 信道 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(abs(y3))+2]);
title('2径信道结果');
%% 
y1=y1+[zeros(1,17),x3(1:end-17)*h(3)];  %3径信道结果
y2=y2+[zeros(1,17),x4(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 径信道结果');

3.实验结果

 

 

  • 6
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值