m基于OFDM的OMP压缩感知信道估计算法误码率仿真,对比传统的LS,MMSE以及LMMSE信道估计性能

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: m基于OFDM的OMP压缩感知信道估计算法误码率仿真,对比传统的LS,MMSE以及LMMSE信道估计性能

1.算法描述

   正交频分复用技术(orthogonalfrequencydivisionmultiplexing,ofdm)应用在通信系统中可以有效抵抗码间干扰(inter-symbolinterference,isi)。同时,通过在符号间插入循环前缀(cyclicprefix,cp),可以进一步消除载波间干扰(intercarrierinterference,ici)。因此将ofdm技术应用在vlc系统中可以有效抵抗isi和ici,同时提高系统的频谱利用率。在vlc系统中使用的是强度调制直接检测,信号以光强作为载体进行传播,本系统采用的调制方式为dco-ofdm(directcurrentoptical-ofdm)。

  传统的线性信道估计方法,如ls、lmmse算法等均假设无线信道是密集多径的,因此需要使用大量的导频信号来获取准确的信道状态信息,从而导致系统的频谱资源利用率较低。而大量的研究结果表明,在宽带无线通信中,无线信道一般具有时域稀疏性,可以由少数主要的路径近似。

   近年来压缩感知理论受到了广泛的关注与研究。candès、donoho等人提出的压缩感知理论指出:当某个信号是稀疏的,或者其在某个变换域内是稀疏的,则可以以远低于奈奎斯特采样定律所要求的采样点数以很大的概率准确地将该信号恢复出来。压缩感知技术显著降低了对稀疏信号进行采样时所需要的采样点数,因此大幅度提高了数据的利用率。vlc的信道同无线通信信道一样具有时域稀疏的特性,可以将压缩感知技术应用到vlc系统的信道估计中,降低信道估计中的导频开销。

1.png

首先将MMSE计算公式中的XHX用其均值来代替,即

2.png

   为什么用均值来代替即时值能降低计算复杂度?这需要分析XHX里面的数据是什么,它是一个MM的矩阵,其对角线上是已知数据(导频信号)的功率,而其他位置的数据则是已知数据与其自身延迟数据的相关,该相关值可近似为满足标准正态分布的信号(均值为0)。那么对应到E(XHX),其对角线上的数据就是已知数据的平均功率,而其他位置的数据则为0。因此通过这种替代,可将hmmse进一步做如下化简

3.png

   这样就去掉了一个矩阵求逆的运算,再进一步设SNR=E(x2)/σ \sigmaσ2,   β \betaβ=E(x2)E(1/x2),则

4.png

其中SNR为接收信号的信噪比,而β则是与调制方式有关的一个常数。

    LMMSE估计比MMSE估计省掉了一个矩阵求逆过程,看到这里你也基本了解了LMMSE估计的来历,再去看更深入的改进算法就会容易很多。这里的lmmse估计公式里还包含一个矩阵求逆。以7条多径的信道估计为例,这就是要做一个7*7大小矩阵的求逆,计算量还是很大的,因此实际工程中,还是有很多其他的方法来进一步降低LMMSE的计算量 ,这里简单介绍一种SVD分解的方法,也可理解为特征值分解,因为信道相关矩阵是方阵。

2.仿真效果预览
matlab2017b仿真如下:

5.png
6.png
7.png
8.png
9.png

3.MATLAB核心程序

clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
 
 
snr_dB      = 100;
modsel      = 1;
Nc          = 64;
Nsym        = 64;
c0          = 3e8;
fc          = 5.9e9;
T           = 6.4e-6;
deltaf      = 1/T;
TG          = 1.6e-6;
T_OFDM      = T+TG;
Range       = [14.0625,  16.6406];
vrel        = [11.6381,  11.6381];
attenuation = [1,        1];
targetnum   = length(Range);
 
 
%%
%你自己写的原程序
[matrixDIV]=SystemSimulateFunc(snr_dB,modsel,Range,vrel,attenuation);
save H1.mat matrixDIV
H1 = matrixDIV;
 
 
%%
%我第一次给你设计的信道估计部分程序
[matrixDIV]=SystemSimulateFunc_my(snr_dB,modsel,Range,vrel,attenuation);
save H2.mat matrixDIV
H2 = matrixDIV;
 
 
%这次给你设计的压缩感知部分程序
%压缩参数
Beta    = 0.3;
%参数lemda
lemda   = 0.5;
 
Len     = 2048;
 
 
Reconstr1  = zeros(size(matrixDIV));
Reconstr2  = zeros(size(matrixDIV));
[R,C]      = size(matrixDIV);
for i = 1:R
    Signalr         = real(matrixDIV(i,:));
    [tmpsr,CS_Rec]  = func_CS_bp(Signalr,Beta,lemda);
    Signali         = imag(matrixDIV(i,:));
    [tmpsi,CS_Rec]  = func_CS_bp(Signali,Beta,lemda);   
    Reconstr1(i,:) = tmpsr;
    Reconstr2(i,:) = tmpsi; 
