73 lines
2.5 KiB
C
73 lines
2.5 KiB
C
// lasp_slm.h
|
|
//
|
|
// Author: J.A. de Jong - ASCEE
|
|
//
|
|
// Description: Multi-purpose implementation of a real time Sound Level Meter,
|
|
// can be used for full-signal filtering, (fractional) octave band filtering,
|
|
// etc.
|
|
// //////////////////////////////////////////////////////////////////////
|
|
#pragma once
|
|
#ifndef LASP_SLM_H
|
|
#define LASP_SLM_H
|
|
#include "lasp_types.h"
|
|
#include "lasp_mat.h"
|
|
#include "lasp_sosfilterbank.h"
|
|
|
|
typedef struct Slm Slm;
|
|
|
|
#define TAU_FAST (1.0/8.0)
|
|
#define TAU_SLOW (1.0)
|
|
#define TAU_IMPULSE (35e-3)
|
|
|
|
/**
|
|
* Initializes a Sound level meter. NOTE: Sound level meter takes over
|
|
* ownership of pointers to the filterbanks for prefiltering and band-pass
|
|
* filtering! After passing them to the constructor of the Slm, they should not
|
|
* be touched anymore.
|
|
*
|
|
* @param[in] weighting: Sosfiterbank handle, used to pre-filter data. This is
|
|
* in most cases an A-weighting filter, or C-weighting. If NULL, no
|
|
* pre-filtering is done. That can be the case in situations of Z-weighting.
|
|
* @param[in] fb: Sosfiterbank handle, bandpass filters.
|
|
* @param[in] fs: Sampling frequency in [Hz], used for computing the
|
|
* downsampling factor and size of output arrays.
|
|
* @param[in] tau: Time constant of single pole low pass filter for squared data.
|
|
* Three pre-defined values can be used: TAU_FAST, for fast filtering,
|
|
* TAU_SLOW, for slow filtering, TAU_IMPULSE for impulse filtering
|
|
* @param[in] ref_level: Reference level when computing dB's. I.e. P_REF_AIR for
|
|
* sound pressure levels in air
|
|
* @param[out] downsampling_fac: Here, the used downsampling factor is stored
|
|
* which is used on returning data. If the value is for example 10, the
|
|
* 'sampling' frequency of output data from `Slm_run` is 4800 is fs is set to
|
|
* 48000. This downsampling factor is a function of the used time weighting.
|
|
*
|
|
* @return Slm: Handle of the sound level meter, NULL on error.
|
|
*/
|
|
Slm* Slm_create(Sosfilterbank* weighting,Sosfilterbank* bandpass,
|
|
const d fs,
|
|
const d tau,
|
|
const d ref_level,
|
|
us* downsampling_fac);
|
|
|
|
/**
|
|
* Run the sound level meter on a piece of time data.
|
|
*
|
|
* @param[in] slm: Slm handle
|
|
* @param[in] input_data: Vector of input data samples.
|
|
*
|
|
* @return Output result of Sound Level values in [dB], for each bank in the filter
|
|
* bank.
|
|
*/
|
|
dmat Slm_run(Slm* slm,
|
|
vd* input_data);
|
|
/**
|
|
* Cleans up an existing Slm
|
|
*
|
|
* @param f slm handle
|
|
*/
|
|
void Slm_free(Slm* f);
|
|
|
|
|
|
#endif // LASP_SLM_H
|
|
//////////////////////////////////////////////////////////////////////
|