⛄一、获取代码方式
获取代码方式1:
完整代码已上传我的资源:【信道估计】基于matlab LS算法OFDM系统频域信道估计【含Matlab源码 3931期】
点击上面蓝色字体,直接付费下载,即可。
获取代码方式2:
付费专栏Matlab信号处理(初级版)
备注:
点击上面蓝色字体付费专栏Matlab信号处理(初级版),扫描上面二维码,付费29.9元订阅海神之光博客付费专栏Matlab信号处理(初级版),凭支付凭证,私信博主,可免费获得1份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:1份本博客上传CSDN资源代码
⛄二、部分源代码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%此函数完成功能 利用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_OFDMN));%产生40064个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
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]焦明伟,贾振红,覃锡忠,李涛,赵君凯.改进LMS在低压电力线OFDM信道估计中的应用[J].计算机工程与应用. 2010,46(34)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除