Contact Us

If you still have questions or prefer to get help directly from an agent, please submit a request.
We’ll get back to you as soon as possible.

Please fill out the contact form below and we will reply as soon as possible.

  • Knowledge Base Home
  • Contact Us
  • Home
  • Moku:Lab
  • Software integrations
  • MATLAB examples

MATLAB: IIR Filter Box (plotting)

Written by Paul Cracknell

Updated at December 22nd, 2020

Contact Us

If you still have questions or prefer to get help directly from an agent, please submit a request.
We’ll get back to you as soon as possible.

Please fill out the contact form below and we will reply as soon as possible.

  • Moku:Go
    Moku:Go Arbitrary Waveform Generator Moku:Go Data Logger Moku:Go Frequency Response Analyzer Moku:Go Logic Analyzer & Pattern Generator Moku:Go Oscilloscope & Voltmeter Moku:Go PID Controller Moku:Go Spectrum Analyzer Moku:Go Waveform Generator Moku:Go Power Supplies Moku:Go Digital Filter Box Moku:Go FIR Filter Builder Moku:Go Lock-in Amplifier
  • Moku:Lab
    Windows Moku:Lab general Moku:Lab Instruments iPad app Software integrations
  • Moku:Pro
    Moku:Pro Instruments
+ More

Example MATLAB script to implement the IIR Filter Box (plotting)

%% IIR Filter Box plotting example
%
% This example demonstrates how you can configure the IIR Filter Box
% with custom generated filter coefficients, and set up real-time 
% monitoring of the input and output signals.
%
% 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 high-pass Butterworth filter transfer function
N = 4; % Order
Wp = 0.5; % Cutoff frequency (% Nyquist sample rate)
[B,A] = butter(N,Wp,'high');

% 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 gain
sos(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 Moku
ip = input('Please enter your Moku:Lab IP address: ', 's');

% Connect to your Moku and deploy the desired instrument
m = MokuIIRFilterBox(ip);

%% Configure the instrument
m.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/s
m.set_filter(2, 'low', filt_coeff); % ~122 Smp/s

% Channel 1 solely filters Input 1
% Channel 2 solely filters Input 2
m.set_control_matrix(1, 1.0, 0.0);
m.set_control_matrix(2, 0.0, 1.0);

% Set up monitoring of the input and output of the second filter channel.
m.set_monitor('a','in1');
m.set_monitor('b','out1');

% Trigger on monitor channel 'a', rising edge, 0V
m.set_trigger('a','rising', 0);

% Set up the monitor timebase to be +-1usec
m.set_timebase(-1e-6,1e-6);

%% Set up plots
% Get initial data to set up plots
data = m.get_realtime_data();

% Set up the plots
figure
lh = plot(data.time, data.ch1, data.time, data.ch2);
xlabel(gca,'Time (sec)')
ylabel(gca,'Amplitude (V)')

%% Receive and plot new data frames
while 1
data = m.get_realtime_data();
set(lh(1),'XData',data.time,'YData',data.ch1);
set(lh(2),'XData',data.time,'YData',data.ch2);
axis tight
pause(0.1)
end
moku:lab

Was this article helpful?

Yes
No

Related Articles

  • MATLAB: Data Logger (basic)
  • MATLAB: IIR Filter Box
  • MATLAB datalogger and saving the logfile
  • MATLAB: Data Logger (streaming)

Sitemap

  • Moku:Lab
  • Instruments
  • Software
  • Company
  • Support
  • Store
  • Terms & Conditions
  • Privacy Policy

Offices

United States
+1 (619) 332-6230
740 Lomas Santa Fe Dr
Suite 102
Solana Beach, CA 92075

Australia
+61 2 6171 9730
243 Northbourne Avenue
Suite 2
Lyneham, ACT 2602

Follow us

Youtube LinkedIn

官方微信

Contact us
© 2021 Liquid Instruments. All rights reserved.

Definition by Author

0
0
Expand