• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

OFDM仿真MATLAB版

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、OFDM步骤
网上ofdm普遍采用这样一个顺序仿真,产生0-1随机序列 => 串并转换 => 映射 => 取共轭、过采样=> IFFT => 加循环前缀和后缀 => 加窗 => 并串转换 => 加AWGN => 串并转换 => 去前缀 => FFT =>下采样 => 解映射 => 求误码率
我去除①取共轭、过采样②加窗等步骤,这些复杂的做法设计很广的知识范围,有的还是工程化的细腻、额外考虑。只从原理上进行仿真。
二、编程效果
MATLAB编程绘图后效果如下图
此时的具体参数如下表所示

参数 数值
每个ofdm符号包含mqam符号个数 200
ofdm符号个数 100
mqam的进制数 64
前缀码 128
后缀码 20
信噪比 55DB

注:
①上图频谱采用数字频率的1/2π倍表示,物理频率与码速有关;
②若IFFT前,取共轭,再求IFFT时,频谱类似矩形窗。

改了参数后效果:

参数 数值
每个ofdm符号包含mqam符号个数 200
ofdm符号个数 100
mqam的进制数 16
前缀码 128
后缀码 20
信噪比 15DB

三、完整代码如下
代码可以改参数
①MQAM信号可改,直接改M即可(M=2^n)
②信噪比可改
signal_time_C_W=awgn(signal_time_C,30);%加性高斯白噪声通道
改这个函数里的数字即可,这个是MATLAB自带的函数

clear all;
close all;
%-------------------参数设定---------------------%
carrier_count = 200; %每个ofdm符号包含mqam符号个数
ofdm_symbol_count = 100;%ofdm符号个数
M=64;%mqam的进制数
CP_length = 128;%前缀码
CS_length = 20;%后缀码
%------------------基本步骤----------------------%
bit_signal=bit_Signal_generation(carrier_count,ofdm_symbol_count,M);
%2进制信号生成
bit_moded1 = qammod(bit_signal,M,‘InputType’,‘bit’);
%星座映射
bit_moded2 = reshape(bit_moded1,carrier_count,ofdm_symbol_count);
%串并转换
signal_time=ifft(bit_moded2,2^nextpow2(length(bit_moded2)));
%ifft调制
signal_time_C=add_prefix_suffix_code(signal_time,CP_length,CS_length);
%加前缀后缀码
signal_time_C_W=awgn(signal_time_C,55);
%加性高斯白噪声通道
signal_time_D=signal_time_C_W(1+CP_length:end-CS_length,:);
%去前缀码后缀码
signal_time_E=fft(signal_time_D,2^nextpow2(length(signal_time_D)));
%fft解调
signal_time_F=signal_time_E(1:carrier_count,:);
%解调后下采样
draw(bit_moded1,signal_time_C,signal_time,signal_time_C_W,signal_time_F);
%绘图
error_rate=error_rate1(signal_time_F,bit_signal,M);
%求误码率
%---------------------自己编写的函数 ,包括了绘图函数-------------------------%
function bit_signal=bit_Signal_generation(carrier_count,ofdm_symbol_count,M)
bit_per_symbol=log2(M);
bit_length = carrier_countofdm_symbol_countbit_per_symbol;
bit_signal = round(rand(1,bit_length))’; % 列向量
end
function signal_time_C=add_prefix_suffix_code(signal_time,CP_length,CS_length)
signal_time_C = [signal_time(end-CP_length+1:end,:);signal_time];
signal_time_C = [signal_time_C; signal_time_C(1:CS_length,:)];
end
function draw(bit_moded1,signal_time_C,signal_time,signal_time_C_W,signal_time_F)
figure
subplot(3,2,1)
scatter(real(bit_moded1),imag(bit_moded1),'r’);
title(‘调制后的星座图’);
grid on;
subplot(3,2,2)
scatter(real(reshape(signal_time_F,1,[])),imag(reshape(signal_time_F,1,[])),’.’);
title(‘接收信号的星座图snr=30’);
grid on;
subplot(3,2,3)
plot(abs(signal_time_C_W(:,1)),‘r’);
title(‘单个OFDM符号加前缀后缀码噪声下的信号’);
subplot(3,2,4)
plot(abs(signal_time_C(:,1)),‘y’);
title(‘单个OFDM符号加前缀后缀码的信号’);
subplot(3,2,5)
plot(abs(signal_time(:,1)),‘g’);
title(‘原始单个OFDM符号的信号’);
xlabel(‘Time’);
ylabel(‘Amplitude’);
subplot(3,2,6)
NFFT = 2^nextpow2(length(signal_time(:,1)));
Y1 = fft(mean(signal_time),NFFT)/NFFT;
f = linspace(0,1,NFFT/2+1);
plot(f,2
abs(Y1(1:NFFT/2+1))) ;
hold on;
NFFT2 = 2^nextpow2(length(signal_time_C(:,1)));
Y2 = fft(mean(signal_time_C),NFFT2)/NFFT2;
f2 = linspace(0,1,NFFT2/2+1);
plot(f2,2*abs(Y2(1:NFFT2/2+1)));
legend(‘噪声下频谱’,‘无噪声下频谱’);
end
function error_rate=error_rate1(signal_time_F,bit_signal,M)
bit_demod_sig = reshape(qamdemod(signal_time_F,M,‘OutputType’,‘bit’),[],1);
error_bit = sum(bit_demod_sig~=bit_signal);
error_rate = error_bit/length(bit_signal);
end

在工作区输入error_rate,便得到了误码率

四、我关于OFDM理解
我觉得最核心的有点如下:
①ofdm技术频谱利用率高。
②采用前缀码,后缀码克服了多径传播的问题,抗选择性衰落;采用纠错编码和交织过程,克服了深衰落等等,其抗衰落能力高。
③容量大。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
DELPHI 反射机制发布时间:2022-07-18
下一篇:
Delphi中文件流的使用方法发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap