单用户MIMO

% Single User MIMO
% You need to have the Communications Toolbox installed to run this program

%Developed in MATLAB R2008b

%----------------------------------------------------
% This MATLAB program creates and runs a Single User MIMO system, with 2
% transmitter antennas and one receiver antenna. The following principles
% are used:
% 1. Alamouti Space-Time Block Code
% 2. Binary Phase Shift Keying (BPSK)
% 3. Rayleigh channel with flat fading

%The following charts are computed:
% 1. Signal to Noise Ratio versus Bit Error Rate (BER)
%----------------------------------------------------
clear
N = 15000; % number of bits or symbols
SNRdB = [-3:20]; % multiple SNR values

for ii = 1:length(SNRdB)

% Transmitter
bpsk_bitset = rand(1,N)>0.5; % generating 0,1 with equal probability
s = 2*bpsk_bitset-1; % BPSK modulation 0 -> -1; 1 -> 0

% Alamouti Space Time Block Code 
x_vector = zeros(2,N);   %2 rows of N columns, all values are zero. This is the transmitter vector.
x_vector(:,1:2:end) = (1/sqrt(2))*reshape(s,2,N/2); % [x1 x2  ...]
x_vector(:,2:2:end) = (1/sqrt(2))*(kron(ones(1,N/2),[-1;1]).*flipud(reshape(conj(s),2,N/2))); % [-x2* x1* ....]

rayleighchannel = 1/sqrt(2)*[randn(1,N) + j*randn(1,N)]; % Rayleigh channel
rayleighchannel_vector = kron(reshape(rayleighchannel,2,N/2),ones(1,2)); % repeating the same channel for two symbols    

n = 1/sqrt(2)*[randn(1,N) + j*randn(1,N)]; % white gaussian noise, 0dB variance

% Channel and noise Noise addition
y = sum(rayleighchannel_vector.*x_vector,1) + 10^(-SNRdB(ii)/20)*n;

% Receiver
%we create a Y vector here
y_vector = kron(reshape(y,2,N/2),ones(1,2)); % [y1 y1 ... ; y2 y2 ...]
y_vector(2,:) = conj(y_vector(2,:)); % [y1 y1 ... ; y2* y2*...]

% forming the equalization matrix
H_arrayvector = zeros(2,N); %this is the 'H' vector, 2 rows of N columns, all values are zero
H_arrayvector(:,[1:2:end]) = reshape(rayleighchannel,2,N/2); % [h1 0 ... ; h2 0...]
H_arrayvector(:,[2:2:end]) = kron(ones(1,N/2),[1;-1]).*flipud(reshape(rayleighchannel,2,N/2)); % [h1 h2 ... ; h2 -h1 ...]
H_arrayvector(1,:) = conj(H_arrayvector(1,:)); %  [h1* h2* ... ; h2 -h1 .... ]
hEqPower = sum(H_arrayvector.*conj(H_arrayvector),1);

Code_Data_SU = sum(H_arrayvector.*y_vector,1)./(hEqPower); % [h1*y1 + h2y2*, h2*y1 -h1y2*, ... ]
%Code_Data_SU(2:2:end) = conj(Code_Data_SU(2:2:end));

% receiver - hard decision decoding
bpsk_bitset_bar = real(Code_Data_SU)>0;  %finding the real part of the Code_Data part, required for hard decision decoding.

% counting the errors
nErr(ii) = size(find([bpsk_bitset- bpsk_bitset_bar]),2); %This implements the equation to find the BER from the hard decision for BPSK.

%Simply find the hard decision and subtract from the BPSK actual value to
%find the Bit Error Rate.

end
SNRdB1 = -3:20;
for s = 1:length(SNRdB1)
SNR_Linear = 10^(SNRdB1(s)/10); %SNR dB to Linear conversion
% ddd = abs(Code_Data_SU);
Capacity_SU(1,s) = 0.5 * log(1 + (0.5 * SNR_Linear .* sum(abs(Code_Data_SU)))); %Capacity Equation
% Channel Capacity = (1/2) log(1 + (SNRH))
end
simBer = nErr/N; % simulated ber
SNRdB_Linear = 10.^(SNRdB/10);
%Calculating theoretical Alamouti code diversity
Alamouti_probability = 1/2 - 1/2
(1+2./SNRdB_Linear).^(-1/2); %Here we calculate theoretical Alamouti based on formula, but it is not actually plotted in the cooperative MIMO case.
Theoretical_Alamouti = Alamouti_probability.^2.(1+2(1-Alamouti_probability)); %Theoretical Alamouti performance will always be better,
% but not necessary to plot it since we are comparing the
%simulated performance.
close all
figure(1);
semilogy(SNRdB,Theoretical_Alamouti,'c+-','LineWidth',2); %plots a semilogy plot of SNR versus BER
hold on
semilogy(SNRdB,simBer,'mo-','LineWidth',2);
axis([0 25 10^-5 0.5])
grid on
legend('theory (nTx=2, nRx=1, Alamouti)', 'sim (nTx=2, nRx=1, Alamouti)');
xlabel('SNR, dB');
ylabel('Bit Error Rate');
title('BER for BPSK modulation with Alamouti STBC (Rayleigh channel)');
figure(2);
hold on
plot(SNRdB1,Capacity_SU); %Plot the capacity of Single User MIMO.
%axis([SNRdB(1) max(SNRdB) 10^-5 0.5]);
grid on
xlabel('SNR dB');
ylabel('Instantaneous Capacity');
title(['Curves for comparison']);

image.png

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343