matlab天线测试数据处理,MIMO信号检测的代码里面修改天线数

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

如题,我有个代码用于MIMO信号检测的,但是只要我一修改天线数就会不能运行,求大神指导修改啊

代码如下

%%

% ML-ZF-MMSE 检测算法比较

% bpsk调制-瑞利衰落信道-2个发送端,2个接收端

%%

clc

clear

N = 10^4; % 发送的符号数目

Eb_N0_dB = 0:20; % 信噪比范围

nTx = 2;

nRx = 2;

%%

%ML

for ii = 1:length(Eb_N0_dB)

% 发送端

ip = rand(1,N)>0.5; % 等概率产生0和1

s = 2*ip-1; % BPSK 调制 0 -> -1; 1 -> 0

sMod = kron(s,ones(nRx,1)); %

sMod = reshape(sMod,[nRx,nTx,N/nTx]); % 将矩阵转换为[nRx,nTx,N/nTx ]形式

h = 1/sqrt(2)*[randn(nRx,nTx,N/nTx) + j*randn(nRx,nTx,N/nTx)]; % 瑞利衰落信道

n = 1/sqrt(2)*[randn(nRx,N/nTx) + j*randn(nRx,N/nTx)]; % 0均值高斯白噪声

% 加入噪声后在信道中传输

% a = h.*sMod; %将两个矩阵的第三维分别相乘

% b = sum(h.*sMod,2);%将第三维加为一列

% c = squeeze(sum(h.*sMod,2));%变换为2x10矩阵

% d = 10^(-Eb_N0_dB(ii)/20)*n;%噪声为2x10矩阵

y = squeeze(sum(h.*sMod,2)) + 10^(-Eb_N0_dB(ii)/20)*n;

% 最大似然接收

% ----------------------------

% 当 [s1 s2 ] = [+1,+1 ]

sHat1 = [1 1];

sHat1 = repmat(sHat1,[1 ,N/2]);

sHat1Mod = kron(sHat1,ones(nRx,1));

sHat1Mod = reshape(sHat1Mod,[nRx,nTx,N/nTx]);%发送矩阵

zHat1 = squeeze(sum(h.*sHat1Mod,2)) ; %接收矩阵

%e = abs(y - zHat1); %取理论接收与实际接收的绝对值

J11 = sum(abs(y - zHat1),1);%将两行加为一行

% 当 [s1 s2 ] = [+1,-1 ]

sHat2 = [1 -1];

sHat2 = repmat(sHat2,[1 ,N/2]);

sHat2Mod = kron(sHat2,ones(nRx,1));

sHat2Mod = reshape(sHat2Mod,[nRx,nTx,N/nTx]);

zHat2 = squeeze(sum(h.*sHat2Mod,2)) ;

J10 = sum(abs(y - zHat2),1);

% 当 [s1 s2 ] = [-1,+1 ]

sHat3 = [-1 1];

sHat3 = repmat(sHat3,[1 ,N/2]);

sHat3Mod = kron(sHat3,ones(nRx,1));

sHat3Mod = reshape(sHat3Mod,[nRx,nTx,N/nTx]);

zHat3 = squeeze(sum(h.*sHat3Mod,2)) ;

J01 = sum(abs(y - zHat3),1);

% 当 [s1 s2 ] = [-1,-1 ]

sHat4 = [-1 -1];

sHat4 = repmat(sHat4,[1 ,N/2]);

sHat4Mod = kron(sHat4,ones(nRx,1));

sHat4Mod = reshape(sHat4Mod,[nRx,nTx,N/nTx]);

zHat4 = squeeze(sum(h.*sHat4Mod,2)) ;

J00 = sum(abs(y - zHat4),1);

% 从四组数值中找出最小值jj,所在位置dd

rVec = [J11;J10;J01;J00];

[jj dd] = min(rVec,[],1);

% mapping the minima to bits

ref = [1 1; 1 0; 0 1; 0 0 ];

ipHat = zeros(1,N);

