%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%此函数完成功能 利用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+
- 资源: 6110
最新资源
- Ultralytics YOLO iOS App 源代码可用于在你自己的 iOS 应用中运行 YOLOv8.zip
- 各种(西佳佳)小游戏 ≈ 代码
- Tensorrt YOLOv8 的简单实现.zip
- TensorFlow 中空间不变注意、推断、重复 (SPAIR) 的原始实现 .zip
- Tensorflow 中的 Tiny YOLOv2 变得简单!.zip
- 8ba1f8ab2c896fd7d5c62d0e5e9ecf46.JPG
- TensorFlow 中的 3D YOLO 实现.zip
- 安全服(反光背心)检测-YOLOV7标记 2000多张图被标记
- 586befcf3e78455eb3b5359d7500cc97.JPG
- TensorFlow Lite 的 React Native 库.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