Second-order (biquadratic) IIR digital filtering
y = sosfilt(sos,x)
y = sosfilt(sos,x,dim)
y = sosfilt(sos,x) applies
the second-order section digital filter
x. The output,
is the same length as
If either input to
sosfilt is single precision,
filtering is implemented using single-precision arithmetic. The output,
is single precision.
sos represents the second-order section digital
by an L-by-6 matrix containing the coefficients of each second-order section in its rows.
x is a matrix,
the filter to each column of
x independently. The
y is a matrix of the same size, containing
the filtered data corresponding to each column of
x is a multidimensional array,
along the first nonsingleton dimension. The output
a multidimensional array of the same size as
containing the filtered data corresponding to each row and column
The second order sections matrix,
x, or both can be double or single
precision. If at least one input is single precision, filtering is
done with single precision arithmetic.
y = sosfilt(sos,x,dim) operates
along the dimension
chirp.mat. The file contains a signal,
y, that has most of its power above
Fs/4, or half the Nyquist frequency. The sample rate is 8192 Hz.
load chirp t = (0:length(y)-1)/Fs;
Design a 7th-order Butterworth highpass filter to attenuate the components of the signal below
Fs/4. Use a normalized cutoff frequency of 0.48π rad/sample. Express the filter coefficients in terms of second-order sections.
[zhi,phi,khi] = butter(7,0.48,'high'); soshi = zp2sos(zhi,phi,khi); freqz(soshi)
Filter the signal. Display the original and highpass-filtered signals. Use the same y-axis scale for both plots.
outhi = sosfilt(soshi,y); subplot(2,1,1) plot(t,y) title('Original Signal') ys = ylim; subplot(2,1,2) plot(t,outhi) title('Highpass-Filtered Signal') xlabel('Time (s)') ylim(ys)
Design a lowpass filter with the same specifications. Filter the signal and compare the result to the original. Use the same y-axis scale for both plots. The result is mostly noise.
[zlo,plo,klo] = butter(7,0.48); soslo = zp2sos(zlo,plo,klo); outlo = sosfilt(soslo,y); subplot(2,1,1) plot(t,y) title('Original Signal') ys = ylim; subplot(2,1,2) plot(t,outlo) title('Lowpass-Filtered Signal') xlabel('Time (s)') ylim(ys)
 Orfanidis, S.J., Introduction to Signal Processing, Prentice-Hall, Englewood Cliffs, NJ, 1996.