ipHat(1:2:end) = ref(dd,1);

ipHat(2:2:end) = ref(dd,2);

% 统计错误

f = find([ip - ipHat]);%发生错误所在位置

nErrML(ii) = size(find([ip - ipHat]),2);%错误个数

end

%%

%ZF

for ii = 1:length(Eb_N0_dB)

% 发送端

ip = rand(1,N)>0.5; % 等概率生成 0,1

s = 2*ip-1; % BPSK 调制 0 -> -1; 1 -> 0

%a = ones(nRx,1)

sMod = kron(s,ones(nRx,1)); %

sMod = reshape(sMod,[nRx,nTx,N/nTx]); % 变换矩阵形式为[nRx,nTx,N/NTx ]

h = 1/sqrt(2)*[randn(nRx,nTx,N/nTx) + j*randn(nRx,nTx,N/nTx)]; % 瑞利信道

n = 1/sqrt(2)*[randn(nRx,N/nTx) + j*randn(nRx,N/nTx)]; % 0均值高斯白噪声

% 加入白噪声后在信道中传输

y = squeeze(sum(h.*sMod,2)) + 10^(-Eb_N0_dB(ii)/20)*n;

% 接收端

% 求伪逆矩阵 G = inv(H^H*H)*H^H

% H^H*H 的矩阵维数为 [nTx x nTx]. 即 [2 x 2]

% [2x2]矩阵的转置为 [a b; c d] = 1/(ad-bc)[d -b;-c a]

hCof = zeros(2,2,N/nTx);

hCof(1,1,:) = sum(h(:,2,:).*conj(h(:,2,:)),1); % d

hCof(2,2,:) = sum(h(:,1,:).*conj(h(:,1,:)),1); % a

hCof(2,1,:) = -sum(h(:,2,:).*conj(h(:,1,:)),1); % c

hCof(1,2,:) = -sum(h(:,1,:).*conj(h(:,2,:)),1); % b

hDen = ((hCof(1,1,:).*hCof(2,2,:)) - (hCof(1,2,:).*hCof(2,1,:))); % ad-bc

hDen = reshape(kron(reshape(hDen,1,N/nTx),ones(2,2)),2,2,N/nTx); %

hInv = hCof./hDen; % inv(H^H*H)

hMod = reshape(conj(h),nRx,N); % H^H

yMod = kron(y,ones(1,2)); % 接收信号矩阵化

yMod = sum(hMod.*yMod,1); % H^H * y

yMod = kron(reshape(yMod,2,N/nTx),ones(1,2)); %

yHat = sum(reshape(hInv,2,N).*yMod,1); % inv(H^H*H)*H^H*y

% 接收端 硬判决解码

ipHat = real(yHat)>0;

% 统计错误

nErrZF(ii) = size(find([ip- ipHat]),2);

end

%%

%MMSE

for ii = 1:length(Eb_N0_dB)

% 发送端

ip = rand(1,N)>0.5;

s = 2*ip-1; % BPSK 调制 0 -> -1; 1 -> 0

sMod = kron(s,ones(nRx,1)); %

sMod = reshape(sMod,[nRx,nTx,N/nTx]); % [nRx,nTx,N/NTx ]

h = 1/sqrt(2)*[randn(nRx,nTx,N/nTx) + j*randn(nRx,nTx,N/nTx)];

n = 1/sqrt(2)*[randn(nRx,N/nTx) + j*randn(nRx,N/nTx)];

% 加入高斯白噪声后在信道中传输

y = squeeze(sum(h.*sMod,2)) + 10^(-Eb_N0_dB(ii)/20)*n;

% 接收端

% MMSE W = inv(H^H*H+sigma^2*I)*H^H

% H^H*H i的维数为[nTx x nTx]. 即[2 x 2]

% [2x2]矩阵的逆 [a b; c d] = 1/(ad-bc)[d -b;-c a]

hCof = zeros(2,2,N/nTx) ;