end
 
%计算压缩感知带来的误差:
RS        = Reconstr1+sqrt(-1)*Reconstr2;
disp('压缩感知带来的误差:');
mean(mean(abs(matrixDIV-RS)))
 
 
 
matrixDIV = Reconstr1+sqrt(-1)*Reconstr2;
 
 
 
 
 
FFTNsymsearch=Nsym*4;
FFTNcsearch=Nc*4;
 
fprintf('①最大不模糊距离Rmax=%fm\n',c0/(2*deltaf));
fprintf('②距离分辨率ΔR=%fm\n',c0/(2*deltaf*FFTNcsearch));
fprintf('③最大不模糊速度Vmax=±%fm/s\n',c0/(4*fc*T_OFDM));
fprintf('④速度分辨率ΔV=%fm/s\n',c0/(4*fc*T_OFDM*FFTNsymsearch));
%距离矩阵/vector
matrix_R=ifft(matrixDIV(:,1),FFTNcsearch);
matrix_v=ifft(matrixDIV(1,:),FFTNcsearch);
 
%=========时域显示==========
figure(4)
len=length(matrixDIV(:,1))
t=0:len-1;
stem(t,matrixDIV(:,1));
 
%=========频域显示===========
f= (0:FFTNcsearch-1).*1000./FFTNcsearch;  %fs=1000 为采样点数
figure(5)
subplot(121)
plot(f,matrix_R);
subplot(122)
plot(f,matrix_v);
 
%=========相对速度矩阵/vector==========
matrix_vrel=fft(matrixDIV(1,:),FFTNsymsearch)/FFTNsymsearch;
 
%=========搜索计算距离=================
[max_R,detected_Rsn]=max(abs(matrix_R));
%fprintf('detected_Rsn=%f\n',detected_Rsn);
detected_Rsn=detected_Rsn-1;
expected_Rsn=round(2*Range*deltaf*FFTNcsearch/c0);
%fprintf('expected_Rsn=%f\n',expected_Rsn);
expected_R=expected_Rsn*c0/(2*deltaf*FFTNcsearch)%这一句有疑问。
detected_R=expected_R;
%==============搜索计算速度,速度需要进行折半修正===========
[max_vrel,detected_vsn]=max(abs(matrix_vrel));
detected_vsn=detected_vsn-1;
if(detected_vsn>FFTNsymsearch/2-1)
 detected_vsn=detected_vsn-FFTNsymsearch;
end
expected_vsn=round(2*fc*T_OFDM*FFTNsymsearch*vrel/c0);
expected_vrel=expected_vsn*c0/(2*fc*T_OFDM*FFTNsymsearch)
detected_vrel=expected_vrel;%屏蔽
%===============距离序列==============
sequence_R=(0:FFTNcsearch-1)*c0/(2*deltaf*FFTNcsearch);
sequence_R_dB=20*log10(abs(matrix_R)/max_R);
%===============速度序列==============
sequence_vrel=(-FFTNsymsearch/2:FFTNsymsearch/2-1)*c0/(2*fc*T_OFDM*FFTNsymsearch);
sequence_vrel_dB=20*log10(abs(matrix_vrel([FFTNsymsearch/2+1:FFTNsymsearch,1:FFTNsymsearch/2])/max_vrel));
plotrlength=FFTNcsearch;
plotvrellength=FFTNsymsearch;
figure(1)
set(gcf,'color','white');
plot(sequence_R(1:plotrlength),sequence_R_dB(1:plotrlength),'b');
xlabel('range in m');
ylabel('normalized signal to noise in dB');
figure(2)
set(gcf,'color','white');
plot(sequence_vrel(1:plotvrellength),sequence_vrel_dB(1:plotvrellength),'b');
xlabel('velocity in m/s');
ylabel('normalized signal to noise in dB');
figure(3)
fftrpot=1:FFTNcsearch/4;
ffvrelpot=FFTNsymsearch/2+1:FFTNsymsearch/2+FFTNsymsearch/10;
 
[x,y]=meshgrid(sequence_vrel(ffvrelpot),sequence_R(fftrpot));
z=zeros(length(fftrpot),length(ffvrelpot));
for u=0:length(fftrpot)-1
    for n=0:length(ffvrelpot)-1
        z(u+1,n+1)=(sequence_vrel_dB(ffvrelpot(n+1))+sequence_R_dB(fftrpot(u+1)))/2;
    end
