File:BD-CSI.png

Page contents not supported in other languages.
This is a file from the Wikimedia Commons
From Wikipedia, the free encyclopedia

Original file(1,084 × 526 pixels, file size: 50 KB, MIME type: image/png)

Summary

Description
English: The explanation is available via the following link. Developed according to [1].
Date
Source Own work
Author Kirlf

Python Source Code

import numpy as np 
import pandas as pd

class ZeroForcingBD:
    def __init__(self, H, Mrs_arr):
        Mr, Mt = np.shape(H)
        self.Mr = Mr
        self.Mt = Mt
        self.H = H
        self.Mrs_arr = Mrs_arr
    
    def __routines(self, H, mr, shift):
        
        # used in self.process() - See example above for illustration 
        # inputs: 
        #       H - the whole channel matrix
        #       mr - number of receive antennas of the i-th user
        #       shift - how much receive antennas were considered before
        # outputs:
        #       Uidx, Sigmaidx, Vhidx - SVD decomposition of the H_iP_i 
        #       d - rank of the hat H_i
        #       Hidx - H_i (channel matrix for the i-th user)
        #       r - rank of the H_i
        
        Hidx = H[0+shift:mr+shift,:] # H_i (channel matrix for the i-th user)
        r = np.linalg.matrix_rank(Hidx) # rank of the H_i
        del_idx = [i for i in range(0+shift, mr+shift, 1)] # row indeces of H_i in H
        H_hat_idx = np.delete(H, del_idx, 0) # hat H_i
        d = np.linalg.matrix_rank(H_hat_idx) # rank of the hat H_i
        U, Sigma, Vh = np.linalg.svd(H_hat_idx) # SVD
        Vhn = Vh[d:, :] # null-subspace of V^H
        Vn = np.matrix(Vhn).H # null-subspace of V
        Pidx = np.dot(Vn, np.matrix(Vn).H) # projection matrix
        Uidx, Sigmaidx, Vhidx = np.linalg.svd(np.dot(Hidx, Pidx)) # SVD of H_iP_i 
        return Uidx, Sigmaidx, Vhidx, d, Hidx, r
    
    def process(self):
        
        # used in self.obtain_matrices()
        # outputs:
        #       F - whole filtering (pre-coding) matrix (array of arrays)
        #       D - whole demodulator (post-processing) matrix (array of arrays)
        #       H - the whole channel matrix (array of arrays)
        
        shift = 0
        H = self.H
        F = []
        D = []
        Hs = []
        for mr in self.Mrs_arr:
            Uidx, Sigmaidx, Vhidx, d, Hidx, r = self.__routines(H, mr, shift)
            Vhidx1 = Vhidx[:r,:] # signal subspace
            Fidx = np.matrix(Vhidx1).H
            F.append(Fidx)
            D.append(Uidx)
            Hs.append(Hidx)
            shift = shift + mr
        return F, D, Hs
    
    def obtain_matrices(self):
        
        # used to obtain pre-coding and post-processing matrices
        # outputs:
        #       FF - whole filtering (pre-coding) matrix 
        #       DD - whole demodulator (post-processing) matrix (array of arrays)
        
        F, D, Hs = self.process()
        FF = np.hstack(F)
        # Home Task: calculation of the demodulator matrices :)
        return FF

Mrs_arr = [3,2,3] 
# 1st user have 3 receive antennas, 2nd user - 2 receive antennas, 3d user - 3 receive antennas 
Mr = sum(Mrs_arr) # total number of the receive antennas 
Mt = 8 # total number of the transmitt antennas
H = (np.random.randn(Mr,Mt) + 1j*np.random.randn(Mr, Mt))/np.sqrt(2); #Rayleigh flat faded channel matrix (MrxMt)

BD = ZeroForcingBD(H, Mrs_arr)
F, D, Hs = BD.process()
FF = BD.obtain_matrices()

df = pd.DataFrame(np.dot(H, FF))
df[abs(df).lt(1e-14)] = 0
print(pd.DataFrame(np.round(np.real(df),100)))

Licensing

I, the copyright holder of this work, hereby publish it under the following license:
w:en:Creative Commons
attribution share alike
This file is licensed under the Creative Commons Attribution-Share Alike 4.0 International license.
You are free:
  • to share – to copy, distribute and transmit the work
  • to remix – to adapt the work
Under the following conditions:
  • attribution – You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
  • share alike – If you remix, transform, or build upon the material, you must distribute your contributions under the same or compatible license as the original.
  1. Spencer, Quentin H., A. Lee Swindlehurst, and Martin Haardt. "Zero-forcing methods for downlink spatial multiplexing in multiuser MIMO channels." IEEE transactions on signal processing 52.2 (2004): 461-471.

Captions

Example of the block diagonalized real value channel matrix (7 transmitt antennas at the base station, 2 user equipments).

Items portrayed in this file

depicts

15 February 2019

image/png

fb17b34bf3baedc56cdcbf584fe52501bd6fd485

50,863 byte

526 pixel

1,084 pixel

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current12:34, 8 May 2019Thumbnail for version as of 12:34, 8 May 20191,084 × 526 (50 KB)KirlfNew numbers. Bug is fixed.
09:18, 15 February 2019Thumbnail for version as of 09:18, 15 February 20191,015 × 653 (172 KB)KirlfUser created page with UploadWizard
The following pages on the English Wikipedia use this file (pages on other projects are not listed):

Global file usage

The following other wikis use this file:

  • Usage on ko.wikipedia.org

Metadata