Lumped filter design using coupling matrix techniques

Learn how to turn your synthesized coupling matrix into lumped elements for low frequency applications where waveguide and planar implementations wouldn’t make sense. It is also interesting reading for those doing miniature filters on thin film or MMIC at higher frequencies. In this tutorial a lumped element filter is synthesized and realized using coupling matrix techniques. A MATLAB code snipped is also provided that can automatically calculate element values from the couplings. The filter response is synthesized with the settings below:

Lumped filter, synthesis, settings

The response is shown below, note the synthesized transmission zero at 80 MHz:

Lumped filter, synthesis, response

The physical coupling matrix below indicates that there is a negative non-adjacent coupling (1-3) which is responsible for the transmission zero. However, how the signs of each coupling are realized depends on the topology as will become apparent in this tutorial. The filter becomes asynchronous due to the non-adjacent coupling.

Lumped filter, synthesis, matrix

A coupled resonator filter can be modeled by coupling the resonators with inverters. The inverter represents the capacitive and magnetic coupling. These inverters are later on replaced by their equivalent lumped networks. The inductors are all set to the same fixed value and the corresponding resonator capacitors, C1, C2… are calculated to resonate at the frequency given by the diagonal coupling matrix indices.

Lumped filter, topology, J-inverters

A lumped element representation is given below, based on a PI-network of capacitors. The resonator-resonator coupling, M, in the coupling matrix gives each coupling capacitor, Cc. The external Q is extracted from the model below. The inverter transforms the load (usually 50 Ohm) visible to the resonator, hence the external quality depends on the inverter value, which is represented by a PI-network of capacitors, Cin.

Lumped filter, topology, couplings modelled as inverters/capacitors

In the network below the J-inverters has been replaced by their capacitor equivalents derived above. Due to the topology the non-adjacent coupling is also represented by a capacitive coupling despite the difference in sign.

Lumped filter, topology, J-inverters replaced by cap-inverters

The negative capacitors in parallel with each resonator are absorbed as shown below. The negative input and output capacitors are replaced by their equivalent inductors.

Lumped filter, topology, inverters absorbed by resonators

The filter has now been realized as a practical lumped network. Running the MATLAB code with the synthesized coupling matrix generates the element values below:

Lumped filter, realization, final element values

The topology derived in this tutorial is just one of many that can represent the synthesized coupling matrix in a practical filter design. However, one should watch out for extreme element values, there might be a topology that is more suitable for your response.

function [ output_args ] = lumped_coupled_design( input_args )


% 100 MHz, order 3, 10% BW, 20dB ripple, 1 zero at 90 MHz

f_c = 100e6; % center frequency
L_common = 50e-9 % inductor, common in all resonators

Qe = [8.5341 8.5341]; % external Q, [in out]
M = [0.101 0.101 -0.0239]; % coupling factors (k or M)
M_index = [1 2; 2 3; 1 3]; % resonator index mapping of couplings in M [from to;…]
f_res = [100.3e6 98.8e6 100.3e6]; % resonator frequencies


C_res = 1./((f_res*2*pi).^2*L_common);
C_res_synth = C_res;

for index = [1:length(M)]
C_c(index) = M(index)*sqrt(C_res(M_index(index,1)).*C_res(M_index(index,2)));
C_res_synth(M_index(index,1)) = C_res_synth(M_index(index,1))-C_c(index);
C_res_synth(M_index(index,2)) = C_res_synth(M_index(index,2))-C_c(index);

C_in = sqrt(C_res(1)/(50*Qe(1)*2*pi*f_res(1))) % input coupling, cap
L_in = 1/((2*pi*f_c)^2*C_in) % input coupling, inductor

C_out = sqrt(C_res(end)/(50*Qe(2)*2*pi*f_res(end))) % output coupling, cap
L_out = 1/((2*pi*f_c)^2*C_out) % output coupling, inductor