end
h=pcolor(x,y,z);
set(h,'edgecolor','none','facecolor','interp');
set(gcf,'color','white');
%colormap('Gray');
colorbar;
xlabel('relative velocity in m/s');
ylabel('range in m');
%title('the simple FFT based');
grid on;
01_102m 
相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
10天前
|
存储 机器学习/深度学习 编解码
双选择性信道下正交啁啾分复用(OCDM)的低复杂度均衡算法研究——论文阅读
本文提出统一相位正交啁啾分复用(UP-OCDM)方案,利用循环矩阵特性设计两种低复杂度均衡算法:基于带状近似的LDL^H分解和基于BEM的迭代LSQR,将复杂度由$O(N^3)$降至$O(NQ^2)$或$O(iNM\log N)$,在双选择性信道下显著提升高频谱效率与抗多普勒性能。
41 0
双选择性信道下正交啁啾分复用(OCDM)的低复杂度均衡算法研究——论文阅读
|
2月前
|
算法 数据安全/隐私保护
基于PSO粒子群优化算法的256QAM星座图的最优概率整形matlab仿真,对比PSO优化前后整形星座图和误码率
本项目基于MATLAB 2022a仿真256QAM系统,采用概率星座整形(PCS)技术优化星座点分布,结合粒子群优化(PSO)算法搜索最优整形因子v,降低误码率,提升传输性能。核心程序包含完整优化流程。
97 0
|
6天前
|
存储 机器学习/深度学习 监控
网络管理监控软件的 C# 区间树性能阈值查询算法
针对网络管理监控软件的高效区间查询需求,本文提出基于区间树的优化方案。传统线性遍历效率低,10万条数据查询超800ms,难以满足实时性要求。区间树以平衡二叉搜索树结构,结合节点最大值剪枝策略,将查询复杂度从O(N)降至O(logN+K),显著提升性能。通过C#实现,支持按指标类型分组建树、增量插入与多维度联合查询,在10万记录下查询耗时仅约2.8ms,内存占用降低35%。测试表明,该方案有效解决高负载场景下的响应延迟问题,助力管理员快速定位异常设备,提升运维效率与系统稳定性。
38 4
|
29天前
|
算法 数据挖掘 异构计算
【多目标优化算法比较】MOFPA、MOFA、MOCS、MOBA、MOHHO五种多目标优化算法性能对比研究(Matlab代码实现)
【多目标优化算法比较】MOFPA、MOFA、MOCS、MOBA、MOHHO五种多目标优化算法性能对比研究(Matlab代码实现)
【多目标优化算法比较】MOFPA、MOFA、MOCS、MOBA、MOHHO五种多目标优化算法性能对比研究(Matlab代码实现)
|
2月前
|
机器学习/深度学习 算法 5G
【MUSIC、最大似然与克拉美-罗下界】MUSIC与ESPRIT 算法来估计到达角(AoA),并尝试推导克拉美-罗下界(CRLB)以分析其性能研究(Matlab代码实现)
【MUSIC、最大似然与克拉美-罗下界】MUSIC与ESPRIT 算法来估计到达角(AoA),并尝试推导克拉美-罗下界(CRLB)以分析其性能研究(Matlab代码实现)
|
4月前
|
算法 JavaScript 数据安全/隐私保护
基于遗传算法的256QAM星座图的最优概率整形matlab仿真,对比优化前后整形星座图和误码率
本内容展示了基于GA(遗传算法)优化的256QAM概率星座整形(PCS)技术的研究与实现。通过Matlab仿真,分析了优化前后星座图和误码率(BER)的变化。256QAM采用非均匀概率分布(Maxwell-Boltzman分布)降低外圈星座点出现频率,减小平均功率并增加最小欧氏距离,从而提升传输性能。GA算法以BER为适应度函数,搜索最优整形参数v,显著降低误码率。核心程序实现了GA优化过程,包括种群初始化、选择、交叉、变异等步骤,并绘制了优化曲线。此研究有助于提高频谱效率和传输灵活性,适用于不同信道环境。
88 10
|
4月前
|
算法 JavaScript 数据安全/隐私保护
基于遗传算法的64QAM星座图的最优概率整形matlab仿真,对比优化前后整形星座图和误码率
本内容主要探讨基于遗传算法(GA)优化的64QAM概率星座整形(PCS)技术。通过改变星座点出现的概率分布,使外圈点频率降低,从而减小平均功率、增加最小欧氏距离,提升传输性能。仿真使用Matlab2022a完成,展示了优化前后星座图与误码率对比,验证了整形增益及频谱效率提升效果。理论分析表明,Maxwell-Boltzman分布为最优概率分布,核心程序通过GA搜索最佳整形因子v,以蒙特卡罗方法估计误码率,最终实现低误码率优化目标。
91 1
|
16天前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
127 3
|
21天前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
|
10天前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。

热门文章

最新文章