# scatteringchanmtx

Scattering channel matrix

## Syntax

``chmat = scatteringchanmtx(txarraypos,rxarraypos,numscat)``
``chmat = scatteringchanmtx(txarraypos,rxarraypos,numscat,angrange)``
``chmat = scatteringchanmtx(txarraypos,rxarraypos,txang,rxang,G)``

## Description

example

````chmat = scatteringchanmtx(txarraypos,rxarraypos,numscat)` returns the channel matrix, `chmat`, for a MIMO channel consisting of a transmitting array, a receiver array, and multiple scatterers. The transmitting array is located at `txarraypos` and the receiving array at `rxarraypos`. `numscat` is the number of point scatterers. The function generates `numscat` random transmission directions and `numscat` random receiving directions. The channel matrix describes multipath propagation through the `numscat` paths. By assumption, all paths arrive at the receiving array simultaneously implying that the channel is frequency flat. Flat frequency means that the spectrum of the signal is not changed. Path gains are derived from a zero-mean, unit-variance, complex-valued normal distribution.```

example

````chmat = scatteringchanmtx(txarraypos,rxarraypos,numscat,angrange)` also specifies the angular range, `angrange`, for transmitting and receiving angles.```

example

````chmat = scatteringchanmtx(txarraypos,rxarraypos,txang,rxang,G)` also specifies transmitting angles, `txang`, receiving angles, `rxang`, and path gains, `G`.```

## Examples

collapse all

Compute the channel matrix for a 13-element transmitting array and a 15-element receiving array. Assume that there are 17 randomly located scatterers. The arrays are uniform linear arrays with 0.45-wavelength spacing. The receiving array is 300 wavelengths away from the transmitting array. Use the channel matrix to compute a propagated signal from the transmitting array to the receiving array.

Specify the arrays. Element spacing is in units of wavelength.

```numtx = 13; sp = 0.45; txpos = (0:numtx-1)*sp; numrx = 15; rxpos = 300 + (0:numrx-1)*sp;```

Specify the number of scatterers and create the channel matrix.

```numscat = 17; chmat = scatteringchanmtx(txpos,rxpos,numscat);```

Create a signal consisting of zeros and ones. Then, propagate the signal from the transmitter to receiver.

```x = randi(2,[100 numtx])-1; y = x*chmat;```

Compute the channel matrix for a 4-by-4 transmitting URA array and a 5-by-5 receiving URA array. Assume that 17 scatterers are randomly located within a specified angular range. The element spacing for both arrays is one-half wavelength. The receive array is 500 wavelengths away from the transmitting array along the x-axis. Use the channel matrix to compute a propagated signal from the transmitting array to the receiving array. Constrain the angular span for the transmitting and receiving directions.

Specify the 4-by-4 transmitting array. Element spacing is in units of wavelength.

```Nt = 4; sp = 0.5; ygridtx = (0:Nt-1)*sp - (Nt-1)/2*sp; zgridtx = (0:Nt-1)*sp - (Nt-1)/2*sp; [ytx,ztx] = meshgrid(ygridtx,zgridtx); txpos = [zeros(1,Nt*Nt);ytx(:).';ztx(:).'];```

Specify the 5-by-5 receiving array. Element spacing is in units of wavelength.

```Nr = 5; sp = 0.5; ygridrx = (0:Nr-1)*sp - (Nr-1)/2*sp; zgridrx = (0:Nr-1)*sp - (Nr-1)/2*sp; [yrx,zrx] = meshgrid(ygridrx,zgridrx); rxpos = [500*ones(1,Nr*Nr);yrx(:).';zrx(:).'];```

Set the angular limits for transmitting and receiving.

• The azimuth angle limits for the transmitter are −45° to +45°.

• The azimuth angle limits for the receiver are −75° to +50°.

• The elevation angle limits for the transmitter are −12° to +12°.

• The elevation angle limits for the receiver are −30° to +30°.

`angrange = [-45 45 -75 50; -12 12 -30 30];`

Specify the number of scatterers and create the channel matrix.

```numscat = 6; chmat = scatteringchanmtx(txpos,rxpos,numscat,angrange);```

Create a 100-sample signal consisting of zeros and ones. Then, propagate the signal from the transmitting array to the receiving array.

```x = randi(2,[100 Nt*Nt])-1; y = x*chmat;```

Compute the channel matrix for a 4-by-4 transmitting URA array and a 5-by-5 receiving URA array. Assume there are 3 scatterers with known directions. The element spacings for both arrays is one-half wavelength. The receive array is 500 wavelengths away from the transmitting array along the x-axis. Use the channel matrix to compute a propagated signal from the transmitting array to the receiving array. Specify the transmitting and receiving directions. The number of directions determines the number of scatterers.

Specify the 4-by-4 transmitting array. Element spacing is in units of wavelength.

```Nt = 4; sp = 0.5; ygridtx = (0:Nt-1)*sp - (Nt-1)/2*sp; zgridtx = (0:Nt-1)*sp - (Nt-1)/2*sp; [ytx,ztx] = meshgrid(ygridtx,zgridtx); txpos = [zeros(1,Nt*Nt);ytx(:).';ztx(:).'];```

Specify the 5-by-5 receiving array. Element spacing is in units of wavelength.

```Nr = 5; sp = 0.5; ygridrx = (0:Nr-1)*sp - (Nr-1)/2*sp; zgridrx = (0:Nr-1)*sp - (Nr-1)/2*sp; [yrx,zrx] = meshgrid(ygridrx,zgridrx); rxpos = [500*ones(1,Nr*Nr);yrx(:).';zrx(:).'];```

