我是靠谱客的博主 秀丽冰棍,这篇文章主要介绍MIMO(matlab)MIMO(matlab)小结,现在分享给大家,希望可以做个参考。

MIMO(matlab)

第一种方法
代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
clear all datasize = 10000000; %仿真的符号数 EbN0 = 0:30; %信噪比 M = 2; %BPSK调制 x = randsrc(2,datasize/2,[0:1]); %数据源符号 2 x 500000 s = randsrc(1,datasize/2,[0:1]); % 1 x 500000 x1 = pskmod(x,M,pi);%BPSK编码 s1 = pskmod(s,M,pi); h = randn(2,datasize/2) + j*randn(2,datasize/2); %Rayleigh衰落信道 h = h./sqrt(2); %能量归一化 for index=1:length(EbN0) %1发1收 sigma1 = sqrt(1/(2*10.^(EbN0(index)/10))); %SISO信道高斯白噪声标准差 n0 = sigma1*(randn(2,datasize/2)+ j*randn(2,datasize/2)); y1 = x1 + n0./h; %通过SISO瑞利衰落信道后的判决变量 x2 = pskdemod(y1,M,pi); %2发1收 sigma2 = sqrt(1/(10.^(EbN0(index)/10))); %Alamouti方案每个子信道高斯白噪声标准差 n = sigma2*(randn(2,datasize/2)+j*randn(2,datasize/2)); n1(1,:) = (conj(h(1,:)).*n(1,:)+h(2,:).*conj(n(2,:)))./(sum(abs(h).^2)); n1(2,:) = (conj(h(2,:)).*n(1,:)-h(1,:).*conj(n(2,:)))./(sum(abs(h).^2)); y2 = x1 + n1; %Alamouti方案的判决变量 x3 = pskdemod(y2,M,pi); %1发2收 n2=(conj(h(1,:)).*n0(1,:)+conj(h(2,:)).*n0(2,:))./(sum(abs(h).^2)); y3=s1+n2; x4 = pskdemod(y3,M,pi); [temp,ber2(index)] = biterr(x,x2,log2(M)); [temp,ber3(index)] = biterr(x,x3,log2(M)); [temp,ber4(index)] = biterr(s,x4,log2(M)); end semilogy(EbN0,ber2,'-ko',EbN0,ber3,'-kdiamond',EbN0,ber4,'-kv') grid on legend(' no diversity(1Tx,1Rx)', 'new scheme(2Tx,1Rx)','MRRC(1Tx,2Rx)') xlabel('SNR') ylabel('BER') axis([0 30 1e-4 1]); title('MIMO')

最终结果

小结

1.仿真符号数会影响图像
如果符号数少,会导致图像下部出现失真(将代码中符号数改为1000000即可看出差别)。

第二种方法(以matlab文档为基础)
代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
frmLen = 100; % 数据长度 numPackets = 1000; % 个数 EbNo = 0:2:20; % 信噪比 N = 2; % 最大发射天线数 M = 2; % 最大接收天线数 % BPSK P = 2; hMod = comm.BPSKModulator; hDemod = comm.BPSKDemodulator('OutputDataType','double'); % 利用alzmouti方法 hAlamoutiEnc = comm.OSTBCEncoder; hAlamoutiDec = comm.OSTBCCombiner; hAWGN1Rx = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (Eb/No)',... 'SignalPower', 1); hAWGN2Rx = clone(hAWGN1Rx); % 误码率计算 hErrorCalc1 = comm.ErrorRate; hErrorCalc2 = comm.ErrorRate; hErrorCalc3 = comm.ErrorRate; % 为提高速度预置 H = zeros(frmLen, N, M); ber_noDiver = zeros(3,length(EbNo)); ber_Alamouti = zeros(3,length(EbNo)); ber_MaxRatio = zeros(3,length(EbNo)); grid on; hold on; ax = gca; ax.YScale = 'log'; xlim([EbNo(1), EbNo(end)]); ylim([1e-4 1]); xlabel('Eb/No (dB)'); ylabel('BER'); title('1x1,1x2,1x3'); for idx = 1:length(EbNo) reset(hErrorCalc1); reset(hErrorCalc2); reset(hErrorCalc3); hAWGN1Rx.EbNo = EbNo(idx); hAWGN2Rx.EbNo = EbNo(idx); for packetIdx = 1:numPackets % 生成每一帧的数据 data = randi([0 P-1], frmLen, 1); % 调制数据 modData = step(hMod, data); % Alamouti空时编码 encData = step(hAlamoutiEnc, modData); %为发射天线和接收天线构造瑞利衰落响应矩阵 H(1:N:end, :, :) = (randn(frmLen/2, N, M) + ... 1i*randn(frmLen/2, N, M))/sqrt(2); % 假设保持两个符号周期不变 H(2:N:end, :, :) = H(1:N:end, :, :); % H代表1x1, 2x1, 1x2信道 H11 = H(:,1,1); H21 = H(:,:,1)/sqrt(2); H12 = squeeze(H(:,1,:)); % 经过信道传输 chanOut11 = H11 .* modData; chanOut21 = sum(H21.* encData, 2); chanOut12 = H12 .* repmat(modData, 1, 2); % 添加AWGN(加性高斯白噪声信道)影响 rxSig11 = step(hAWGN1Rx, chanOut11); rxSig21 = step(hAWGN1Rx, chanOut21); rxSig12 = step(hAWGN2Rx, chanOut12); % Alamouti空时编码合成 decData = step(hAlamoutiDec, rxSig21, H21); % 最大距离检测 demod11 = step(hDemod, rxSig11.*conj(H11)); demod21 = step(hDemod, decData); demod12 = step(hDemod, sum(rxSig12.*conj(H12), 2)); ber_noDiver(:,idx) = step(hErrorCalc1, data, demod11); ber_Alamouti(:,idx) = step(hErrorCalc2, data, demod21); ber_MaxRatio(:,idx) = step(hErrorCalc3, data, demod12); end % 画图 semilogy(EbNo(1:idx), ber_noDiver(1,1:idx), 'r*', ... EbNo(1:idx), ber_Alamouti(1,1:idx), 'go', ... EbNo(1:idx), ber_MaxRatio(1,1:idx), 'bs') legend('1x1', '2x1','1x2'); drawnow; end fitBER11 = berfit(EbNo, ber_noDiver(1,:)); fitBER21 = berfit(EbNo, ber_Alamouti(1,:)); fitBER12 = berfit(EbNo, ber_MaxRatio(1,:)); semilogy(EbNo, fitBER11, 'r', EbNo, fitBER21, 'g', EbNo, fitBER12, 'b'); hold off;

结果
在这里插入图片描述

最后

以上就是秀丽冰棍最近收集整理的关于MIMO(matlab)MIMO(matlab)小结的全部内容,更多相关MIMO(matlab)MIMO(matlab)小结内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部