ReSpeaker DSP V02

Dependencies:   mbed MbedJSONValue

Committer:
Arkadi
Date:
Thu Jun 20 09:06:46 2019 +0000
Revision:
14:8a4699aa69b5
Parent:
1:574b54755983
experiments version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Arkadi 1:574b54755983 1 %% Filter test Based on http://www.mathworks.com/help/dsp/ref/dsp.biquadfilter-class.html
Arkadi 1:574b54755983 2 % Biquad Direct Form 1
Arkadi 1:574b54755983 3 % For board F446RE
Arkadi 1:574b54755983 4 % Fd12 = 372 * 2; % for 2 sections, filter order 4; V2 of software
Arkadi 1:574b54755983 5 Fd12 = 314 * 2; % for 3 sections, filter order 6; V2 of software
Arkadi 1:574b54755983 6 %Fd12 = 272 * 2; % for 4 sections, filter order 8; V2 of software
Arkadi 1:574b54755983 7
Arkadi 1:574b54755983 8 FilterFs=Fd12*10^3; % sampling frequency, taken from D12 pin
Arkadi 1:574b54755983 9 Fc = 20*10^3; % 20KHz cut off freq
Arkadi 1:574b54755983 10
Arkadi 1:574b54755983 11 % design a second order filter:
Arkadi 1:574b54755983 12 FilterOrder=6;
Arkadi 1:574b54755983 13 RipplePass=1;
Arkadi 1:574b54755983 14 RippleStop=80;
Arkadi 1:574b54755983 15 FilterType = 'butter';
Arkadi 1:574b54755983 16 % FilterType = 'cheby2';
Arkadi 1:574b54755983 17 % FilterType = 'ellip';
Arkadi 1:574b54755983 18
Arkadi 1:574b54755983 19 [MyHd, MySOS, MyG] = HighPassFilterDesign(FilterFs,Fc, FilterOrder, RipplePass, RippleStop, FilterType);
Arkadi 1:574b54755983 20
Arkadi 1:574b54755983 21 % [z,p,k] = butter(FilterOrder,Wn,'high'); FilterType = 'butter';
Arkadi 1:574b54755983 22 % [z,p,k] = cheby2(FilterOrder,RippleStop, Wn, 'high'); FilterType = 'cheby2';
Arkadi 1:574b54755983 23 % [z,p,k]=ellip(FilterOrder,RipplePass,RippleStop,Wn,'high'); FilterType = 'ellip';
Arkadi 1:574b54755983 24 % Convert to Coeficients matrix
Arkadi 1:574b54755983 25 %[SOS,G] = zp2sos(z,p,k);
Arkadi 1:574b54755983 26 %MyHd = dfilt.df1sos(SOS,G)
Arkadi 1:574b54755983 27
Arkadi 1:574b54755983 28 % Plot The filter response:
Arkadi 1:574b54755983 29
Arkadi 1:574b54755983 30 fvtool(MyHd,'Fs',FilterFs)
Arkadi 1:574b54755983 31
Arkadi 1:574b54755983 32 % Print filter in the form, suitable for copying into C code
Arkadi 1:574b54755983 33 columns = size(MySOS,2);
Arkadi 1:574b54755983 34 lines = size(MySOS,1);
Arkadi 1:574b54755983 35 fprintf('/*\n%s FILTER DESIGN, %s, %d sections, for sampling frequency %5.1f Hz \n', FilterType, datestr(now), lines, FilterFs);
Arkadi 1:574b54755983 36 fprintf('Filter Order %d, Cut Off Frequency %d Hz\n', FilterOrder, Fc);
Arkadi 1:574b54755983 37 fprintf('*/\n');
Arkadi 1:574b54755983 38 % fprintf('char FilterTypeHP[] = "%s";\n', FilterType);
Arkadi 1:574b54755983 39 fprintf('float SOSMatHP[%d][%d] = {\n', lines, columns);
Arkadi 1:574b54755983 40 for i =1:lines
Arkadi 1:574b54755983 41 fprintf(' %f, ', MySOS(i,1:columns));
Arkadi 1:574b54755983 42 fprintf('\n');
Arkadi 1:574b54755983 43 end
Arkadi 1:574b54755983 44 fprintf('\b\b\b\n};\n'); %\b\b\b - erase <\n>, <space> and <,>
Arkadi 1:574b54755983 45 fprintf('float GscaleHP = %f;\n\n',MyG);
Arkadi 1:574b54755983 46
Arkadi 1:574b54755983 47 % Copy coeficients to the mbed code
Arkadi 1:574b54755983 48
Arkadi 1:574b54755983 49
Arkadi 1:574b54755983 50