Specify the transmitting and receiving angles and the gains. Then, create the channel matrix.

```txang = [20 -10 40; 0 12 -12]; rxang = [70 -5.5 27.2; 4 1 -10]; gains = [1 1+1i 2-3*1i]; chmat = scatteringchanmtx(txpos,rxpos,txang,rxang,gains);```

Create a 100-sample signal consisting of zeros and ones. Then, propagate the signal from the transmitting array to the receiving array.

```x = randi(2,[100 Nt*Nt])-1; y = x*chmat;```

## Input Arguments

collapse all

Transmitting array element positions, specified as a real-valued 1-by-Nt row vector, 2-by-Nt matrix, or 3-by-Nt matrix. Nt is the number of elements in the transmitting array.

`txarraypos` Dimensions of Transmitting Array
1-by-Nt row vectorAll transmitting array elements lie along the y-axis. The vector specifies the y-coordinates of the array elements.
2-by-Nt matrixAll transmitting array elements lie in the yz-plane. Each column of the matrix specifies the y and z coordinates of an array element.
3-by-Nt matrixThe transmitting array elements have arbitrary 3-D coordinates. Each column of the matrix specifies the x, y, and z coordinates of an array element.

Units are in wavelengths.

Example: `[-2.0,-1.0,0.0,1.0,2.0]`

Data Types: `double`

Receiving array element positions, specified as a real-valued 1-by-Nr row vector, 2-by-vmatrix, or 3-by-Nr matrix. Nt is the number of elements in the transmitting array.

`rxarraypos` Dimensions of Receiving Array
1-by-Nr row vectorAll receiving array elements lie along the y-axis. The vector specifies the y-coordinates of the array elements.
2-by-Nr matrixAll receiving array elements lie in the yz-plane. Each column of the matrix specifies the y and z coordinates of an array element.
3-by-Nr matrixThe receiving array elements have arbitrary 3-D coordinates. Each column of the matrix specifies the x, y, and z coordinates of an array element.

Units are in wavelengths.

Example: `[-2.0,-1.0,0.0,1.0,2.0]`

Data Types: `double`

Number of scatters, specified as a positive integer

Example: `7`

Data Types: `double`

Angular range of transmitting and receiving directions, specified as one of the values in this table.

Size of angrangeAngular range
real-valued 1-by-2 row vectorSpecify the same azimuth angle direction span for the transmitting and receiving arrays by using the minimum and maximum azimuth angles, ```[az_min az_max]```. The elevation direction span is –90° to +90°.
real-valued 1-by-4 row vectorSpecify the azimuth angle direction range for the transmitting and receiving arrays by using ```[tx_az_min tx_az_max rx_az_min rx_az_max]```. The first two values are the minimum and maximum of the transmitting array directions. The last two values are the minimum and maximum of the receiving array directions. The range of the elevation angles is –90° to +90°.
real-valued 2-by-2 matrixSpecify the same azimuth and elevation angle direction spans for the transmitting and receiving arrays by using the minimum and maximum azimuth and elevation angles, ```[az_min az_max; el_min el_max]```.
real-valued 2-by-4 matrixSpecify separate azimuth and elevation angle direction spans by using ```[tx_az_min tx_az_max rx_az_min rx_az_max; tx_el_min tx_el_max rx_el_min rx_el_max]```. The first and second columns form the transmitting array direction span. The last two columns form the receiving array direction span.

Units are in degrees.

Example: `[-45 45 -30 30; -10 20 -5 30]`

Data Types: `double`

Transmission path angles, specified as a real-valued 1-by-Ns row vector or a 2-by-Ns matrix. Ns is the number of scatterers specified by `numscat`.

• When `txang` is a vector, each element specifies the azimuth angle of a path. The elevation angle of the path is zero degrees.

• When `txang` is a matrix, each column specifies the azimuth and elevation angles of a path in the form `[az;el]`.

Example: `[4 -2; 0 35]`

Data Types: `double`

Receiving path angles, specified as a real-valued 1-by-Ns row vector or a 2-by-Ns matrix. Ns is the number of scatterers specified by `numscat`.

• When `rxang` is a vector, each element specifies the azimuth angle of a path. The elevation angle of the path is zero degrees.

• When `rxang` is a matrix, each column specifies the azimuth and elevation angles of a path in the form `[az;el]`.

Example: `[4 -2; 0 35]`

Data Types: `double`

Path gains, specified as a 1-by-Ns complex-valued row vector. Ns is the number of scatterers specified by `numscat`. The gains apply to the corresponding paths. Units are dimensionless.

Example: `exp(1i*pi/3)`

Data Types: `double`
Complex Number Support: Yes

## Output Arguments

collapse all

MIMO channel matrix, returned as an Nt-by-Nr complex-valued matrix. Nt is the number of elements in the transmitting array. Nr is the number of elements in the receiving array.

Data Types: `double`
Complex Number Support: Yes

 Heath, R. Jr. et al. “An Overview of Signal Processing Techniques for Millimeter Wave MIMO Systems”, arXiv.org:1512.03007 [cs.IT], 2015.

 Tse, D. and P. Viswanath, Fundamentals of Wireless Communications, Cambridge: Cambridge University Press, 2005.

 Paulraj, A. Introduction to Space-Time Wireless Communications, Cambridge: Cambridge University Press, 2003.