1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJaUk51t
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
通过设计训练序列或在数据中周期性地插入导频符号来进行估计的方法比较常用。而盲估计和半盲信道估计算法无需或者需要较短的训练序列,频谱效率高,因此获得了广泛的研究。但是一般盲估计和半盲估计方法的计算复杂度较高,且可能出现相位模糊(基于子空间的方法)、误差传播(如判决反馈类方法)、收敛慢或陷入局部极小等问题,需要较长的观察数据,这在一定程度上限制了它们的实用性。
4.部分源码
..........................................................
M = 10;
%Loop until the job is killed or until the SNR or BER target is reached.
MTKL = 200;
Berrs1 = zeros(M,MTKL);
Berrs2 = zeros(M,MTKL);
for mk = 1:MTKL
mk
MSE = [];
MCE = [];
for NT = NTS
SNR = SNRset;
%Convert from SNR (in dB) to noise power spectral density.
N0 = 1/(10^(SNR/10));
error_count = 0;
bit_count = 0;
%semi-blind channel estimation
H_length = 1;
fm = 50;
fs = 1e4;
B = fir1(1023,fm/(fs/2));
n_I = randn(nTx*nRx,H_length);
n_Q = randn(nTx*nRx,H_length);
a_I = filter2(B,n_I);
a_Q = filter2(B,n_Q);
Rayleigh_fading = 1/sqrt(2)*[a_I+j*a_Q];
H = reshape(Rayleigh_fading,[nRx,nTx,H_length]);
iteration_index = 0;
ii = 1;
%generating the training bits
.....................................................................
n = 1/sqrt(2)*[randn(nRx,NT(ii)) + j*randn(nRx,NT(ii))];
%received training signal Y
Y = H*training_block+10^(-SNR/20)*n;
%Least square channel estimation
H_hat = Y*training_block'*inv(training_block*training_block');
number_iteration = M;
H_updated_hat = H_hat;
A = [];
J = [];
S_Hat = [];
..................................................................
tmps = abs(H_updated_hat-H);
MSE(iteration_index) = mse(tmps(:));
MCE(iteration_index) =(1/(nTx*nRx))*sum(sum((abs(H_updated_hat-H).^2)));
end
end
Berrs1(:,mk) = MSE;
Berrs2(:,mk) = MCE;
end
for i = 1:M
tmp1 = Berrs1(i,:);
tmp2 = Berrs2(i,:);
INDX1 = [];
INDX2 = [];
for j = 1:length(tmp1)
if isnan(tmp1(j)) == 1
INDX1 = [INDX1,j];
end
if tmp1(j) > 1000
INDX1 = [INDX1,j];
end
end
for j = 1:length(tmp2)
if isnan(tmp2(j)) == 1
INDX2 = [INDX2,j];
end
if tmp2(j) > 1000
INDX2 = [INDX2,j];
end
end
tmp1(INDX1) = [];
tmp2(INDX2) = [];
Bersf1(i) = sqrt(mean(tmp1));
Bersf2(i) = mean(tmp2);
end
figure;
semilogy(1:M,Bersf1,'b-o');
xlabel('number of iterations');
ylabel('MSE');
grid on
figure;
semilogy(1:M,Bersf2,'b-o');
xlabel('number of iterations');
ylabel('MCE');
grid on
if NTS == 4
save r4.mat M Bersf1 Bersf2
end
if NTS == 10
save r10.mat M Bersf1 Bersf2
end
if NTS == 20
save r20.mat M Bersf1 Bersf2
end
01_105_m