diff --git a/.gitignore b/.gitignore index 8017c00..154a586 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ src/lasp.egg-info test/.ipynb_checkpoints src/lasp/lasp_config.h _deps +.ipynb_checkpoints diff --git a/Doxyfile b/Doxyfile index 1a3d61f..5f31635 100644 --- a/Doxyfile +++ b/Doxyfile @@ -1,4 +1,4 @@ -# Doxyfile 1.9.3 +# Doxyfile 1.8.17 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -38,20 +38,20 @@ PROJECT_NAME = LASP # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = +PROJECT_NUMBER = 1.0 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. -PROJECT_BRIEF = +PROJECT_BRIEF = "Library for Acoustic Signal Processing" # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. -PROJECT_LOGO = +PROJECT_LOGO = /home/anne/wip/mycode/lasp/img/LASP_200px.png # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is diff --git a/cmake/BuildType.cmake b/cmake/BuildType.cmake index cde28a5..c5cd1e2 100644 --- a/cmake/BuildType.cmake +++ b/cmake/BuildType.cmake @@ -2,11 +2,10 @@ set(default_build_type "Release") -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - message(STATUS "Setting build type to '${default_build_type}' as none was specified.") - set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE - STRING "Choose the type of build." FORCE) +if(NOT CMAKE_BUILD_TYPE) + message(STATUS "Setting build type to '${default_build_type}' as none was specified.") + set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE) - # Set the possible values of build type for cmake-gui - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release") + # Set the possible values of build type for cmake-gui endif() +set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release") diff --git a/examples/Test SLM.ipynb b/examples/Test SLM.ipynb new file mode 100644 index 0000000..4891864 --- /dev/null +++ b/examples/Test SLM.ipynb @@ -0,0 +1,229 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "%pylab is deprecated, use %matplotlib inline and import the required libraries.\n", + "Populating the interactive namespace from numpy and matplotlib\n" + ] + } + ], + "source": [ + "from lasp import SLM\n", + "import numpy as np\n", + "%pylab inline" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2022-08-16 21:20:04+0200 \n", + "2022-08-16 21:20:04+0200 Enter fromBiquads (lasp_slm.cpp: 82)\n", + "2022-08-16 21:20:04+0200 | Enter createBandPass (lasp_slm.cpp: 62)\n", + "2022-08-16 21:20:04+0200 | | Enter SeriesBiquad (lasp_biquadbank.cpp: 12)\n", + "2022-08-16 21:20:04+0200 | | Leave SeriesBiquad (lasp_biquadbank.cpp)\n", + "2022-08-16 21:20:04+0200 | | \n", + "2022-08-16 21:20:04+0200 | | Enter SeriesBiquad (lasp_biquadbank.cpp: 12)\n", + "2022-08-16 21:20:04+0200 | | Leave SeriesBiquad (lasp_biquadbank.cpp)\n", + "2022-08-16 21:20:04+0200 | Leave createBandPass (lasp_slm.cpp)\n", + "2022-08-16 21:20:04+0200 | \n", + "2022-08-16 21:20:04+0200 | Enter SLM (lasp_slm.cpp: 37)\n", + "2022-08-16 21:20:04+0200 | Leave SLM (lasp_slm.cpp)\n", + "2022-08-16 21:20:04+0200 Leave fromBiquads (lasp_slm.cpp)\n" + ] + } + ], + "source": [ + "fs = 44100.\n", + "Lref = 1\n", + "ds = 1\n", + "tau = 1/8\n", + "\n", + "bp_coefs = np.zeros((6,2), order='F')\n", + "bp_coefs[0,:] = 1\n", + "bp_coefs[3,:] = 1\n", + "\n", + "slm = SLM.fromBiquads(\n", + " fs, \n", + " Lref,\n", + " ds, tau, bp_coefs\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 1.],\n", + " [0., 0.],\n", + " [0., 0.],\n", + " [1., 1.],\n", + " [0., 0.],\n", + " [0., 0.]])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bp_coefs" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(20100, 2)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2022-08-16 21:20:04+0200 \n", + "2022-08-16 21:20:04+0200 Enter run (lasp_slm.cpp: 151)\n", + "2022-08-16 21:20:04+0200 | Enter filter (lasp_biquadbank.cpp: 44)\n", + "2022-08-16 21:20:04+0200 | | Enter filter (lasp_biquadbank.cpp: 44)\n", + "2022-08-16 21:20:04+0200 | | Leave filter (lasp_biquadbank.cpp)\n", + "2022-08-16 21:20:04+0200 | Leave filter (lasp_biquadbank.cpp)\n", + "2022-08-16 21:20:04+0200 | N = 0ul\n", + "2022-08-16 21:20:04+0200 | N = 0ul\n", + "2022-08-16 21:20:04+0200 Leave run (lasp_slm.cpp)\n" + ] + } + ], + "source": [ + "x = np.zeros(20100, dtype=float)\n", + "x[:] = 1\n", + "\n", + "res = slm.run(x)\n", + "print(res.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot(res)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1.],\n", + " [1.]])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slm.Pm" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-0.11480531, -0.11480531])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res[-1,:]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/examples/Test SeriesBiquad.ipynb b/examples/Test SeriesBiquad.ipynb new file mode 100644 index 0000000..f0f0126 --- /dev/null +++ b/examples/Test SeriesBiquad.ipynb @@ -0,0 +1,113 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from lasp import SeriesBiquad\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2022-08-16 15:02:57+0200 \n", + "2022-08-16 15:02:57+0200 Enter SeriesBiquad (lasp_biquadbank.cpp: 12)\n", + "2022-08-16 15:02:57+0200 Leave SeriesBiquad (lasp_biquadbank.cpp)\n" + ] + } + ], + "source": [ + "coefs = np.array([1.,0,0,1.,-.9,0])\n", + "bq = SeriesBiquad(coefs)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2022-08-16 15:02:57+0200 \n", + "2022-08-16 15:02:57+0200 Enter filter (lasp_biquadbank.cpp: 41)\n", + "2022-08-16 15:02:57+0200 Leave filter (lasp_biquadbank.cpp)\n" + ] + } + ], + "source": [ + "x = np.zeros(10, dtype=float)\n", + "x[0] = 1\n", + "\n", + "x2 = bq.filter(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1. ],\n", + " [0.9 ],\n", + " [0.81 ],\n", + " [0.729 ],\n", + " [0.6561 ],\n", + " [0.59049 ],\n", + " [0.531441 ],\n", + " [0.4782969 ],\n", + " [0.43046721],\n", + " [0.38742049]])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/examples/Test input.ipynb b/examples/Test input.ipynb new file mode 100644 index 0000000..64894a3 --- /dev/null +++ b/examples/Test input.ipynb @@ -0,0 +1,168 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "b0d15138", + "metadata": {}, + "outputs": [], + "source": [ + "!make -j -C ~/wip/mycode/lasp" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1787e24c", + "metadata": {}, + "outputs": [], + "source": [ + "import lasp\n", + "ds = lasp.DeviceInfo.getDeviceInfo()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "22ae99b1", + "metadata": {}, + "outputs": [], + "source": [ + "for i, d in enumerate(ds):\n", + " print(f'{i}: ' + d.device_name)\n", + "d = ds[1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b1321c4a", + "metadata": {}, + "outputs": [], + "source": [ + "d.availableFramesPerBlock" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "47385b02", + "metadata": {}, + "outputs": [], + "source": [ + "config = lasp.DaqConfiguration(d)\n", + "config.inchannel_config[0].enabled = True\n", + "config.inchannel_config[1].enabled = True\n", + "config.framesPerBlockIndex = 4" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d12f84b7", + "metadata": {}, + "outputs": [], + "source": [ + "print('Out channels:',d.noutchannels)\n", + "print('In channels:',d.ninchannels)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "902ce309", + "metadata": {}, + "outputs": [], + "source": [ + "mgr = lasp.StreamMgr.getInstance()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b209294b", + "metadata": {}, + "outputs": [], + "source": [ + "mgr.startStream(d, config)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0830ffb5", + "metadata": {}, + "outputs": [], + "source": [ + "mgr.stopStream(lasp.StreamMgr.StreamType.input)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7fddc19", + "metadata": {}, + "outputs": [], + "source": [ + "mgr.stopAllStreams()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d11c7dae", + "metadata": {}, + "outputs": [], + "source": [ + "def cb(data):\n", + " # raise RuntimeError('hh')\n", + " print(data.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0eeb2311", + "metadata": {}, + "outputs": [], + "source": [ + "i = lasp.InDataHandler(mgr, cb)\n", + "import time\n", + "#time.sleep(4)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f893b639", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "del i" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/img/LASP.pdf b/img/LASP.pdf index 8fd406c..f2dabf2 100644 Binary files a/img/LASP.pdf and b/img/LASP.pdf differ diff --git a/img/LASP_200px.png b/img/LASP_200px.png new file mode 100644 index 0000000..7929555 Binary files /dev/null and b/img/LASP_200px.png differ diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..8a234a3 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,2 @@ +[pytest] +addopts = "--ignore=third_party" diff --git a/src/lasp/CMakeLists.txt b/src/lasp/CMakeLists.txt index 6f0b612..4dc1fe8 100644 --- a/src/lasp/CMakeLists.txt +++ b/src/lasp/CMakeLists.txt @@ -5,8 +5,12 @@ add_definitions(-DARMA_DONT_USE_WRAPPER) configure_file(lasp_config.h.in lasp_config.h) include_directories(${CMAKE_CURRENT_BINARY_DIR}) -include_directories(SYSTEM ../../third_party/armadillo-code/include) include_directories(SYSTEM ../../third_party/carma/include) +include_directories(SYSTEM + ../../third_party/carma/extern/armadillo-code/include) +include_directories(SYSTEM + ../../third_party/carma/extern/pybind11/include) + include_directories(../../third_party/DebugTrace-cpp/include) include_directories(../../third_party/lockfreeThreadsafe/include) include_directories(../../third_party/gsl-lite/include) @@ -26,6 +30,8 @@ pybind11_add_module(lasp_cpp MODULE lasp_cpp.cpp pybind11/lasp_pyindatahandler.cpp ) -target_link_libraries(lasp_cpp PRIVATE lasp_device_lib lasp_dsp_lib) +target_link_libraries(lasp_cpp PRIVATE lasp_device_lib lasp_dsp_lib + carma::carma + ${OpenMP_CXX_LIBRARIES} ${LASP_FFT_LIBS}) install(TARGETS lasp_cpp DESTINATION .) diff --git a/test/Device Info.ipynb b/test/Device Info.ipynb deleted file mode 100644 index fd45860..0000000 --- a/test/Device Info.ipynb +++ /dev/null @@ -1,250 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "b0d15138", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "make: Entering directory '/home/anne/wip/mycode/lasp'\n", - "make[1]: Entering directory '/home/anne/wip/mycode/lasp'\n", - "make[2]: Entering directory '/home/anne/wip/mycode/lasp'\n", - "\u001b[35m\u001b[1mConsolidate compiler generated dependencies of target lasp_dsp_lib\u001b[0m\n", - "make[2]: Leaving directory '/home/anne/wip/mycode/lasp'\n", - "[ 26%] Built target lasp_dsp_lib\n", - "make[2]: Entering directory '/home/anne/wip/mycode/lasp'\n", - "\u001b[35m\u001b[1mConsolidate compiler generated dependencies of target lasp_device_lib\u001b[0m\n", - "make[2]: Leaving directory '/home/anne/wip/mycode/lasp'\n", - "[ 63%] Built target lasp_device_lib\n", - "make[2]: Entering directory '/home/anne/wip/mycode/lasp'\n", - "\u001b[35m\u001b[1mConsolidate compiler generated dependencies of target lasp_cpp\u001b[0m\n", - "make[2]: Leaving directory '/home/anne/wip/mycode/lasp'\n", - "[100%] Built target lasp_cpp\n", - "make[1]: Leaving directory '/home/anne/wip/mycode/lasp'\n", - "make: Leaving directory '/home/anne/wip/mycode/lasp'\n" - ] - } - ], - "source": [ - "!make -j -C ~/wip/mycode/lasp" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "1787e24c", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2022-07-20 22:04:50+0200 DebugTrace-cpp 2.0.0a2 (g++ 12.1.0)\n", - "2022-07-20 22:04:50+0200 \n", - "2022-07-20 22:04:50+0200 Enter fillUlDaqDeviceInfo (lasp_uldaq.cpp: 514)\n", - "2022-07-20 22:04:51+0200 Leave fillUlDaqDeviceInfo (lasp_uldaq.cpp)\n" - ] - } - ], - "source": [ - "import lasp\n", - "ds = lasp.DeviceInfo.getDeviceInfo()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "cb4ab7d8", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "init_daqconfiguration(pybind11::module_&)\r\n" - ] - } - ], - "source": [ - "!c++filt _Z21init_daqconfigurationRN8pybind117module_E" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "22ae99b1", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0: Monitor of Starship/Matisse HD Audio Controller Analog Stereo\n", - "1: Starship/Matisse HD Audio Controller Analog Stereo\n", - "2: GP108 High Definition Audio Controller Digital Stereo (HDMI)\n", - "3: Monitor of GP108 High Definition Audio Controller Digital Stereo (HDMI)\n", - "4: default\n", - "5: hw:HDA NVidia,3\n", - "6: hw:HDA NVidia,7\n", - "7: hw:HDA NVidia,8\n", - "8: hw:HDA NVidia,9\n", - "9: hw:HDA NVidia,10\n", - "10: hw:HD-Audio Generic,0\n", - "11: hw:HD-Audio Generic,1\n", - "12: hw:HD-Audio Generic,2\n" - ] - } - ], - "source": [ - "for i, d in enumerate(ds):\n", - " print(f'{i}: ' + d.device_name)\n", - "d = ds[1]" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "47385b02", - "metadata": {}, - "outputs": [], - "source": [ - "config = lasp.DaqConfiguration(d)\n", - "config.outchannel_config[0].enabled = True\n", - "config.outchannel_config[1].enabled = True" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "d12f84b7", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Out channels: 2\n", - "In channels: 0\n" - ] - } - ], - "source": [ - "print('Out channels:',d.noutchannels)\n", - "print('In channels:',d.ninchannels)" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "902ce309", - "metadata": {}, - "outputs": [], - "source": [ - "mgr = lasp.StreamMgr.getInstance()" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "b209294b", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2022-07-20 22:07:02+0200 \n", - "2022-07-20 22:07:02+0200 Enter createDaq (lasp_daq.cpp: 18)\n", - "2022-07-20 22:07:02+0200 | Enter Daq (lasp_daq.cpp: 39)\n", - "2022-07-20 22:07:02+0200 | Leave Daq (lasp_daq.cpp)\n", - "2022-07-20 22:07:02+0200 | \n", - "2022-07-20 22:07:02+0200 | Enter RtAudioDaq (lasp_rtaudiodaq.cpp: 131)\n", - "2022-07-20 22:07:02+0200 | Leave RtAudioDaq (lasp_rtaudiodaq.cpp)\n", - "2022-07-20 22:07:02+0200 Leave createDaq (lasp_daq.cpp)\n", - "2022-07-20 22:07:02+0200 isInput = false\n", - "2022-07-20 22:07:02+0200 isOutput = true\n", - "2022-07-20 22:07:02+0200 \n", - "2022-07-20 22:07:02+0200 Enter start (lasp_rtaudiodaq.cpp: 211)\n", - "2022-07-20 22:07:02+0200 Leave start (lasp_rtaudiodaq.cpp)\n" - ] - } - ], - "source": [ - "mgr.startStream(d, config)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "0830ffb5", - "metadata": {}, - "outputs": [], - "source": [ - "#mgr.stopAllStreams()" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "id": "a7fddc19", - "metadata": {}, - "outputs": [], - "source": [ - "mgr.stopAllStreams()" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "f4610574", - "metadata": {}, - "outputs": [], - "source": [ - "sine = lasp.Sine(200)\n", - "sine.setLevel(-20, True)\n", - "mgr.setSiggen(sine)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "d11c7dae", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0eeb2311", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.5" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/test/bandpass_test_1.py b/test/bandpass_test_1.py deleted file mode 100644 index 499cc34..0000000 --- a/test/bandpass_test_1.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -"""! -Author: J.A. de Jong - ASCEE - -""" -import numpy as np -from lasp.filter.bandpass_limits import (third_octave_band_limits, - octave_band_limits, G, fr) - -from lasp.filter.bandpass_fir import ThirdOctaveBankDesigner, \ - OctaveBankDesigner -import matplotlib.pyplot as plt - -# Adjust these settings -b = 1 # or three -zoom = False # or True - -if b == 3: - bands = ThirdOctaveBankDesigner() -elif b == 1: - bands = OctaveBankDesigner() -else: - raise ValueError('b should be 1 or 3') - - -for x in bands.xs: - fig = plt.figure() - ax = fig.add_subplot(111) - fs = 48000. - dec = np.prod(bands.decimation(x)) - fd = fs/dec - fc = fd/2/1.4 - - freq = np.logspace(np.log10(1), np.log10(fd), 5000) - H = bands.freqResponse(fs, x, freq) - dBH = 20*np.log10(np.abs(H)) - ax.semilogx(freq, dBH) - - if b == 1: - freq, ulim, llim = octave_band_limits(x) - else: - freq, ulim, llim = third_octave_band_limits(x) - - ax.semilogx(freq, llim) - ax.semilogx(freq, ulim) - ax.set_title(f'x = {x}, fnom = {bands.nominal_txt(x)}') - - if zoom: - ax.set_xlim(bands.fl(x)/1.1, bands.fu(x)*1.1) - ax.set_ylim(-15, 1) - else: - ax.set_ylim(-75, 1) - ax.set_xlim(10, fd) - - ax.axvline(fd/2) - if dec > 1: - ax.axvline(fc, color='red') - - ax.legend(['Filter frequency response', - 'Lower limit from standard', - 'Upper limit from standard', - 'Nyquist frequency after decimation', - 'Decimation filter cut-off frequency'], fontsize=8) - -plt.show() diff --git a/test/fft_test.py b/test/fft_test.py deleted file mode 100644 index 58b6e25..0000000 --- a/test/fft_test.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Mon Jan 15 19:45:33 2018 - -@author: anne -""" -import numpy as np -from lasp.wrappers import Fft - -nfft=9 -print('nfft:',nfft) -print(nfft) -nchannels = 4 - -t = np.linspace(0,1,nfft+1)[:-1] -# print(t) -#x1 = 1+np.sin(2*np.pi*t)+3.2*np.cos(2*np.pi*t)+np.sin(7*np.pi*t) -#x1 = np.sin(2*np.pi*t) -x1 = 1+0*t -x = np.vstack([x1.T]*nchannels).T -# Using transpose to get the strides right -x = np.random.randn(nchannels,nfft).T -# x.strides = (8,nfft*8)x -# print("signal:",x) - -X = np.fft.rfft(x,axis=0) -print('Numpy fft') -print(X) - -fft = Fft(nfft) -Y = fft.fft(x) -print('Beamforming fft') -print(Y) - -x2 = fft.ifft(Y) -print('normdiff:',np.linalg.norm(x2-x)) -print('end python script') diff --git a/test/test_bf.c b/test/test_bf.c deleted file mode 100644 index 5375747..0000000 --- a/test/test_bf.c +++ /dev/null @@ -1,46 +0,0 @@ -// test_bf.c -// -// Author: J.A. de Jong -ASCEE -// -// Description: -// -////////////////////////////////////////////////////////////////////// -#include "lasp_mat.h" - -int main() { - - iVARTRACE(15,getTracerLevel()); - /* vd vec1 = vd_alloc(3); */ - /* vd_set(&vec1,2); */ - - /* vd vec2 = vd_alloc(3); */ - /* vd_set(&vec2,3); */ - - /* print_vd(&vec1); */ - - /* vd res = vd_alloc(3); */ - /* d_elem_prod_d(res.data,vec1.data,vec2.data,3); */ - - /* print_vd(&res); */ - - - vc vc1 = vc_alloc(3); - vc_set(&vc1,2+2I); - print_vc(&vc1); - - vc vc2 = vc_alloc(3); - vc_set(&vc2,2-2I); - setvecval(&vc2,0,10); - print_vc(&vc2); - - - vc res2 = vc_alloc(3); - c_hadamard(res2._data,vc1._data,vc2._data,3); - - print_vc(&res2); - - - -} - -////////////////////////////////////////////////////////////////////// diff --git a/test/test_fft.py b/test/test_fft.py new file mode 100644 index 0000000..9cb248b --- /dev/null +++ b/test/test_fft.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Mon Jan 15 19:45:33 2018 + +@author: anne +""" +import numpy as np +from lasp import Fft, getFreq + +def test_forward_fft(): + """ + Test that our FFT implementation equals Numpy's rfft implementation + """ + nfft = 2048 + t = np.linspace(0, 1.0, nfft, endpoint=False) + freq = 10 + omg = 2*np.pi*freq + sig = np.cos(omg*t)+10 + sig = np.random.randn(nfft) + fft_lasp = Fft(nfft) + + res_lasp = fft_lasp.fft(sig)[:,0] + res_npy = np.fft.rfft(sig) + assert(np.isclose(np.linalg.norm(res_lasp- res_npy), 0)) + +def test_backward_fft(): + """ + Test that our backward FFT implementation equals Numpy's rfft implementation + """ + nfft = 2048 + freq = getFreq(nfft, nfft) + + # Sig = np.zeros(nfft//2+1, dtype=complex) + Sigr = np.random.randn(nfft//2+1) + Sigi = np.random.randn(nfft//2+1) + + Sig = Sigr + 1j*Sigi + + fft_lasp = Fft(nfft) + sig_lasp = fft_lasp.ifft(Sig)[:,0] + sig_py = np.fft.irfft(Sig) + + assert(np.isclose(np.linalg.norm(sig_py- sig_lasp), 0)) + diff --git a/test/ps_test.py b/test/test_ps.py similarity index 100% rename from test/ps_test.py rename to test/test_ps.py diff --git a/test/test_uldaq.cpp b/test/test_uldaq.cpp deleted file mode 100644 index b72b8fb..0000000 --- a/test/test_uldaq.cpp +++ /dev/null @@ -1,89 +0,0 @@ -#include "lasp_cppdaq.h" -#include -#include -#include -#include -using std::cout; -using std::cerr; -using std::endl; - - -int main() { - - /* boolvec inChannels = {true, false, false, false}; */ - auto devinfos = Daq::getDeviceInfo(); - DeviceInfo devinfo; - us i; - bool found = false; - for(i=0;i inqueue; - SafeQueue outqueue; - - double totalTime = 5; - double t = 0; - double freq = 1000; - us nblocks = ((us) totalTime*samplerate/samplesPerBlock) + 10; - - for(us i=0;i(malloc(sizeof(double)*samplesPerBlock)); - for(us sample=0;samplestart(&inqueue, &outqueue); - - std::this_thread::sleep_for(std::chrono::seconds((int) totalTime)); - - daq->stop(); - - while(!inqueue.empty()) { - double* buf = (double*) inqueue.dequeue(); - for(us i=0;ineninchannels();ch++) { - cout << buf[ch*samplesPerBlock+i] << " "; - } - cout << endl; - } - free(buf); - } - while(!outqueue.empty()){ - void* dat = outqueue.dequeue(); - free(dat); - } - - return 0; -} - - diff --git a/test/test_workers.c b/test/test_workers.c deleted file mode 100644 index fa33a3b..0000000 --- a/test/test_workers.c +++ /dev/null @@ -1,79 +0,0 @@ -// test_bf.c -// -// Author: J.A. de Jong -ASCEE -// -// Description: -// -////////////////////////////////////////////////////////////////////// -#include "lasp_config.h" -#include "lasp_tracer.h" -#include "lasp_assert.h" -#include - -#ifdef LASP_PARALLEL -#include "lasp_worker.h" -#include "lasp_mq.h" - -static void* walloc(void*); -static int worker(void*,void*); -static void wfree(void*); -#endif // LASP_PARALLEL - - -int main() { - - fsTRACE(15); - - iVARTRACE(15,getTracerLevel()); - -#ifdef LASP_PARALLEL - us njobs = 4; - JobQueue* jq = JobQueue_alloc(njobs); - dbgassert(jq,NULLPTRDEREF); - - Workers* w = Workers_create(njobs, - jq, - walloc, - worker, - wfree, - (void*) 101); - dbgassert(jq,NULLPTRDEREF); - - for(us i=0; i< njobs; i++) { - iVARTRACE(15,i); - JobQueue_push(jq,(void*) i+1); - } - - JobQueue_wait_alldone(jq); - Workers_free(w); - JobQueue_free(jq); - -#endif // LASP_PARALLEL - return 0; -} -#ifdef LASP_PARALLEL -static void* walloc(void* data) { - TRACE(15,"WALLOC"); - uVARTRACE(15,(us) data); - return (void*) 1; -} - -static int worker(void* w_data,void* tj) { - - TRACE(15,"worker"); - - sleep(4); - - return 0; - -} -static void wfree(void* w_data) { - TRACE(15,"wfree"); -} - -#endif // LASP_PARALLEL - - -////////////////////////////////////////////////////////////////////// - -