Poging tot BiQuad werkend

Committer:
RoyvZ
Date:
Fri Oct 13 08:59:10 2017 +0000
Revision:
0:1bd88b638bfa
JO, Hopenlijk werkt het wel op mijn computer;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RoyvZ 0:1bd88b638bfa 1 Biquad Filter Class
RoyvZ 0:1bd88b638bfa 2 ===================
RoyvZ 0:1bd88b638bfa 3
RoyvZ 0:1bd88b638bfa 4 This is a simple biquad filter class that enables live digital filtering on real-time devices and microcontrollers or signal processing on all other computer devices.
RoyvZ 0:1bd88b638bfa 5
RoyvZ 0:1bd88b638bfa 6 The file main.cpp contains an application example.
RoyvZ 0:1bd88b638bfa 7
RoyvZ 0:1bd88b638bfa 8 ![Step response of two digital Butterworth low-pass filters](https://tomlankhorst.nl/wp-content/uploads/2016/09/stepresponse.png)
RoyvZ 0:1bd88b638bfa 9
RoyvZ 0:1bd88b638bfa 10 Please refer to [my blog post](https://tomlankhorst.nl/filter-controller-cpp-implementation/) for more details on the subject and application.
RoyvZ 0:1bd88b638bfa 11
RoyvZ 0:1bd88b638bfa 12 Generating C++ code from a MATLAB transfer-function
RoyvZ 0:1bd88b638bfa 13 --------
RoyvZ 0:1bd88b638bfa 14
RoyvZ 0:1bd88b638bfa 15 The following MATLAB function converts a SOS matrix to C++ code:
RoyvZ 0:1bd88b638bfa 16 ```MATLAB
RoyvZ 0:1bd88b638bfa 17 function [ ] = tf2cppbq( sos )
RoyvZ 0:1bd88b638bfa 18 %TF2CPPBQ( sos ) Transfer-function to C++ code that initializes BiQuads and BiQuad chain
RoyvZ 0:1bd88b638bfa 19 % Input: matrix of second-order-sections (use tf2sos(H) for example).
RoyvZ 0:1bd88b638bfa 20
RoyvZ 0:1bd88b638bfa 21 fprintf('\n');
RoyvZ 0:1bd88b638bfa 22
RoyvZ 0:1bd88b638bfa 23 i = 0;
RoyvZ 0:1bd88b638bfa 24 for s = sos.'
RoyvZ 0:1bd88b638bfa 25 i = i + 1;
RoyvZ 0:1bd88b638bfa 26 fprintf('BiQuad bq%d( %.5e, %.5e, %.5e, %.5e, %.5e );\n', i, s(1), s(2), s(3), s(5), s(6));
RoyvZ 0:1bd88b638bfa 27 end
RoyvZ 0:1bd88b638bfa 28
RoyvZ 0:1bd88b638bfa 29 fprintf('\nBiQuadChain bqc;\n');
RoyvZ 0:1bd88b638bfa 30 fprintf('bqc');
RoyvZ 0:1bd88b638bfa 31 i = 0;
RoyvZ 0:1bd88b638bfa 32 for s = sos.'
RoyvZ 0:1bd88b638bfa 33 i = i + 1;
RoyvZ 0:1bd88b638bfa 34 fprintf('.add( &bq%d )', i);
RoyvZ 0:1bd88b638bfa 35 end
RoyvZ 0:1bd88b638bfa 36
RoyvZ 0:1bd88b638bfa 37 fprintf(';\n');
RoyvZ 0:1bd88b638bfa 38
RoyvZ 0:1bd88b638bfa 39 end
RoyvZ 0:1bd88b638bfa 40 ```
RoyvZ 0:1bd88b638bfa 41
RoyvZ 0:1bd88b638bfa 42 Use it as follows:
RoyvZ 0:1bd88b638bfa 43
RoyvZ 0:1bd88b638bfa 44 ```MATLAB
RoyvZ 0:1bd88b638bfa 45 [b,a] = butter(4,0.2,'low');
RoyvZ 0:1bd88b638bfa 46 sos = tf2sos(b,a);
RoyvZ 0:1bd88b638bfa 47 tf2cppbq( sos );
RoyvZ 0:1bd88b638bfa 48 ```
RoyvZ 0:1bd88b638bfa 49
RoyvZ 0:1bd88b638bfa 50 Output:
RoyvZ 0:1bd88b638bfa 51 ```C++
RoyvZ 0:1bd88b638bfa 52 BiQuad bq1( 4.82434e-03, 9.64869e-03, 4.82434e-03, -1.04860e+00, 2.96140e-01 );
RoyvZ 0:1bd88b638bfa 53 BiQuad bq2( 1.00000e+00, 2.00000e+00, 1.00000e+00, -1.32091e+00, 6.32739e-01 );
RoyvZ 0:1bd88b638bfa 54
RoyvZ 0:1bd88b638bfa 55 BiQuadChain bqc;
RoyvZ 0:1bd88b638bfa 56 bqc.add( &bq1 ).add( &bq2 );
RoyvZ 0:1bd88b638bfa 57 ```
RoyvZ 0:1bd88b638bfa 58
RoyvZ 0:1bd88b638bfa 59
RoyvZ 0:1bd88b638bfa 60 License
RoyvZ 0:1bd88b638bfa 61 -------
RoyvZ 0:1bd88b638bfa 62 MIT