private void LowPassFilterDemo_Load(object sender, EventArgs e)
        {
            // Instantiate the low pass filter
            lpf = new LowPassFilter();
            // Set the sampling frequency according to the timer interval
            lpf.SamplingFrequency = 1000 / timer1.Interval;
            // Set the cutoff frequency to 1Hz
            lpf.CutoffFrequency = 1;

            // Enable the timer to run the filter animation
            timer1.Enabled = true;
        }
        private void CascadedLowPassFilter_Load(object sender, EventArgs e)
        {
            // Instantiate the DeMIMOI collection to store and easily manage all the filters and the trackbars
            lpf_cascade = new DeMIMOI_Collection("5th order LPF");

            // Instantiate the low pass filter
            lpf = new LowPassFilter[5];

            for (int i = 0; i < lpf.Length; i++)
            {
                // Create each filter
                lpf[i] = new LowPassFilter();

                // Set the sampling frequency according to the timer interval
                lpf[i].SamplingFrequency = 1000 / timer1.Interval;
                // Set the cutoff frequency to 1Hz
                lpf[i].CutoffFrequency = 1;

                // Add the filter to the collection
                lpf_cascade.Add(lpf[i]);
            }

            // Chain the filters by simply connecting them
            for (int i = 1; i < lpf.Length; i++)
            {
                // Connect the input of the i-th filter to the i-1-th filter output
                lpf[i].Inputs[0][0].ConnectTo(lpf[i - 1].Outputs[0][0]);
            }

            #region Create a DeMIMOI_Delegate for each trackBar control
            // Create the input (user handled) trackbar
            DeMIMOI_trackBar1 = new DeMIMOI_Delegate(null,                      // No inputs (the input is a in fact the trackbar value)
                                                     new DeMIMOI_Port(1),       // One input with one output delay (the trackbar value at instant t)
                                                     DeMIMOI_trackBar1_Update); // The delegate function to call to update the model output
            DeMIMOI_trackBar1.Name = "Trackbar1";

            // Create the output (low pass filter i-th order) trackbars
            DeMIMOI_trackBar_stage1 = new DeMIMOI_Delegate(new DeMIMOI_Port(1),             // One input (the trackbar value to apply)
                                                           null,                            // No output (the output is in fact the trackbar value)
                                                           DeMIMOI_trackBar_stage1_Update); // The delegate function to call to update the trackbar value using the model inputs
            DeMIMOI_trackBar_stage1.Name = "TrackBar Stage1";
            DeMIMOI_trackBar_stage2 = new DeMIMOI_Delegate(new DeMIMOI_Port(1), null, DeMIMOI_trackBar_stage2_Update);
            DeMIMOI_trackBar_stage2.Name = "TrackBar Stage2";
            DeMIMOI_trackBar_stage3 = new DeMIMOI_Delegate(new DeMIMOI_Port(1), null, DeMIMOI_trackBar_stage3_Update);
            DeMIMOI_trackBar_stage3.Name = "TrackBar Stage3";
            DeMIMOI_trackBar_stage4 = new DeMIMOI_Delegate(new DeMIMOI_Port(1), null, DeMIMOI_trackBar_stage4_Update);
            DeMIMOI_trackBar_stage4.Name = "TrackBar Stage4";
            DeMIMOI_trackBar_stage5 = new DeMIMOI_Delegate(new DeMIMOI_Port(1), null, DeMIMOI_trackBar_stage5_Update);
            DeMIMOI_trackBar_stage5.Name = "TrackBar Stage5";
            #endregion

            #region Connect each trackbar to each low pass filter input or output
            // Connect the input of the first LPF to the user handled trackbar
            DeMIMOI_trackBar1.Outputs[0][0].ConnectTo(lpf[0].Inputs[0][0]);

            // Connect each i-th order trackbar to the i-th order LPF output
            DeMIMOI_trackBar_stage1.Inputs[0][0].ConnectTo(lpf[0].Outputs[0][0]);
            DeMIMOI_trackBar_stage2.Inputs[0][0].ConnectTo(lpf[1].Outputs[0][0]);
            DeMIMOI_trackBar_stage3.Inputs[0][0].ConnectTo(lpf[2].Outputs[0][0]);
            DeMIMOI_trackBar_stage4.Inputs[0][0].ConnectTo(lpf[3].Outputs[0][0]);
            DeMIMOI_trackBar_stage5.Inputs[0][0].ConnectTo(lpf[4].Outputs[0][0]);
            #endregion

            // Add all the trackbars models to the collection
            lpf_cascade.Add(DeMIMOI_trackBar1);
            lpf_cascade.Add(DeMIMOI_trackBar_stage1);
            lpf_cascade.Add(DeMIMOI_trackBar_stage2);
            lpf_cascade.Add(DeMIMOI_trackBar_stage3);
            lpf_cascade.Add(DeMIMOI_trackBar_stage4);
            lpf_cascade.Add(DeMIMOI_trackBar_stage5);

            // Display the graphviz code result of this models combination
            textBox1.Text = lpf_cascade.GraphVizFullCode();

            // Show the DeMIMOI objects interface
            DeMIMOI.ShowVizInterface();
            // Show the DeMIMOI Collections interface
            DeMIMOI_Collection.ShowVizInterface();

            // Enable the timer to run the filter animation
            timer1.Enabled = true;
        }