C_c % resonator-resonator coupling capacitors (negative = inductive)
C_res_synth(1) = C_res_synth(1)-C_in;
C_res_synth(end) = C_res_synth(end)-C_out;
C_res = C_res_synth % resonator capacitors


Check out more Tutorials

9 Responses to Lumped filter design using coupling matrix techniques

  1. chae says:

    I am engineer for RF design.
    I wish to reply your tool what using design lumped filter.
    If you reply my comment, I would like to thank your reply.

  2. Gil says:

    Hi Goran. I’m initially impressed with the work you’ve done but I’m having a hard time using the tool on my iPhone. I want to design lumped element filters for VHF and UHF purposes. I’ve been looking around your website to try to understand the sequence of what I need to do to define what I need, then, to run the synthesis of it with sensible results and finally optimize things if possible. What I’m getting stuck on are the input specs, such as ripple, for a bandpass filter. In your example for a lumped element filter, you had set the ripple to 20dB. To me, the ripple would be defined as the insertion loss ripple seen in the passband region and not the stopband area. For a 3 pole filter and a 10% bandwidth, say, I’d expect to maybe be able to get a passband ripple and insertion loss of around 2dB or so. Is that unreasonable to expect something like that? I’d really like to use your tool and understand it fully to get the most out of it, because I could potentially use your paid tool for serious design work as well. Initially, I’d like to learn and use the free tool until I get a good feel for it. Thanks again for doing this work and hopefully I can use this for many years to come! Take care, Gil.

    • Hi Gil,
      Thank you for your input, I will try to explain the procedure for specifying your filter. First of all Couplings Designer can only be used for bandpass and bandstop synthesis. In the lossless case (infinite resonator Q) the insertion loss ripple exactly corresponds to the equivalent return loss ripple in the passband. When you realize your filter where resonators has a finite Q the passband linearity is distorted and the insertion loss ripple will not make much sense, however you will have a return loss that’s at least as good as the return loss (ripple) specified. What you want is a filter that can be matched with other circuits themselves having a finite return loss, the combination of the two that gives the true insertion loss ripple in your system. In most cases one should aim for at least 15-20 dB return loss which makes it more straightforward to specify this directly in the synthesis step, hence the reason why I decided to let users specify return loss instead of insertion loss ripple however they are equivalent to each other.. The LITE version of couplings designer allow only for a filter order of 4, but for your 3 pole/10% BW case I checked using the full version that you would need a Q of about 100 which can be implemented with air-core inductors and high-Q capacitors or helix resonators in your VHF/UHF frequency range, which is realistic indeed. You can verify this by following the tutorial and use Qe=8.5, M12=M23=0.1 and inductor Q of 100. If you’re gonna do lots of filter design and specifications Couplings Designer is a great tool, it’s good value for your money. Hope I answered your questions =)

  3. liuchao says:

    hello ,I use IOS7.1 and this program can not run well. please solve the problem as soon as possible,thank you

  4. nor says:

    I’ve been following the design step to design a filter of order 2,fc =1.8GHz and ripple bandwidth 120MHz. Its kind of straight forward where I have inverter at the input, output and between resonators. However after calculations, the value of C11 and C22 is -0.5773pF. C1 = 0156pF,Cin = 0.4746pF and C12 = 0.2587pF. Since the value of C11 and C22 is negative, is this realisable?

    • Are you using the MATLAB script from the tutorial? If so, try adjusting the L_common variable (resonator inductor). Judging from your C1 value you are using inductors of 50 nH (the same as the example in the script). Try for instance 1 to 5 nH until you get something practical.. At these frequencies you will need to implement your inductors using high impedance t-lines so ideally try obtaining inductor values you can easily realize with t-line having lengths less than lambda/8. Hope this helped and good luck 😀

  5. tobias says:

    I wonder whether this process could be reversed – say I have a given lumped circuit and want to extract the coupling matrix. Is that possible?

Leave a Reply

Your email address will not be published. Required fields are marked *