Makefile.android now downloads fftw-3.3.11.tar.gz automatically instead of requiring the user to place sources in third_party/fftw/ manually. The FFTW_SRC variable can still be overridden to use an existing copy. Added distclean target. Updated README accordingly. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| java/org/openhpsdr/dsp | ||
| third_party | ||
| .gitignore | ||
| amd.c | ||
| amd.h | ||
| ammod.c | ||
| ammod.h | ||
| amsq.c | ||
| amsq.h | ||
| analyzer.c | ||
| analyzer.h | ||
| anf.c | ||
| anf.h | ||
| anr.c | ||
| anr.h | ||
| apfshadow.c | ||
| apfshadow.h | ||
| bandpass.c | ||
| bandpass.h | ||
| calcc.c | ||
| calcc.h | ||
| calculus | ||
| calculus.c | ||
| calculus.h | ||
| cblock.c | ||
| cblock.h | ||
| cfcomp.c | ||
| cfcomp.h | ||
| cfir.c | ||
| cfir.h | ||
| channel.c | ||
| channel.h | ||
| cmath.c | ||
| cmath.h | ||
| comm.h | ||
| compress.c | ||
| compress.h | ||
| COPYING | ||
| delay.c | ||
| delay.h | ||
| dexp.c | ||
| dexp.h | ||
| div.c | ||
| div.h | ||
| doublepole.c | ||
| doublepole.h | ||
| eer.c | ||
| eer.h | ||
| emnr.c | ||
| emnr.h | ||
| emph.c | ||
| emph.h | ||
| eq.c | ||
| eq.h | ||
| fastmath.h | ||
| fcurve.c | ||
| fcurve.h | ||
| FDnoiseIQ.c | ||
| FDnoiseIQ.h | ||
| fir.c | ||
| fir.h | ||
| firmin.c | ||
| firmin.h | ||
| fmd.c | ||
| fmd.h | ||
| fmmod.c | ||
| fmmod.h | ||
| fmsq.c | ||
| fmsq.h | ||
| gain.c | ||
| gain.h | ||
| gaussian.c | ||
| gaussian.h | ||
| gen.c | ||
| gen.h | ||
| icfir.c | ||
| icfir.h | ||
| iir.c | ||
| iir.h | ||
| impulse_cache.c | ||
| impulse_cache.h | ||
| iobuffs.c | ||
| iobuffs.h | ||
| iqc.c | ||
| iqc.h | ||
| linux_port.c | ||
| linux_port.h | ||
| lmath.c | ||
| lmath.h | ||
| main.c | ||
| main.h | ||
| make_calculus.c | ||
| make_interface.c | ||
| make_zetahat.c | ||
| Makefile | ||
| Makefile.android | ||
| Makefile.windows | ||
| matchedCW.c | ||
| matchedCW.h | ||
| meter.c | ||
| meter.h | ||
| meterlog10.c | ||
| meterlog10.h | ||
| nbp.c | ||
| nbp.h | ||
| nob.c | ||
| nob.h | ||
| nobII.c | ||
| nobII.h | ||
| org_openhpsdr_dsp_Wdsp.c | ||
| org_openhpsdr_dsp_Wdsp.h | ||
| osctrl.c | ||
| osctrl.h | ||
| patchpanel.c | ||
| patchpanel.h | ||
| README.md | ||
| resample.c | ||
| resample.h | ||
| resource.h | ||
| rmatch.c | ||
| rmatch.h | ||
| rnnr.c | ||
| rnnr.h | ||
| RXA.c | ||
| RXA.h | ||
| sbnr.c | ||
| sbnr.h | ||
| sender.c | ||
| sender.h | ||
| shift.c | ||
| shift.h | ||
| siphon.c | ||
| siphon.h | ||
| slew.c | ||
| slew.h | ||
| snb.c | ||
| snb.h | ||
| ssql.c | ||
| ssql.h | ||
| syncbuffs.c | ||
| syncbuffs.h | ||
| TXA.c | ||
| TXA.h | ||
| utilities.c | ||
| utilities.h | ||
| varsamp.c | ||
| varsamp.h | ||
| version.c | ||
| wcpAGC.c | ||
| wcpAGC.h | ||
| wdsp.h | ||
| wisdom.c | ||
| zetaHat.bin | ||
| zetaHat.c | ||
| zetaHat.h | ||
WDSP
DSP library for SDR (Software Defined Radio) applications.
Originally written for Windows by Warren Pratt, NR0V. Ported to Linux and Android by John Melton G0ORX/N6LYT.
Project structure
wdsp/
├── *.c / *.h — WDSP library sources
├── org_openhpsdr_dsp_Wdsp.c/.h — JNI bridge
├── Makefile — host build (Linux / macOS)
├── Makefile.android — Android cross-build
├── Makefile.windows — Windows cross-build (MinGW-w64, runs on Linux)
├── java/
│ └── org/openhpsdr/dsp/Wdsp.java
├── third_party/
│ ├── fftw-3.3.11/ — FFTW source (downloaded automatically)
│ ├── fftw-win64/ — FFTW Windows binaries (downloaded automatically)
│ ├── rnnoise/ — RNNoise noise suppression
│ └── libspecbleach/ — spectral noise reduction
├── obj/ — object files (generated)
├── obj_win/ — Windows object files (generated)
├── lib/ — built libraries (generated)
└── lib_win/ — Windows libraries (generated)
Host build (Linux / macOS)
Dependencies
Linux:
sudo apt install build-essential libfftw3-dev pkg-config default-jdk
macOS:
brew install fftw pkg-config
Build
# Full build: static + shared + JNI library + Java classes
make
# Individual targets
make static # lib/libwdsp.a
make shared # lib/libwdsp.so (or .dylib on macOS)
make java # lib/libwdspj.so + java/build/
Install
sudo make install # installs to /usr/local/lib and /usr/local/include
sudo make PREFIX=/opt/wdsp install # custom prefix
sudo make install_java # install libwdspj alongside libwdsp
Options
| Variable | Default | Description |
|---|---|---|
PREFIX |
/usr/local |
Install prefix |
NR34LIB |
off | Set to ON to skip bundled rnnoise/libspecbleach |
CC |
gcc |
C compiler |
CFLAGS |
-pthread -O3 ... |
Compiler flags |
make NR34LIB=ON # build without NR3/NR4 noise reduction
make CC=clang
Clean
make clean
Windows build (кросс-компиляция с Linux)
Сборка выполняется на Linux с помощью MinGW-w64. FFTW скачивается и собирается из исходников автоматически.
Зависимости
# Arch
sudo pacman -S mingw-w64-gcc
# Debian / Ubuntu
sudo apt install gcc-mingw-w64-x86-64 binutils-mingw-w64-x86-64
# Fedora
sudo dnf install mingw64-gcc mingw64-binutils
Также нужен wget или curl.
Сборка
# DLL + статическая библиотека (рекомендуется)
make -f Makefile.windows
# Только DLL
make -f Makefile.windows dll
# Только статическая библиотека
make -f Makefile.windows static
Результат в lib_win/:
| Файл | Назначение |
|---|---|
libwdsp.dll |
DLL для Windows |
libwdsp.dll.a |
Import library для MinGW (-lwdsp) |
libwdsp.a |
Статическая библиотека |
libfftw3-3.dll |
Runtime dependency — распространять вместе с DLL |
libfftw3f-3.dll |
Runtime dependency — распространять вместе с DLL |
Линковка приложения
MinGW:
gcc myapp.c -Llib_win -lwdsp -o myapp.exe
MSVC — переименовать libwdsp.dll.a в libwdsp.lib и подключить обычным образом.
Статически (MinGW):
gcc myapp.c libwdsp.a third_party/rnnoise/librnnoise.a \
third_party/libspecbleach/libspecbleach.a \
-Lthird_party/fftw-win64 -lfftw3-3 -lfftw3f-3 -lavrt -lm -o myapp.exe
Параметры
| Переменная | По умолчанию | Описание |
|---|---|---|
MINGW_PREFIX |
x86_64-w64-mingw32 |
Префикс MinGW toolchain |
FFTW_VERSION |
3.3.11 |
Версия FFTW |
CFLAGS |
-O3 -Wno-parentheses |
Флаги компилятора |
make -f Makefile.windows MINGW_PREFIX=i686-w64-mingw32 # 32-bit Windows
Очистка
make -f Makefile.windows clean # артефакты сборки
make -f Makefile.windows distclean # + удалить скачанный FFTW
Android build
Prerequisites
- Android NDK r23 or newer
- Java compiler — for building the
.classfile (Android Studio's JBR or any JDK)
FFTW 3.3.11 скачивается и собирается автоматически. Чтобы использовать уже скачанный исходник, передайте FFTW_SRC=/path/to/fftw-3.3.11.
Build
make android
# or directly
make -f Makefile.android
Output is placed into:
lib/android/
├── arm64-v8a/
│ ├── libfftw3.so
│ ├── libfftw3f.so
│ ├── libwdsp.so
│ └── libwdspj.so
├── armeabi-v7a/
│ └── ...
├── x86_64/
│ └── ...
└── java/
└── org/openhpsdr/dsp/Wdsp.class
libwdsp.so has FFTW linked statically — no separate FFTW dependency at runtime on the device.
Options
| Variable | Default | Description |
|---|---|---|
ANDROID_NDK |
/home/vladimir/Android/Sdk/ndk/29.0.14206865 |
Path to Android NDK |
ANDROID_API |
24 |
Minimum API level |
ANDROID_ABIS |
arm64-v8a armeabi-v7a x86_64 |
Target ABIs |
ANDROID_HOST_TAG |
auto-detected | Host platform (linux-x86_64, darwin-x86_64, etc.) |
FFTW_SRC |
third_party/fftw |
Path to FFTW source |
JAVAC |
/opt/android-studio/jbr/bin/javac |
Java compiler |
make -f Makefile.android \
ANDROID_NDK=~/Android/Sdk/ndk/26.3.11579264 \
ANDROID_API=26 \
ANDROID_ABIS=arm64-v8a
Clean
make -f Makefile.android clean # удаляет obj/android/ и lib/android/
make -f Makefile.android distclean # + удаляет скачанный FFTW
Using in an Android project
Copy lib/android/{abi}/ into your Android project's jniLibs:
app/src/main/jniLibs/
├── arm64-v8a/
│ ├── libwdsp.so
│ └── libwdspj.so
├── armeabi-v7a/
│ └── ...
└── x86_64/
└── ...
Add Wdsp.java to your source tree and load the libraries at startup:
System.loadLibrary("wdsp");
System.loadLibrary("wdspj");
Or use the singleton:
Wdsp wdsp = Wdsp.getInstance();