MATLAB: IIR Filter Box

Example MATLAB script to implement the IIR Filter Box (basic).

`%% Basic IIR Filter Box%% This example demonstrates how you can generate Chebyshev filter% coefficients to configure the IIR Filter Box. It also shows how to% retrieve signal monitor data.%% NOTE: This example requires installation of the MATLAB Signal Processing % Toolbox to generate filter coefficients. The MokuIIRFilterBox can % be used directly with pre-defined coefficients.%% (c) 2017 Liquid Instruments Pty. Ltd.%%% Prepare the SOS filter coefficients% Generate a Chebyshev filter transfer functionN = 4; % OrderR = 0.5; % Passband peak-to-peak ripple (dB)Wp = 0.1; % Passband-edge frequency (% Nyquist sample rate)[B,A] = cheby1(N,R,Wp);% Moku:Lab implements a Second-Order-Stage (SOS) filter, so we need to% transform the filter transfer function coefficients to SOS format.[sos,g] = tf2sos(B,A);% Mould the coefficients into the Moku:Lab "matrix" format. % Ensure "g" is a cell (not a single-element array). The remaining elements% are 1x6 numeric arrays. filt_coeff =  {{ {g}, ... % Overall gainsos(1,[4,1:3,5,6]), ... % [s_1, b_01, b_11, b_21, a_11, a_21]sos(2,[4,1:3,5,6]), ... % [s_2, b_02, b_12, b_22, a_12, a_22][1,1,0,0,0,0], ... % Ignore this stage (all-pass)[1,1,0,0,0,0] }} ; % Ignore this stage (all-pass)%% Connect to your Mokuip = input('Please enter your Moku:Lab IP address: ', 's');% Connect to your Moku and deploy the desired instrumentm = MokuIIRFilterBox(ip);%% Configure the instrumentm.set_frontend(1, 'fiftyr', 'true', 'atten', 'false', 'ac', 'false');m.set_frontend(2, 'fiftyr', 'true', 'atten', 'false', 'ac', 'false');% Both filters have the same coefficients, but the different sampling rates% mean the resultant transfer functions will be different by a factor of% 128 (the ratio of sampling rates).m.set_filter(1, 'high', filt_coeff); % ~15.625 Smp/sm.set_filter(2, 'low', filt_coeff); % ~122 Smp/s% 0.1V Offset for Channel 1% Channel 2 acts on the sum of Input 1 and Input 2m.set_gains_offsets(1, 'output_offset', 0.1);m.set_control_matrix(2, 0.5, 0.5);% Set up monitoring of the input and output of the second filter channel.m.set_monitor('a','in1');m.set_monitor('b','out1');% Set up the monitor timebase to be +-1usecm.set_timebase(-1e-6,1e-6);% Capture and print the time-domain signals being monitoreddata = m.get_data();data.timedata.ch1data.ch2`