276 lines
10 KiB
Plaintext
276 lines
10 KiB
Plaintext
==================================
|
|
Building and installing on Linux
|
|
==================================
|
|
|
|
Quickstart 1
|
|
-----------
|
|
|
|
Builds static versions of wxWidgets, portaudio, codec2-dev, which are commonly
|
|
missing on many Linux systems, or of the wrong (older) version.
|
|
|
|
1/ Assuming the fdmdv2-dev source is checked out into ~/fdmdv2-dev:
|
|
|
|
$ sudo apt-get install libgtk2.0-dev libhamlib-dev libsamplerate-dev libasound2-dev libao-dev libgsm1-dev
|
|
$ cd fdmdv2-dev
|
|
$ mkdir build_linux
|
|
$ cd build_linux
|
|
$ cmake -DBOOTSTRAP_WXWIDGETS=TRUE ~/fdmdv2-dev
|
|
$ make
|
|
|
|
2/ Then you can configure FreeDV using your local codec-dev, something like:
|
|
|
|
$ cmake -DCMAKE_BUILD_TYPE=Debug -DBOOTSTRAP_WXWIDGETS=TRUE -DCODEC2_INCLUDE_DIRS=/path/to/codec2-dev/src -DCODEC2_LIBRARY=/path/to/codec2-dev/build_linux/src/libcodec2.so -DUSE_STATIC_CODEC2=FALSE -DUSE_STATIC_PORTAUDIO=TRUE -DUSE_STATIC_SOX=TRUE ../
|
|
|
|
3/ OR build a local copy of codec2-dev:
|
|
|
|
$ cmake -DBOOTSTRAP_WXWIDGETS=TRUE -DUSE_STATIC_CODEC2=TRUE -DUSE_STATIC_PORTAUDIO=TRUE -DUSE_STATIC_SOX=TRUE ../
|
|
|
|
4/ Build and run FreeDV:
|
|
|
|
$ make
|
|
$ ./src/freedv
|
|
|
|
Quickstart 2
|
|
------------
|
|
|
|
1/ Assuming you have all the dependant libraries:
|
|
|
|
$ cd /path/to/fdmdv2
|
|
$ mkdir build_linux
|
|
$ cd build_linux
|
|
$ cmake ../ (defaults to /usr/local, use CMAKE_INSTALL_PREFIX to override)
|
|
(if no errors)
|
|
$ make
|
|
(as root)
|
|
$ make install
|
|
|
|
|
|
=======================================================
|
|
Building for Windows on Ubuntu Linux (Cross compiling)
|
|
=======================================================
|
|
|
|
1/ Install the cross compiling toolchain:
|
|
|
|
$ sudo apt-get install mingw-w64
|
|
|
|
2/ Patch cmake using: http://www.cmake.org/gitweb?p=stage/cmake.git;a=patch;h=33286235048495ceafb636d549d9a4e8891967ae
|
|
|
|
3/ Checkout a fresh copy of codec2-dev and build for Windows, pointing to the generate_codebook built by a linux build of generate_codebook, using this cmake line
|
|
|
|
$ cmake .. -DCMAKE_TOOLCHAIN_FILE=../fdmdv2-dev/cmake/Toolchain-Ubuntu-mingw32.cmake -DUNITTEST=FALSE -DGENERATE_CODEBOOK=/home/david/codec2-dev/build_linux/src/generate_codebook
|
|
|
|
4/ Build WxWidgets
|
|
|
|
$ cd /path/to/fdmdv2-dev
|
|
$ mkdir build_windows
|
|
$ cd build_windows
|
|
$ cmake -DBOOTSTRAP_WXWIDGETS=TRUE .. -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchain-Ubuntu-mingw32.cmake -DCMAKE_BUILD_TYPE=Debug
|
|
$ make
|
|
|
|
5/ Download and install the Windows version of Hamlib:
|
|
|
|
$ wget http://internode.dl.sourceforge.net/project/hamlib/hamlib/1.2.15.3/hamlib-win32-1.2.15.3.zip
|
|
$ unzip hamlib-win32-1.2.15.3.zip
|
|
|
|
6/ Build All the libraries and FreeDV:
|
|
|
|
$ cmake -DBOOTSTRAP_WXWIDGETS=TRUE -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchain-Ubuntu-mingw32.cmake -DUSE_STATIC_PORTAUDIO=TRUE -DUSE_STATIC_SNDFILE=TRUE -DUSE_STATIC_SAMPLERATE=TRUE -DUSE_STATIC_SOX=TRUE -DUSE_STATIC_CODEC2=FALSE -DCODEC2_INCLUDE_DIRS=/home/david/tmp/codec2-dev/src -DCODEC2_LIBRARY=/home/david/tmp/codec2-dev/build_windows/src/libcodec2.dll.a -DHAMLIB_INCLUDE_DIR=hamlib-win32-1.2.15.3/include -DHAMLIB_LIBRARY=hamlib-win32-1.2.15.3/lib/gcc/libhamlib.dll.a -DCMAKE_BUILD_TYPE=Debug ..
|
|
$ make
|
|
|
|
====================================
|
|
Building and installing on Windows
|
|
====================================
|
|
|
|
The windows build is similar to linux and follows the same basic workflow,
|
|
however, while codec2 and FreeDV (fdmdv2) build well on windows, some of the
|
|
dependencies do not. For that reson current windows releases are cross-compiled
|
|
from linux.
|
|
|
|
Only MinGW is supported. While it is likely possible to perform a pure MinGW
|
|
build, installing MSYS2 will make your life easier.
|
|
|
|
CMake may not automatically detect that you're in the MSYS environment. If this
|
|
occurs you need to pass cmake the proper generator:
|
|
|
|
cmake -G"MSYS Makefiles" [other options] </path/to/source>
|
|
|
|
===============================
|
|
Bootstrapping wxWidgets build
|
|
===============================
|
|
|
|
If wxWidgets (>= 3.0) is not available then one option is to have CMake boot-
|
|
strap the build for FreeDV.
|
|
|
|
This is required because the tool wx-config is used to get the correct compiler
|
|
and linker flags of the wxWidgets components needed by FreeDV. Since this is
|
|
normally done at configure time, not during "make", it is not possible for CMake
|
|
or have this information prior to building wxWidgets.
|
|
|
|
In order to work around this issue you can "bootstrap" the wxWidgets build using
|
|
the CMake option, "BOOTSTRAP_WXWIDGETS". wxWidgets will be built using static
|
|
libraries.
|
|
|
|
NOTE: This forces "USE_STATIC_WXWIDGETS" to be true internally regarless of the
|
|
value set manually.
|
|
|
|
(from any directory, but empty directory outside of the source is prefered.)
|
|
$ cmake -DBOOTSTRAP_WXWIDGETS=TRUE /path/to/fdmdv2
|
|
$ make
|
|
(wxWidgets is downloaded and built)
|
|
$ cmake .
|
|
(wxWidgets build should be detected)
|
|
$ make
|
|
(if all goes well, as root)
|
|
$ make install
|
|
|
|
====================================
|
|
Building and installing on OSX
|
|
====================================
|
|
|
|
====================================
|
|
Building and installing on FreeBSD
|
|
====================================
|
|
|
|
As per "Quickstart 2" above but change build_linux to build_freebsd
|
|
|
|
=======
|
|
Editing
|
|
=======
|
|
|
|
Please make sure your text editor does not insert tabs, and
|
|
used indents of 4 spaces. The following .emacs code was used to
|
|
configure emacs:
|
|
|
|
(setq-default indent-tabs-mode nil)
|
|
|
|
(add-hook 'c-mode-common-hook
|
|
(function (lambda ()
|
|
(setq c-basic-offset 4)
|
|
)))
|
|
|
|
====
|
|
TODO
|
|
====
|
|
|
|
[ ] Open R&D questions
|
|
+ Goal is to develop an open source DV mode that performs comparably to SSB
|
|
[ ] Does 700 perform OK next to SSB?
|
|
+ approx same tx pk level (hard to measure exactly)
|
|
+ try some low SNR channels
|
|
+ try some fast fading/nasty channels
|
|
[ ] Is 700 speech quality acceptable?
|
|
|
|
[X] test frames
|
|
[X] freedv API support
|
|
[X] BER displayed on GUI for 700 and 1600
|
|
[X] plot error patterns for 700 and 1600
|
|
+ callback for error patterns, or poll via stats interface
|
|
[X] plot error histograms for 700 and 1600
|
|
+ map bit error to carrier, have done this in tcohpsk?
|
|
+ how to reset histogram? On error reset?
|
|
+ histogram screen ... new code?
|
|
+ test with filter
|
|
|
|
[X] Bugs
|
|
[X] resync issue
|
|
[X] equalise power on 700 and 1600
|
|
[X] research real and complex PAPR
|
|
[X] waterfall and spectrum in analog mode
|
|
[X] The waterfall in analog mode appears to quit working sometimes?
|
|
|
|
[X] On TX, intermittently PTT will cause signal to be heard in speakers. Toggle PTT or
|
|
Stop/Start toggle and then starts working.
|
|
[X] Squelch control on 1600 mode will not open up squelch to 0 (appears to be around 2 dB)
|
|
[X] space bar keys PTT when entering text info box
|
|
[X] checksum based txt reception
|
|
+ only print if valid
|
|
[X] IC7200 audio breakup
|
|
[ ] short varicode doesn't work
|
|
+ #ifdef-ed out for now
|
|
+ cld be broken in freedv_api
|
|
[X] On 700 audio sounds tinny and clicky when out of sync compared to 1600 why?
|
|
+ clue: only when analog not pressed
|
|
+ this was 7.5 to 8kHz interpolator bug
|
|
[X] spectrum and waterfall scale changes when analog pressed
|
|
[X] ocassional test frames error counter goes crazy
|
|
[ ] old Waterfall AGC
|
|
[ ] 700 syncs up to 1000Hz sine waves
|
|
+ shouldn't trigger sync logic, will be a problem with carriers
|
|
[ ] "clip" led, encourage people to adjust gain to hit that occ when speaking
|
|
[ ] Win32 record from radio time
|
|
|
|
[ ] FreeDV 700 improvements
|
|
[ ] bpf filter after clipping to remove clicks
|
|
[ ] tcohpsk first, measure PAPR, impl loss
|
|
[ ] error masking
|
|
[ ] C version
|
|
[ ] training off air? Switchable?
|
|
[ ] excitation params
|
|
[ ] training
|
|
[ ] plotting other demod stats like ch ampl and phase ests
|
|
[ ] profile with perf, different libresample routine
|
|
[ ] check for occassional freedv 700 loss of sync
|
|
+ scatter seems to jump
|
|
[ ] switchable diversity (narrowband) option
|
|
+ measure difference on a few channels
|
|
+ blog
|
|
|
|
[X] win32
|
|
[X] X-compile works
|
|
[X] basic installer
|
|
[X] Win32 installer
|
|
+ Richard has taken care of this
|
|
|
|
[ ] Small fixes
|
|
[X] Playfile bug
|
|
[X] running again
|
|
[X] bump ver number
|
|
[X] long varicode default
|
|
[X] option to _not_ require checksum, on by default
|
|
[X] default squelch 2dB
|
|
[X] scatter diagram tweaks
|
|
+ e.g. meaningful plots on fading channels in real time
|
|
[X] agc with hysteresis
|
|
+ changed to log steps
|
|
[X] longer persistance
|
|
+ changed to 6 seconds
|
|
[X] diversity addtions on 700
|
|
+ still not real obvious on plot
|
|
+ might be useful to make this switchable
|
|
[X] scatter diagram different colours/carrier
|
|
[X] remember what mode you were in
|
|
[ ] cmd line file decode
|
|
[ ] Waterfall direction
|
|
[ ] documentation or use, walk through, you tube, blog posts
|
|
|
|
[ ] Web support for Presence/spotting hooks
|
|
|
|
=================
|
|
USER GUIDE NOTES
|
|
=================
|
|
|
|
TODO: Put this in a more usable form, video tutorials etc
|
|
|
|
1/ Error Histogram. Displays BER of each carrier when in "test frame"
|
|
mode. As each QPSK carrier has 2 bits there are 2*Nc histogram
|
|
points.
|
|
|
|
Ideally all carriers will have about the same BER (+/- 20% after 5000
|
|
total bit errors). However problems can occur with filtering in the
|
|
tx path. If one carrier has less power, then it will have a higher
|
|
BER. The errors in this carrier will tend to dominate overall
|
|
BER. For example if one carrier is attenuated due to SSB filter
|
|
ripple in the tx path then the BER on that carrier will be higher.
|
|
This is bad news for DV.
|
|
|
|
Suggested usage: Transmit FreeDV in test frame mode. Use a 2nd rx
|
|
(or get a friend) to monitor your rx signal with FreeDV in test frame
|
|
mode. Adjust your rx SNR to get a BER of a few % (e.g. reduce tx power,
|
|
use a short antenna for the rx, point your beam away, adjust rx RF
|
|
gain). Monitor the error histogram for a few minutes, until you have
|
|
say 5000 total bit errors. You have a problem if the BER of any
|
|
carrier is more than 20% different from the rest.
|
|
|
|
A typical issue will be one carrier at 1.0, the others at 0.5,
|
|
indicating the poorer carrier BER is twice the larger.
|