%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%此函数完成功能 利用LS算法对OFDM系统进行频域信道估计
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%64个载波,子载波间隔为1.25MHZ,带宽共为80MHZ,积分周期为0.8e-6s.采样时间间隔为0.0125e-6s.数据进行QPSK调制
%仿真环境为准静态,没有直达径且为瑞利分布环境
%
clear,clc;
N=64; %子载波个数
profix=16; %循环前缀共16个点
L=1; %多径数目
N_OFDM=400; %一帧数据所包含的OFDM符号数
N_location=16; %一帧数据内插入导频的位置
SNR_DB=[0 2 4 6 8 10 14 18 20 25 40]; %信躁比
N_SIMULINK=10; %仿真次数
MMSE_average_error=zeros(1,length(SNR_DB)); %用以储平均误
for j=1:N_SIMULINK
%**************************************************
%generate data
%**************************************************
OFDM_original_data=zeros(1,N_OFDM*N); %用以存储400个OFDM符号的QPSK基带调制信号
OFDM_pilot_data=zeros(1,N); %用以存储一个OFDM符号的导频信号,此处对导频符号的设计没有特殊的要求
OFDM_data=zeros(64,N_OFDM);
OFDM_original_data=(-1).^round(rand(1,N_OFDM*N))+i*(-1).^round(rand(1,N_OFDM*N));%产生400*64个QPSK基带调制信号
OFDM_pilot_data=(-1).^round(rand(1,N))+i*(-1).^round(rand(1,N)); %产生64个QPSK基带调制信号
OFDM_data=reshape(OFDM_original_data,N,N_OFDM); %将数据转换成64X400的形式
OFDM_data(:,1)=OFDM_pilot_data.'; %将导频插入
OFDM_ifft_data=ifft(OFDM_data,N,1); %对每个OFDM信号做IFFT
RowPrefix = (N - profix + 1):N; %产生49到64的序列
OFDM_addprofix_data = [OFDM_ifft_data(RowPrefix,:);OFDM_ifft_data]; %将后16行放在新数组的最前16行
OFDM_out1_data=reshape(OFDM_addprofix_data,1,N_OFDM*(N +profix)); %将数据进行并串转换
%*********************************************
%产生时域冲击响应序列 注意:仿真时模拟的是准静态信道,每条径的幅度服从瑞利分布,时延不超过profix
%*********************************************
h=abs(randn(1,L)+i*randn(1,L)); %产生第4条径的幅度,此处可以通过调节多径时延
H_original=fft(h,N); %计算出频域冲击响应
OFDM_out2_data=conv(OFDM_out1_data,h); %发送信号与冲击响应函数相卷积
OFDM_out3_data=OFDM_out2_data(1,1:N_OFDM*(N +profix)); %取信号的前400*80个元素
%**************************************************
%进行加噪处理和Channel estimation
%**************************************************
k_length=length(SNR_DB); %计算出信躁比取值个数
MMSE_error=zeros(1,k_length);
for k=1:k_length
OFDM_out_data=awgn(OFDM_out3_data,SNR_DB(k),'measured'); %按照信躁比加入噪声
OFDM_modulate_data=reshape(OFDM_out_data,(N +profix),N_OFDM); %将接受信号进行串并转换
OFDM_modulate1_data=OFDM_modulate_data((profix+1):(profix+N),:); %去掉循环前缀
OFDM_fft_data=fft(OFDM_modulate1_data,N,1); %进行fft变换将数据变换到频域
%*************************
%Channel estimation ***LS
%*************************
H_estimation=(OFDM_fft_data(:,1)).'./OFDM_pilot_data; %进行LS频域估计 ....此处是有问题的,并未考虑能量守恒
MMSE_error(k)=sum(abs(H_estimation-H_original).^2)/sum(abs(H_original).^2) ; %计算MMSE误差
end
MMSE_average_error= MMSE_error+MMSE_average_error;
end
MMSE_average_error=MMSE_average_error./N_SIMULINK;
%*********************************************************************
%%解调
%*********************************************************************
figure(1)
k=SNR_DB;
%plot( k,MMSE_average_error,'-ro');
semilogy(k,MMSE_average_error,'-ro');
%axis([0,max(k),0,1]);
title('LS算法信道估计')
xlabel('SNR(dB)')
ylabel('MMSE')
grid on;
hold on
海神之光
- 粉丝: 5w+
- 资源: 6476
最新资源
- python入门-17.最大子段和-团结!.py
- python入门-test-18.车厢重组.py
- 第56课 枚举2-20241227131043.pdf
- 基于 Flask 和 React 的前后端分离论坛全部资料+详细文档.zip
- 基于 Flask 和 WebSocket 实现的聊天室程序全部资料+详细文档.zip
- 基于 Scrapy 的新闻智能分类微信小程序,目的是打造出一个可以对新闻进行智能分类的微信小程序。技术栈:Python + Scrapy + MongoDB +
- 基于Flask 与Material Design的博客全部资料+详细文档.zip
- 基于bert4keras的命名实体识别flask展示全部资料+详细文档.zip
- 基于bert4keras关系抽取的flask展示全部资料+详细文档.zip
- 基于flask+MySQL的日程管理系统全部资料+详细文档.zip
- 基于Flask、MySQL和Bootstrap开发的图片分享社交网站。全部资料+详细文档.zip
- 基于Flask+Python3.6的电影网站项目全部资料+详细文档.zip
- 基于flask的web端三维模型重建系统-毕业设计全部资料+详细文档.zip
- 基于Flask的自然语言处理Web应用:人物观点提取,文本摘要,点评情感分类全部资料+详细文档.zip
- 基于Flask构建的无人机物流管理系统全部资料+详细文档.zip
- 基于flask框架的轻量级新闻资讯网站全部资料+详细文档.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