Removed some memory pool stuff. Decreased some tracer values. Removed debug warning on overflow. Bugfix on macro's ASCEE_USE_BLAS to LASP_USE_BLAS. Added SFSG macro. Added denominator in z-transform for frequency response of IIR filters. Added arbitrary fir design code. Put window types in a class in wrapper.
This commit is contained in:
parent
afd2b7d38a
commit
60cf046fa6
@ -84,13 +84,14 @@ set(CMAKE_C_FLAGS_RELEASE "-O2 -mfpmath=sse -march=x86-64 -mtune=native \
|
||||
|
||||
# set(CMAKE_C_FLAGS_RELEASE "-O2 -march=native -mtune=native -fomit-frame-pointer")
|
||||
|
||||
|
||||
if(LASP_USE_BLAS)
|
||||
add_definitions(-DLASP_USE_BLAS=1)
|
||||
else()
|
||||
add_definitions(-DLASP_USE_BLAS=0)
|
||||
endif(LASP_USE_BLAS)
|
||||
|
||||
# ############################# End compilation flags
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
set(win32 true)
|
||||
else()
|
||||
@ -103,10 +104,6 @@ if(DEFINED NUMPY_INCLUDE)
|
||||
endif(DEFINED NUMPY_INCLUDE)
|
||||
|
||||
|
||||
|
||||
|
||||
# ############################# End compilation flags
|
||||
|
||||
add_subdirectory(fftpack)
|
||||
include_directories(
|
||||
fftpack
|
||||
|
@ -1,8 +1,6 @@
|
||||
set(fftpack_src numpy/fftpack.c)
|
||||
|
||||
add_library(fftpack
|
||||
fftpack.c
|
||||
)
|
||||
|
||||
|
||||
target_link_libraries(fftpack m)
|
||||
|
@ -7,16 +7,13 @@
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
#include "lasp_alg.h"
|
||||
|
||||
|
||||
|
||||
|
||||
void cmv_dot(const cmat* A,const vc* restrict x,vc* restrict b){
|
||||
|
||||
dbgassert(A->n_rows == b->size,SIZEINEQUAL);
|
||||
dbgassert(A->n_cols == x->size,SIZEINEQUAL);
|
||||
|
||||
#if LASP_USE_BLAS == 1
|
||||
dbgassert(false,"Untested function");
|
||||
dbgassert(false,"Untested function. Is not functional for strides");
|
||||
/* typedef enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102} CBLAS_ORDER; */
|
||||
/* typedef enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113, CblasConjNoTrans=114} CBLAS_TRANSPOSE; */
|
||||
/*
|
||||
@ -121,7 +118,6 @@ lapack_int LAPACKE_zgels( int matrix_layout, char trans, lapack_int m,
|
||||
|
||||
/* int lsq_solve(const cmat* A,const vc* b,vc* x){ */
|
||||
|
||||
/* POOL_INIT(lsq_solve_pool); */
|
||||
/* int rv; */
|
||||
/* /\* M: number of rows of matrix *\/ */
|
||||
/* /\* N: Number of columns *\/ */
|
||||
@ -180,9 +176,6 @@ lapack_int LAPACKE_zgels( int matrix_layout, char trans, lapack_int m,
|
||||
/* rv = FAILURE; */
|
||||
/* } */
|
||||
|
||||
/* Pool_free(&lsq_solve_pool,A_data); */
|
||||
/* Pool_free(&lsq_solve_pool,work_data); */
|
||||
/* POOL_EXIT(lsq_solve_pool,15); */
|
||||
/* return rv; */
|
||||
|
||||
/* } */
|
||||
|
@ -5,7 +5,7 @@
|
||||
// Description:
|
||||
// Implementation of the dFifo queue
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
#define TRACERPLUS (-5)
|
||||
#define TRACERPLUS (-10)
|
||||
#include "lasp_dfifo.h"
|
||||
|
||||
typedef struct dFifo_s {
|
||||
@ -29,7 +29,7 @@ us dFifo_size(dFifo* fifo) {
|
||||
* @param new_size
|
||||
*/
|
||||
static void dFifo_change_maxsize(dFifo* fifo,const us new_max_size) {
|
||||
fsTRACE(30);
|
||||
fsTRACE(15);
|
||||
dmat old_queue = fifo->queue;
|
||||
|
||||
dbgassert(new_max_size >= dFifo_size(fifo),"BUG");
|
||||
@ -49,7 +49,7 @@ static void dFifo_change_maxsize(dFifo* fifo,const us new_max_size) {
|
||||
fifo->end_row -= fifo->start_row;
|
||||
fifo->start_row = 0;
|
||||
|
||||
feTRACE(30);
|
||||
feTRACE(15);
|
||||
}
|
||||
|
||||
dFifo* dFifo_create(const us nchannels,
|
||||
|
@ -5,6 +5,7 @@
|
||||
// Description:
|
||||
// FilterBank implementation.
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
#define TRACERPLUS (-5)
|
||||
#include "lasp_filterbank.h"
|
||||
#include "lasp_fft.h"
|
||||
#include "lasp_dfifo.h"
|
||||
@ -154,7 +155,7 @@ dmat FilterBank_filter(FilterBank* fb,
|
||||
dmat_free(&output_block);
|
||||
|
||||
us samples_done = dFifo_size(output_fifo);
|
||||
uVARTRACE(20,samples_done);
|
||||
uVARTRACE(15,samples_done);
|
||||
dmat filtered_result = dmat_alloc(samples_done,nfilters);
|
||||
if(samples_done) {
|
||||
us samples_done2 = dFifo_pop(output_fifo,&filtered_result,0);
|
||||
|
@ -115,9 +115,7 @@ static inline c* getcmatval(const cmat* mat,const us row,const us col){
|
||||
dbgassert((vx)._data[(vx).size] == OVERFLOW_MAGIC_NUMBER, \
|
||||
"Buffer overflow detected on" #vx ); \
|
||||
} \
|
||||
else { \
|
||||
DBGWARN("Cannot check overflow on foreign buffer"); \
|
||||
}
|
||||
|
||||
|
||||
#define check_overflow_xmat(xmat) \
|
||||
TRACE(15,"Checking overflow " #xmat); \
|
||||
@ -126,9 +124,6 @@ static inline c* getcmatval(const cmat* mat,const us row,const us col){
|
||||
== OVERFLOW_MAGIC_NUMBER, \
|
||||
"Buffer overflow detected on" #xmat ); \
|
||||
} \
|
||||
else { \
|
||||
DBGWARN("Cannot check overflow on foreign buffer"); \
|
||||
}
|
||||
|
||||
#else
|
||||
#define check_overflow_vx(vx)
|
||||
|
@ -7,7 +7,7 @@
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
#define TRACERPLUS (-5)
|
||||
#include "lasp_math_raw.h"
|
||||
#if ASCEE_USE_BLAS
|
||||
#if LASP_USE_BLAS
|
||||
#include <cblas.h>
|
||||
#endif
|
||||
|
||||
@ -16,9 +16,9 @@ void d_elem_prod_d(d res[],
|
||||
const d arr2[],
|
||||
const us size) {
|
||||
|
||||
#if ASCEE_USE_BLAS == 1
|
||||
#if LASP_USE_BLAS == 1
|
||||
|
||||
#if ASCEE_DEBUG
|
||||
#if LASP_DEBUG
|
||||
|
||||
if(arr1 == arr2) {
|
||||
DBGWARN("d_elem_prod_d: Array 1 and array 2 point to the same"
|
||||
@ -30,7 +30,7 @@ void d_elem_prod_d(d res[],
|
||||
#endif
|
||||
|
||||
|
||||
#if ASCEE_DOUBLE_PRECISION
|
||||
#if LASP_DOUBLE_PRECISION
|
||||
#define elem_prod_fun cblas_dsbmv
|
||||
#else
|
||||
#define elem_prod_fun cblas_ssbmv
|
||||
@ -87,9 +87,9 @@ void c_hadamard(c res[],
|
||||
uVARTRACE(15,size);
|
||||
dbgassert(arr1 && arr2 && res,NULLPTRDEREF);
|
||||
|
||||
#if ASCEE_USE_BLAS == 1
|
||||
#if LASP_USE_BLAS == 1
|
||||
|
||||
#if ASCEE_DEBUG
|
||||
#if LASP_DEBUG
|
||||
|
||||
if(arr1 == arr2) {
|
||||
DBGWARN("c_elem_prod_c: Array 1 and array 2 point to the same"
|
||||
@ -98,10 +98,10 @@ void c_hadamard(c res[],
|
||||
" unrealiable.");
|
||||
}
|
||||
|
||||
#endif /* ASCEE_DEBUG */
|
||||
#endif /* LASP_DEBUG */
|
||||
|
||||
|
||||
#if ASCEE_DOUBLE_PRECISION
|
||||
#if LASP_DOUBLE_PRECISION
|
||||
#define elem_prod_fun cblas_zgbmv
|
||||
#else
|
||||
#define elem_prod_fun cblas_cgbmv
|
||||
|
@ -8,6 +8,7 @@
|
||||
#pragma once
|
||||
#ifndef LASP_PYTHON_H
|
||||
#define LASP_PYTHON_H
|
||||
#define TRACERPLUS (-5)
|
||||
#include <numpy/ndarrayobject.h>
|
||||
#ifdef LASP_DOUBLE_PRECISION
|
||||
#define LASP_NUMPY_FLOAT_TYPE NPY_FLOAT64
|
||||
|
@ -153,6 +153,8 @@ void uvartrace_impl(const char* pos,int line,const char* varname,size_t var);
|
||||
trace_impl(FILEWITHOUTPATH,__LINE__,trace_string ); \
|
||||
}
|
||||
|
||||
#define SFSG TRACE(100,"SFSG")
|
||||
|
||||
/**
|
||||
* Print start of function string
|
||||
*/
|
||||
|
@ -9,16 +9,16 @@ frequency of 48 kHz.
|
||||
#from asceefigs.plot import Bode, close, Figure
|
||||
|
||||
import numpy as np
|
||||
from scipy.signal import freqz, hann
|
||||
from scipy.signal import freqz, hann, firwin2
|
||||
from matplotlib.pyplot import figure, close
|
||||
|
||||
def freqResponse(fir_coefs, freq, fs):
|
||||
def freqResponse(fs, freq, fir_coefs_b, fir_coefs_a=1.):
|
||||
"""!
|
||||
Computes the frequency response of the filter defined with filter_coefs
|
||||
"""
|
||||
Omg = 2*np.pi*freq/fs
|
||||
|
||||
w, H = freqz(fir_coefs,worN = Omg)
|
||||
w, H = freqz(fir_coefs_b,fir_coefs_a,worN = Omg)
|
||||
return H
|
||||
|
||||
def bandpass_fir_design(L,fs,fl,fu, window = hann):
|
||||
@ -63,3 +63,8 @@ def lowpass_fir_design(L,fs,fc,window = hann):
|
||||
|
||||
return fir_win
|
||||
|
||||
def arbitrary_fir_design(fs,L,freq,amps,window='hann'):
|
||||
"""
|
||||
Last frequency of freq should be fs/2
|
||||
"""
|
||||
return firwin2(L,freq,amps,fs=fs,window=window)
|
@ -105,11 +105,12 @@ cdef extern from "lasp_window.h":
|
||||
Blackman
|
||||
|
||||
# Export these constants to Python
|
||||
hann = Hann
|
||||
hamming = Hamming
|
||||
rectangular = Rectangular
|
||||
bartlett = Bartlett
|
||||
blackman = Blackman
|
||||
class Window:
|
||||
hann = Hann
|
||||
hamming = Hamming
|
||||
rectangular = Rectangular
|
||||
bartlett = Bartlett
|
||||
blackman = Blackman
|
||||
|
||||
cdef extern from "lasp_ps.h":
|
||||
ctypedef struct c_PowerSpectra "PowerSpectra"
|
||||
@ -127,7 +128,7 @@ cdef class PowerSpectra:
|
||||
cdef:
|
||||
c_PowerSpectra* _ps
|
||||
|
||||
def __cinit__(self, us nfft,us window=rectangular):
|
||||
def __cinit__(self, us nfft,us window=Window.rectangular):
|
||||
self._ps = PowerSpectra_alloc(nfft,<WindowType> window)
|
||||
if self._ps == NULL:
|
||||
raise RuntimeError('PowerSpectra allocation failed')
|
||||
|
Loading…
Reference in New Issue
Block a user