Signal flow graph
We'll follow certain rules when we build up a network flow graph.
- Each variable and will be designated as a node.
- Each of the S-parameter will be a branch.
- Branches enter dependent variable nodes and emanate from the independent variable nodes.
- Each node is equal to sum of the branches entering it.
Figure 10: Complete Flow graph for 2-port
Flow graph of a source
A generator with an internal voltage source and an internal impedance will have a wave emanating from it. We define a new term, , for the wave emanating from the source. Where
Note that is the square root of the power transmitted to the transmission line.
Figure 11: Flow graph for a generator
is the reflection coefficient of the source
Flow graph of a load
For a load, the flow graph is simply, , the reflection coefficient of the load.
Figure 12: Flow graph for a load
Flow graph of a 2-port network with source and load
To demonstrate the utility of flow graphs. Let's embed a two-port network between a source and a load.
Figure 13Flow graph for a two-port network with a source and a load
We can use Mason's rule to solve for the relationship between of any two nodes in the network.
Let T be the transfer ratio between two nodes
where , , ... are the various paths connecting the nodes,
is a first order loop,
is a second order loop,
is a first order loop that does not touch path ,
is a second order loop that does not touch path .
A first order loop is defined as the product of the branches encounter starting from a node and moving in the direction of the arrows back to its origin.
A second order loop is the product of two non-touching first order loops.
Example 1 We want to find the ratio .
Similarly, we can also find
Example 2 We want to find the power delivered from a source to a load as shown in Figure 14. The power delivered is
Figure 14Flow graph for a load connected to a source
If the load is conjugately matched to the source, i.e., , P becomes the available power from the source
Signal Flow Graph
One possible signal flow graph (or system diagram) for Eq.(5.1) is given in Fig.5.1a for the case of and . Hopefully, it is easy to see how this diagram represents the difference equation (a box labeled ``'' denotes a one-sample delay in time). The diagram remains true if it is converted to the frequency domain by replacing all time-domain signals by their respective z transforms (or Fourier transforms); that is, we may replace by and by .
Signal Flow Graph
Figure 3.1 shows the signal flow graph (or system diagram) for the class of digital filters we are consideringThe symbol ``'' means a delay of samples (always an integer here).
Software Implementation in Matlab
In matlab or octave this type of filter can be implemented using the filter function. For example, the following matlab code computes the output signal y given the input signal x for a specific example comb filter:
g1 = (0.5)^3; % Some specific coefficients g2 = (0.9)^5; B = [1 0 0 g1]; % Feedforward coefficients, M1=3 A = [1 0 0 0 0 g2]; % Feedback coefficients, M2=5 N = 1000; % Number of signal samples x = rand(N,1); % Random test input signal y = filter(B,A,x); % Matlab and octave compatible
The example coefficients,
, are chosen to place all filter zeros at radius and all filter poles at radius in the complex plane (as we shall see below).
The matlab filter function carries out the following computation for each element of the y array:
, where NA = length(A) and NB = length(B). Note that the indices of x and y can go negative in this expression. By default, such terms are replaced by zero. However, the filter function has an optional fourth argument for specifying the initial state of the filter, which includes past input and past output samples seen by the filter. This argument is used to forward the filter's state across successive blocks of data:
[y1,state] = filter(B,A,x1); % filter 1st block x1 [y2,state] = filter(B,A,x2,state); % filter 2nd block x2 ...
Sample-Level Implementation in Matlab
For completeness, a direct matlab implementation of the built-in filterfunction (Eq.(3.3)) is given in Fig.3.2. While this code is useful for study, it is far slower than the built-in filter function. As a specific example, filtering samples of data using an order 100 filter on a 900MHz Athlon PC required 0.01 seconds for filter and 10.4 seconds for filterslow. Thus, filter was over a thousand times faster than filterslow in this case. The complete test is given in the following matlab listing:
x = rand(10000,1); % random input signal B = rand(101,1); % random coefficients A = [1;0.001*rand(100,1)]; % random but probably stable tic; yf=filter(B,A,x); ft=toc tic; yfs=filterslow(B,A,x); fst=toc
The execution times differ greatly for two reasons:
- recursive feedback cannot be ``vectorized'' in general, and
- built-in functions such as filter are written in C, precompiled, and linked with the main program.
function [y] = filterslow(B,A,x) % FILTERSLOW: Filter x to produce y = (B/A) x . % Equivalent to 'y = filter(B,A,x)' using % a slow (but tutorial) method. NB = length(B); NA = length(A); Nx = length(x); xv = x(:); % ensure column vector % do the FIR part using vector processing: v = B(1)*xv; if NB>1 for i=2:min(NB,Nx) xdelayed = [zeros(i-1,1); xv(1:Nx-i+1)]; v = v + B(i)*xdelayed; end; end; % fir part done, sitting in v % The feedback part is intrinsically scalar, % so this loop is where we spend a lot of time. y = zeros(length(x),1); % pre-allocate y ac = - A(2:NA); for i=1:Nx, % loop over input samples t=v(i); % initialize accumulator if NA>1, for j=1:NA-1 if i>j, t=t+ac(j)*y(i-j); %else y(i-j) = 0 end; end; end; y(i)=t; end; y = reshape(y,size(x)); % in case x was a row vector