next up previous contents
Next: 12 update_ ipwin Up: 9 Non-adaptive, Visualization and Previous: 10 plot_ predict   Contents


11 sovfilt

Purpose
Single channel second order Volterra filter.

Syntax
y = sovfilt(h,x,L1,L2)

Description
sovfilt(h,x,L1,L2) returns the response of the nonlinear second order Volterra filter $h$ when the signal $x$ is applied at the filter input. $L1$ is the memory length of the linear part of $h$, and $L2$ is the memory length of the nonlinear part. The memory length is defined as the number of current and previous samples involved in the calculation of the filter output. The total number of filter coefficients in $h$ is $L1 + sum(1:L2)$. The first $L1$ coefficients are the linear filter part and the last $sum(1:L2)$ coefficients are the nonlinear part of the filter. The filter output is given by
\begin{displaymath}
y(n) = \sum \limits_{m_1=0}^{L1-1} h_l(m1) x(n-m_1) + \sum ...
...1-1}
\Sigma_{m_2=m_1}^{L2-1} h_n(m1,m2) x(n-m_1) x(n-m_2)
\end{displaymath} (81)



Example
Figure 9.10: The frequency contents of the input and output of a second order Volterra filter.
% Nonlinear filter of L1=4, L2=3.
% y(n) =  x(n) - x(n-1) - .125x(n-2) + .3125x(n-3)
%        +x(n)x(n) -.3x(n)x(n-1) + .2x(n)x(n-2) 
%        +.5x(n-1)x(n-1) -.3x(n-1)x(n-2) 
%        -.6x(n-2)x(n-2) 
h = [1;-1;-0.125;0.3125;1;-0.3;0.2;0.5;-0.3;-0.6];
% input signal is a one second sinusoidal of 100 Hz 
% sampled at 1000 Hz.

t = (1:1000)/1000;
x = cos(2*pi*100*t);
y = sovfilt(h,x,4,3);
subplot(2,2,1); plot(abs(fft(x)));
subplot(2,2,2); plot(abs(fft(y)));
Running the above script will produce the graph shown in Fig. 9.10. Note that although the input signal has only one frequency component at 100 Hz, the filter output has three components at 0, 100, and 200 Hz. This is a general characteristic of nonlinear filters.


\epsfig{file=/home/john/winD/docs/aspt/aspt/figs/sovfilt.eps,width=0.9\textwidth}


next up previous contents
Next: 12 update_ ipwin Up: 9 Non-adaptive, Visualization and Previous: 10 plot_ predict   Contents