概述
- SM系统
输入的数据一部分用于天线选择,一部分用于星座调制,每次只有一根天线被激活。假设发射天线数nTx=4,调制进制M=16,则一次传输的比特长度为
设发射信号为,则前两位信号1 0用来激活天线索引,即选择第三根天线作为发射天线,后四位信号 1 1 0 0用作星座调制信号。
星座调制:PSK调制
发射信号X:PSK调制后的信号
Q:激活天线索引如何携带信息?
A:选择的是第三根天线,发射信号1 1 0 0星座调制以后符号为,则发射信号,最大似然算法检测算法检测出信号后,可以知道发射天线是第三根,译码出天线索引信号为 1 0 , 将天线索引携带信息译出。
信道H:广义信道即瑞利信道加估计误差
Q:估计误差的原理?
A:设置相关系数,相关系数根据发射接收设备自定义,计算最小均方误差
matlab仿真代码为:
main函数:
%---------SM系统仿真------------------
nTx=4;
nRx=4;
n_sm=1;
M=4;
SNR_dB=0:3:30;
L=log2(nTx)+log2(M); %一帧的长度
N=10000;%帧数
length_as=log2(nTx);
length_bit=log2(M);
BER=zeros(1,length(SNR_dB));
rho_r=0.4;
K=1;
err=0;
for i=1:length(SNR_dB)
SNR=SNR_dB(i)
rou=10^(SNR/10);%the average signal to noise ratio (SNR) at each receive antenna
N0=n_sm/rou;
err_num=0;
for k=1:N
%----------------SM调制---------------%
x=zeros(1,L);
x=rand(1,L)>0.5;
output=s_mod(x,length_bit,M,length_as,L);%sm调制函数
%-----------------信道------------------%
% H=(1/sqrt(2))*(randn(nRx,nTx) + 1i*randn(nRx,nTx));
% n=(sqrt(N0/2))*(randn(nRx,n_sm)+ 1i*randn(nRx,n_sm));
H=Generalized_Channel(nRx,nTx,rho_r,K,err);
n=1/sqrt(2)*(randn(nRx,n_sm) + 1i*randn(nRx,n_sm));% AWGN
%---------------过信道------------------%
% y= H *output'
y= H *output' + (sqrt(N0))*n ;
%----------------ML检测-----------------%
y_detect=ml_dectect(y,H,length_as,length_bit,M,L);
%---------------误比特-------------------%
err_bit=length(find(y_detect~=x));
err_num=err_num+err_bit;
end
BER(i)=err_num/L/N;
end
semilogy(SNR_dB,BER,'g-*');%y轴对数形式作图
hold on
xlabel('SNR_dB');
ylabel('BER');
title('SM系统仿真');
grid on;
SM调制模块函数:
function output=s_mod(input,length_bits,M,length_as_bits,L)
%天线索引选择
as_num=1;
output_1=zeros(1,2^(length_as_bits));
for i=1:length_as_bits
as_num=as_num+2^(i-1)*input(length_as_bits-i+1);
end
output_1(as_num)=1;
%星座调制
sum=0;
for i=1:length_bits
sum=sum+2^(i-1)*input(L-i+1);
end
output_2=pskmod(sum,M,pi/4);
output=output_1*output_2;
end
最大似然检测算法模块:
function y_detect=ml_dectect(y,H,length_as,length_bit,M,L)
frame_length=size(y,2); %接收信号列数
y_detect = zeros(frame_length,L);
% Get all bit combinations for ML receiver
bits = de2bi(0:2^L-1, 'left-msb')';%天线组合
Dist=[];
for n = 1:frame_length %信号列
for ii = 1:length(bits) %行
x=s_mod(bits(:,ii)',length_bit,M,length_as,L);
% x=output(:,ii);
% dist=norm(y-H*x','fro')^2;
dist = sum(abs(y(:,n) - H*x').^2);
Dist=[Dist , dist];
end
[~,i_m] = min(Dist); %v_m记录每列最小值,i_m记录每列最小值的行号
y_detect((n-1)*L+1 : (n)*L)=bits(:,i_m)';
end
end
广义信道模块:
function H_n=Generalized_Channel(nRx,nTx,rho_r,K,err)
%相关系数rho_r
%Rician K
%估计误差 err
H_r_S=zeros(nRx,nRx);
H_T_S=zeros(nTx,nTx);
for i=1:nRx
for j=1:nRx
H_r_S(i,j)=rho_r^(abs(i-j)/2);
end
end
for i1=1:nTx
for j1=1:nTx
H_T_S(i1,j1)=rho_r^(abs(i1-j1)/2);
end
end
H_los=ones(nRx,nTx);
H_nlos =(1/sqrt(2))*(randn(nRx,nTx) + 1i*randn(nRx,nTx));%Rayleigh channel
H1=sqrt(K/(1+K))*H_los;
H2=sqrt(1/(1+K))*H_r_S*H_nlos*H_T_S;
H=H1+H2;
H_n=H+err*(1/sqrt(2))*(randn(nRx,nTx) + 1i*randn(nRx,nTx)); %估计误差
仿真图像:
最后
以上就是清爽乌龟为你收集整理的MIMO中SM系统原理与仿真的全部内容,希望文章能够帮你解决MIMO中SM系统原理与仿真所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复