hCof(1,1,:) = sum(h(:,2,:).*conj(h(:,2,:)),1) + 10^(-Eb_N0_dB(ii)/10); % d

hCof(2,2,:) = sum(h(:,1,:).*conj(h(:,1,:)),1) + 10^(-Eb_N0_dB(ii)/10); % a

hCof(2,1,:) = -sum(h(:,2,:).*conj(h(:,1,:)),1); % c

hCof(1,2,:) = -sum(h(:,1,:).*conj(h(:,2,:)),1); % b

hDen = ((hCof(1,1,:).*hCof(2,2,:)) - (hCof(1,2,:).*hCof(2,1,:))); % ad-bc

hDen = reshape(kron(reshape(hDen,1,N/nTx),ones(2,2)),2,2,N/nTx);

hInv = hCof./hDen; % inv(H^H*H)

hMod = reshape(conj(h),nRx,N); % H^H

yMod = kron(y,ones(1,2));

yMod = sum(hMod.*yMod,1); % H^H * y

yMod = kron(reshape(yMod,2,N/nTx),ones(1,2));

yHat = sum(reshape(hInv,2,N).*yMod,1); % inv(H^H*H)*H^H*y

%接收端

ipHat = real(yHat)>0;

% 统计错误

nErrMMSE(ii) = size(find([ip- ipHat]),2);

end

%%

%无衰落bpsk调制

for ii = 1:length(Eb_N0_dB)

% Transmitter

ip = rand(1,N)>0.5;

s = 2*ip-1;

n = 1/sqrt(2)*[randn(1,N) + j*randn(1,N)];

% Noise addition

y = s + 10^(-Eb_N0_dB(ii)/20)*n; % additive white gaussian noise

% receiver - hard decision decoding

ipHat = real(y)>0;

% counting the errors

nErrBPSK(ii) = size(find([ip- ipHat]),2);

end

%%

%比特错误率

simBer1 = nErrML/N; % 仿真比特错误率

simBer2 = nErrZF/N;

simBer3 = nErrMMSE/N;

% simBer4 = nErrBPSK/N;

EbN0Lin = 10.^(Eb_N0_dB/10);

% theoryBer_nRx1 = 0.5.*(1-1*(1+1./EbN0Lin).^(-0.5));

% p = 1/2 - 1/2*(1+1./EbN0Lin).^(-1/2);

% theoryBerMRC_nRx2 = p.^2.*(1+2*(1-p));

theoryBerBPSK = 0.5*erfc(sqrt(EbN0Lin)); % bpsk theoretical ber 0.5erfc(sqrt(r))

%%

%作图

close all

figure

% semilogy(Eb_N0_dB,theoryBer_nRx1,'bp-','LineWidth',2);

% semilogy(Eb_N0_dB,theoryBerMRC_nRx2,'kd-','LineWidth',2);

semilogy(Eb_N0_dB,simBer1,'*g-','LineWidth',2); %ML

hold on

semilogy(Eb_N0_dB,simBer2,'oy-','LineWidth',2); %ZF

semilogy(Eb_N0_dB,simBer3,'+r-','LineWidth',2); %MMSE

% semilogy(Eb_N0_dB,simBer4,'mx-','LineWidth',2);

semilogy(Eb_N0_dB,theoryBerBPSK,'b.-','LineWidth',2); %BPSK

axis([0 20 10^-5 0.5])

grid on

legend('sim (nTx=2, nRx=2, ML)','sim (nTx=2, nRx=2, ZF)','sim (nTx=2, nRx=2, MMSE)', 'theory BPSK');

% legend('theory (nTx=1,nRx=1)', 'theory (nTx=1,nRx=2, MRC)', 'sim (nTx=2, nRx=2, ML)','sim (nTx=2, nRx=2, ZF)','sim (nTx=2, nRx=2, MMSE)', 'theory BPSK');

xlabel('Average Eb/No,dB');

ylabel('Bit Error Rate');

title('BER for BPSK modulation with 2x2 MIMO and three kinds of equalizer (Rayleigh channel)');

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值