diff --git a/matlab/ita_dsp_design_filters.m b/matlab/ita_dsp_design_filters.m new file mode 100644 index 0000000000000000000000000000000000000000..294141b0f108e1f7a35ae132c3d259b65e0eca37 --- /dev/null +++ b/matlab/ita_dsp_design_filters.m @@ -0,0 +1,18 @@ + +Fs = 44100; + +Hd = ita_dsp_third_octave_filterbank_iir_lowpass_coefficients( Fs, 14.1 ) +ita_dsp_third_octave_filterbank_iir_band_coefficients( Fs, 14.1, 17.8 ) % 16 Hz band +% ... +ita_dsp_third_octave_filterbank_iir_highpass_coefficients( Fs, 17780 ) + +%% Export to C/C++ header using std::vector + +copyfile( 'ITADSPThirdOctaveFilterbankCoefficients.proto.h', 'ITADSPThirdOctaveFilterbankCoefficients.h' ); +fd = fopen( 'ITADSPThirdOctaveFilterbankCoefficients.h', 'wt' ); +fseek( fd, '### stub code ###' ); +fprintf( fd, 'std::vector< float > vfITADSPThirdOctaveFilterbankCoefficients = {' ); +fprintf( fs, '%.9g', length( Hd.sosMatrix ), h( 1 ) ); +fprintf( fd, ',\n %.9g', h( 2:end ) ); +fprintf( fd, '};\n'); +fclose( fd ); diff --git a/matlab/ita_dsp_third_octave_filterbank_iir_band_coefficients.m b/matlab/ita_dsp_third_octave_filterbank_iir_band_coefficients.m new file mode 100644 index 0000000000000000000000000000000000000000..87427cbc1c7ffe8743d41de39dd76a0b99c9230a --- /dev/null +++ b/matlab/ita_dsp_third_octave_filterbank_iir_band_coefficients.m @@ -0,0 +1,9 @@ +function Hd = ita_dsp_third_octave_filterbank_iir_band_coefficients( Fs, Fc1, Fc2 ) +%ITA_DSP_THIRD_OCTAVE_FILTERBANK_IIR_COEFFICIENTS Returns a discrete-time filter object. +% Fs Sampling Frequency +% Fc1 First Cutoff Frequency +% Fc2 Second Cutoff Frequency + +N = 10; % Order +h = fdesign.bandpass('N,F3dB1,F3dB2', N, Fc1, Fc2, Fs); +Hd = design(h, 'butter'); diff --git a/matlab/ita_dsp_third_octave_filterbank_iir_highpass_coefficients.m b/matlab/ita_dsp_third_octave_filterbank_iir_highpass_coefficients.m new file mode 100644 index 0000000000000000000000000000000000000000..18398da9ff9b94371ccbba188bbf8d48f296492f --- /dev/null +++ b/matlab/ita_dsp_third_octave_filterbank_iir_highpass_coefficients.m @@ -0,0 +1,8 @@ +function Hd = ita_dsp_third_octave_filterbank_iir_highpass_coefficients( Fs, Fc ) +%ITA_DSP_THIRD_OCTAVE_FILTERBANK_IIR_COEFFICIENTS Returns a discrete-time filter object. +% Fs Sampling Frequency +% Fc Cutoff Frequency + +N = 10; % Order +h = fdesign.highpass( 'N,F3dB', N, Fc, Fs ); +Hd = design( h, 'butter' ); diff --git a/matlab/ita_dsp_third_octave_filterbank_iir_lowpass_coefficients.m b/matlab/ita_dsp_third_octave_filterbank_iir_lowpass_coefficients.m new file mode 100644 index 0000000000000000000000000000000000000000..2046017c365c093ab37d41bb0a2310f390d14fab --- /dev/null +++ b/matlab/ita_dsp_third_octave_filterbank_iir_lowpass_coefficients.m @@ -0,0 +1,8 @@ +function Hd = ita_dsp_third_octave_filterbank_iir_lowpass_coefficients( Fs, Fc ) +%ITA_DSP_THIRD_OCTAVE_FILTERBANK_IIR_COEFFICIENTS Returns a discrete-time filter object. +% Fs Sampling Frequency +% Fc Cutoff Frequency + +N = 10; % Order +h = fdesign.lowpass( 'N,F3dB', N, Fc, Fs ); +Hd = design( h, 'butter' );