【OMP信道估计】基于OMP压缩感知的信道估计算法的MATLAB仿真
生活随笔
收集整理的這篇文章主要介紹了
【OMP信道估计】基于OMP压缩感知的信道估计算法的MATLAB仿真
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.軟件版本
MATLAB2021a
2.本算法理論知識
3.核心代碼
clc; clear; close all; warning off; addpath 'func\'CYC = 20; for ij = 1:CYCijCYC = 20;RandStream.setDefaultStream(RandStream('mt19937ar','seed',ij));Len = 8;Nc = 64*Len;%子載波數(shù)T = 6.4e-6;TG = 1.6e-6;fLen = 512;I = 4;%導頻坐標pilot_index = [1:I:Nc];N = Nc;%總載波數(shù)[Rm,Cn] = size(pilot_index);%導頻子載波數(shù)%多普勒頻移doppler_frequency = 0.01;ts = 1e-6; %保護時間CP = Nc/Len/(T/TG);C = 2; SNR_dB = [0:2:20];err_rate = ones(C,length(SNR_dB));ERR_RATE = ones(1,length(SNR_dB));ERR_RATE2 = ones(1,length(SNR_dB));ERR_RATE3 = ones(1,length(SNR_dB));h1 = zeros(N,1);h2 = zeros(N,1);%多徑個數(shù)multipath_number = 3;delay = [0,1e-6,2e-6]/ts;%各徑延遲trms = 4e-6/ts; %多徑平均延遲var_pow = 10*log10(exp(-delay/trms));RLchannel = rayleighchan(1,doppler_frequency,delay,var_pow);RLchannel.StorePathGains = 1;test = ones(C,1);%測試向量filter(RLchannel,test);%提取瑞利信道h_RL = RLchannel.PathGains;for ii=1:Cx_Trans = randint(N,1,4);%QPSK調制X = func_QPSK_mod(x_Trans);%待傳輸信號x = func_OFDM_mod(X,fLen,CP,Nc); %信道for hh=1:multipath_number;h1(1+delay(hh))= h_RL(ii,hh);%信道的沖擊響應end%H為根據(jù)22計算得到的HH = fft(h1,fLen);%收到的信號y_r = filter(h1,1,x);for SNR_index=1:length(SNR_dB);%加噪聲y = awgn(y_r,SNR_dB(SNR_index),'measured'); %去CPy0 = y(CP+1:CP+Nc,1);Y = fft(y0);%你所要求的不太對的函數(shù)寫法est_H = ChannelEstimation(SNR_dB(SNR_index),1,delay,doppler_frequency,var_pow);%CS信道估計,H_esti為估計得到的H[H_esti,h2] = func_omp(Y,X,Nc,fLen,pilot_index,multipath_number);%計算估計得到的Ap部分Ap = abs(h2);%計算估計得到的exp部分exps = angle(h2);%估計的導頻加信號的值X_esti = Y./H_esti;x_omp_rec = func_QPSK_demod(X_esti);[err_number,err_rate(ii,SNR_index)] = symerr(x_Trans,x_omp_rec);err_num(ii,SNR_index) = sum(sum(cov(x_Trans,x_omp_rec)));mse_num(ii,SNR_index) = mse(abs(h1(1:multipath_number)-h2(1:multipath_number))); endendfor jj=1:length(SNR_dB);ERR_RATE(1,jj) = mean(err_rate(:,jj));ERR_RATE2(1,jj)= mean(err_num(:,jj));ERR_RATE3(1,jj)= mean(mse_num(:,jj));endS1 = [];S2 = [];S3 = [];if ij > 1load func\tmps.matendS1 = [S1;ERR_RATE];S2 = [S2;ERR_RATE2]; S3 = [S3;ERR_RATE3]; save func\tmps.mat S1 S2 S3 SNR_dBaddpath 'func\' endload func\tmps.mat ERR_RATEs = mean(S1,1); ERR_RATE2s = mean(S2,1); ERR_RATE3s = mean(S3,1);figure; plot(SNR_dB,ERR_RATE2s/max(ERR_RATE2s),'b-s'); hold on; xlabel('SNR'); ylabel('信號相關性'); grid on;figure; semilogy(SNR_dB,ERR_RATEs,'b-s'); hold on; xlabel('SNR'); ylabel('系統(tǒng)誤碼率'); grid on;figure; semilogy(SNR_dB,ERR_RATE3s,'b-s'); hold on; xlabel('SNR'); ylabel('信道估計H 估計誤差'); grid on;save R.mat SNR_dB ERR_RATEs ERR_RATE2s ERR_RATE3s%顯示原始信道和估計后的信道 ho = h1(1:multipath_number); hest = h2(1:multipath_number); ho hest4.操作步驟與仿真結論
?5.參考文獻
[1]趙錦航, 劉健均, 周思源,等. 基于BIC停止準則的改進A*OMP信道估計算法[J]. 計算機應用與軟件, 2019, 36(5):6.
[2]朱芹, 王彪. 基于改進BOMP算法的水聲信道估計[J]. ?2022(8).
?A01-102
6.完整源碼獲得方式
方式1:微信或者QQ聯(lián)系博主
方式2:訂閱MATLAB/FPGA教程,免費獲得教程案例以及任意2份完整源碼
總結
以上是生活随笔為你收集整理的【OMP信道估计】基于OMP压缩感知的信道估计算法的MATLAB仿真的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【双边滤波】基于小波变换的多尺度自适应T
- 下一篇: 【CMAC小脑】CMAC逼近sin(t)