Searching the space of filters [Heavi]

After implementing the differential evolution algorithm in Heavi thus being able to at least find the component values to realise filter specs, I wanted to try to find odd filter and unconventional filter topologies. Then I can search the space of all topologies to see which ones can realise filtering behavior. Is this useful or novel? Probably not! Is it fun? Yes!

Searching the space

My first obstacle was finding the space of filters and figuring out which ones are unique, different, and valid (to be solved, ergo, connected). Without going through my entire train of thought, the interesting finding was that each unique circuit with L and C components lives in the space of square matrices.

Lets take a filter circuit with one extra central node. We then have:

  • Node 1: Ground

  • Node 2: Port 1

  • Node 3: Node 1

  • Node 4: Port 2

Assigning each of these nodes to a matrix row and columns. We may define each matrix index i,j as a component going from i to j. Now normally i to j = j to i. So we will use this to differentiate capacitors from inductors. Then we will state that i=i is always zero because nodes cannot be connected to themselves through a component (you can, but it doesn’t do anything).

This yields the following:

│ x C C C │ <- C's to ground
│ L x C C │
│ L L x C │
│ L L L x │
  ^
  L's to ground

The top row shows all Capacitors that go to ground (as row 1 is the ground node).

The left most column is all inductors that go to ground (as col 1 is also the ground node)

All other ones i,j describe if a capacitor or inductor go from some node to another.

We can then make a population with either 0’s (empty) or 1’s (contained in the circuit).

| 0 1 1 1 |
| 0 0 1 0 |
| 0 1 0 1 |
| 0 0 1 0 |

Circuit corresponding to the circuit matrix above.

We can verify if any matrix is actually valid by adding it to its own transpose and repeatedly multiplying it with a column vector [0 1 0 0] for example. If we repeatedly multiply the matrix with the vector and eventually get a vector with a 1 in the index corresponding to the output node, we know that a signal can propagate from the input to the output node.

We can also use the matrix to check if any other circuit that we generate is similar to a previous one as a matrix is unique.

We can now search the space of all matrices with some N number of 1’s (N components) of which none may lay on the diagonal.

We then try to find a component series that satisfies our filter spec.

Some results

For this filter design we use the following specifications:

  • 3GHz - 3.5GHz: S11 < -20dB

  • 3.7GHz - 5GHz: S21 < -20dB

After some searching the algorithm found the following circuit with 9 components and 2 intermediate nodes. Interestingly, for this filter, one node only contained a capacitor to ground which means it used 8 components. I also added a 4th order Chebychev bandpass filter (same number of components) as a comparison (or 8th order?).

The results from the optimization.

The discovered filter after optimisation.

A comparison of the filter performance.

We can see that while the Chebychev achieves similar results, it cannot quite ensure the same passband-ripple with the same isolation at 3.7GHz. Naturally, the Chebychev filter is better at higher frequencies and also has good performance below the lower band.

Other circuit

In a previous experiment I created a bunch of other strange networks. This was an interesting one.

Achieved filter response

Associated circuit.



Previous
Previous

Vector Finite Elements

Next
Next

Filter synthesis objective functions with Differential weighting (Heavi)