# makepassive

Enforce passivity of S-parameters

## Syntax

`sparams_passive = makepassive(sparams)hsp = makepassive(hs)`

## Description

`sparams_passive = makepassive(sparams)` makes an array of S-parameters passive. Both `sparams` and `sparams_passive` are N-by-N-by-M arrays representing M N-port S-parameters.

The `makepassive` function enforces the following conditions on `sparams`:

$\begin{array}{c}S\left(-j\omega \right)={S}^{*}\left(j\omega \right)\\ {‖S\left(j\omega \right)‖}_{2}\le 1\end{array}$

The notation ${‖S‖}_{2}$ represents the 2-norm, or singular-value decomposition, of S.

`hsp = makepassive(hs)` creates a passive S-parameter object from the S-parameter object `hs`.

## Input Arguments

 `hs` N-port S-parameters, specified as an RF Toolbox™ S-parameter object. `sparams` `sparams` can represent either an active network or a passive network. To check if `sparams` is passive, use the `ispassive` function.

## Output Arguments

 `sparams_passive` The `makepassive` function uses a purely mathematical method to calculate `sparams_passive`. As a result, the array `sparams_passive` does not represent the same network as `sparams`. `sparams` and `sparams_passive` do not represent the same network unless `sparams` and `sparams_passive` are equal. The more closely `sparams` represents a passive network, the better the approximation `sparams_passive` is to that network. Therefore, `makepassive` generates the most realistic results when `sparams` is active only due to small numerical errors.

## Examples

Enforce passivity of the S-parameters that represent a passive network:

```ckt = read(rfckt.passive,'passive.s2p'); sparams = ckt.NetworkData.Data; Is_Passive = ispassive(sparams) sparams_new = makepassive(sparams); Is_Passive = ispassive(sparams_new) ckt.NetworkData.Data = sparams_new; ```