LeanSDR:Lightweight, portable software-defined radio
git clone http://github.com/pabr/leansdr.git
cd leansdr/src/apps
LeanSDR在使用过程中需要使用X11图形框架,首次在OSX编译LeanSDR会有报错:
g++ -O3 -I.. -Wall -Wno-sign-compare -Wno-array-bounds -Wno-unused-variable -DGUI leandvb.cc -lX11 -o leandvb || \
g++ -O3 -I.. -Wall -Wno-sign-compare -Wno-array-bounds -Wno-unused-variable leandvb.cc -o leandvb
In file included from leandvb.cc:17:
../leansdr/gui.h:16:10: fatal error: 'X11/X.h' file not found
#include <X11/X.h>
^
1 error generated.
g++ -O3 -I.. -Wall -Wno-sign-compare -Wno-array-bounds -Wno-unused-variable -DGUI leansdrscan.cc -lX11 -o leansdrscan || \
g++ -O3 -I.. -Wall -Wno-sign-compare -Wno-array-bounds -Wno-unused-variable leansdrscan.cc -o leansdrscan
leansdrscan.cc:115:10: warning: comparison of unsigned expression < 0 is always false [-Wtautological-compare]
if ( nr < 0 ) fatal("read");
~~ ^ ~
1 warning generated.
ld: library not found for -lX11
clang: error: linker command failed with exit code 1 (use -v to see invocation)
leansdrscan.cc:115:10: warning: comparison of unsigned expression < 0 is always false [-Wtautological-compare]
if ( nr < 0 ) fatal("read");
~~ ^ ~
1 warning generated.
g++ -O3 -I.. -Wall -Wno-sign-compare -Wno-array-bounds -Wno-unused-variable -DGUI leansdrcat.cc -lX11 -o leansdrcat || \
g++ -O3 -I.. -Wall -Wno-sign-compare -Wno-array-bounds -Wno-unused-variable leansdrcat.cc -o leansdrcat
ld: library not found for -lX11
clang: error: linker command failed with exit code 1 (use -v to see invocation)
g++ -O3 -I.. -Wall -Wno-sign-compare -Wno-array-bounds -Wno-unused-variable -DGUI leantsgen.cc -lX11 -o leantsgen || \
g++ -O3 -I.. -Wall -Wno-sign-compare -Wno-array-bounds -Wno-unused-variable leantsgen.cc -o leantsgen
ld: library not found for -lX11
clang: error: linker command failed with exit code 1 (use -v to see invocation)
g++ -O3 -I.. -Wall -Wno-sign-compare -Wno-array-bounds -Wno-unused-variable -DGUI leanchansim.cc -lX11 -o leanchansim || \
g++ -O3 -I.. -Wall -Wno-sign-compare -Wno-array-bounds -Wno-unused-variable leanchansim.cc -o leanchansim
ld: library not found for -lX11
clang: error: linker command failed with exit code 1 (use -v to see invocation)
g++ -O3 -I.. -Wall -Wno-sign-compare -Wno-array-bounds -Wno-unused-variable -DGUI leandvbtx.cc -lX11 -o leandvbtx || \
g++ -O3 -I.. -Wall -Wno-sign-compare -Wno-array-bounds -Wno-unused-variable leandvbtx.cc -o leandvbtx
ld: library not found for -lX11
clang: error: linker command failed with exit code 1 (use -v to see invocation)
查找X11目录
sudo find / -name "X.h"
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Tk.framework/Versions/8.4/Headers/X11/X.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers/X11/X.h
find: /dev/fd/cn0xroot: No such file or directory
find: /dev/fd/cn0xroot: No such file or directory
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers/X11/X.h
/opt/local/include/X11/X.h
/opt/local/share/doc/boost/libs/coroutine/example/cpp03/asymmetric/X.h
/opt/metasploit-framework/embedded/include/X11/X.h
/opt/X11/include/X11/X.h
/System/Library/Frameworks/Tk.framework/Versions/8.4/Headers/X11/X.h
/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers/X11/X.h
解决方案:修改Makefile
APPS = leandvb leansdrscan
APPS += leansdrcat leantsgen leanchansim leandvbtx
all: $(APPS)
clean:
rm -f $(APPS)
DEPS = ../leansdr/*.h
CXXFLAGS = -O3 -I.. -I/opt/X11/include -Wall -Wno-sign-compare -Wno-array-bounds -Wno-unused-variable
%: %.cc $(DEPS)
g++ $(CXXFLAGS) -DGUI $< -lX11 -L/opt/X11/lib -o $@ || \
g++ $(CXXFLAGS) $< -o $@
EMBED_FLAGS= -I.. -Wall -Wno-sign-compare -Wno-array-bounds -Wno-unused-variable \
-Ofast -mfpu=neon -funsafe-math-optimizations -fsingle-precision-constant
leandvb.embedded: leandvb.cc $(DEPS)
g++ $(CXXFLAGS) $(EMBED_FLAGS) $< -static -o $@ || \
g++ $(CXXFLAGS) $(EMBED_FLAGS) $< -o $@
Usage
leandvb --help
Usage: leandvb [options] < IQ > TS
Demodulate DVB-S I/Q on stdin, output MPEG packets on stdout
Input options:
--u8 Input format is 8-bit unsigned (rtl_sdr, default)
--f32 Input format is 32-bit float (gqrx)
-f HZ Input sample rate (default: 2.4e6)
--loop Repeat (stdin must be a file)
--inbuf N Additional input buffering (samples)
Preprocessing options:
--anf N Number of birdies to remove (default: 1)
--derotate HZ For use with --fd-pp, otherwise use --tune
--resample Resample baseband (CPU-intensive)
--resample-rej K Aliasing rejection (default: 10)
--decim N Decimate baseband (causes aliasing)
--cnr Measure CNR (requires samplerate>3*symbolrate)
--fd-pp NUM Dump preprocessed IQ data to file descriptor
DVB-S options:
--sr HZ Symbol rate (default: 2e6)
--tune HZ Bias frequency for demodulation
--drift Track frequency drift beyond safe limits
--standard S DVB-S (default), DVB-S2 (not implemented)
--const C QPSK (default), BPSK .. 32APSK (DVB-S2 only)
--cr N/D Code rate 1/2 (default) .. 7/8 .. 9/10
--fastlock Synchronize more aggressively (CPU-intensive)
--sampler nearest, linear, rrc
--rrc-steps N RRC interpolation factor
--rrc-rej K RRC filter rejection (defaut:10)
--roll-off A RRC roll-off (default: 0.35)
--viterbi Use Viterbi (CPU-intensive)
--hard-metric Use Hamming distances with Viterbi
Compatibility options:
--hdlc Expect HDLC frames instead of MPEG packets
--packetized Output 16-bit length prefix (default: as stream)
General options:
--buf-factor Buffer size factor (default:4)
--hq Maximize sensitivity
(Enables all CPU-intensive features)
--hs Maximize throughput (QPSK CR1/2 only)
(Disables all preprocessing)
UI options:
-h Display this help message and exit
-v Output debugging info at startup and exit
-d Output debugging info during operation
--fd-info NUM Output demodulator status to file descriptor
--fd-const NUM Output constellation and symbols to file descr
--gui Show constellation and spectrum (X11)
--duration S Width of timeline plot (default: 60)
--linger Keep GUI running after EOF
Testing options:
--awgn STDDEV Add white gaussian noise (slow)
eanchansim --help
Usage: leanchansim [options] < IQ.in > IQ.out
Simulate an imperfect communication channel.
Input options:
--iu8 Interpret stdin as complex unsigned char
--if32 Interpret stdin as complex float
-f Hz Specify sample rate
--loop Repeat (stdin must be a file)
Gain options:
--scale FACTOR Multiply by constant
Drift options:
--lo HZ Specify nominal LO frequency
--ppm PPM Specify LO accuracy
--drift-period S Drift +-ppm every S seconds
--drift-rate R Drift with maximum rate R (Hz/s)
--drift2-amp HZ Add secondary drift (range in Hz)
--drift2-freq HZ Add secondary drift (rate in Hz)
Noise options:
--awgn STDDEV Add white gaussian noise (dB)
Output options:
--ou8 Output as complex unsigned char
--of32 Output as complex float
leandvbtx --help
Usage: leandvbtx [options] < TS > IQ
Modulate MPEG packets into a DVB-S baseband signal
Output float complex samples
Options: -f INTERP[/DECIM] Samples per symbols (default: 2)
--roll-off R RRC roll-off (defalt: 0.35)
--power P Output power (dB)
--agc Better regulation of output power
-v Verbose output
leansdrcat --help
Usage: leansdrcat [options]
Forward from stdin to stdout at constant rate.
Options:
--block Pause when stdout is busy (default: '#' on stderr)
--nonblock Silently ignore when stdout is busy
--cbr R Set rate in bits per second
--cbr8 R Set rate in bytes per second
--cbr16 R Set rate in 16-bit words per second
--cbr32 R Set rate in 32-bit words per second
--cbr64 R Set rate in 64-bit words per second
-h Display this help message and exit
leansdrscan --help
Usage: leansdrscan [options] [program settings]
Run , cycling through combinations of settings.
Example: 'leansdrscan -v cat -n,-e' will feed stdin through 'cat -n' and 'cat -e' alternatively.
Options:
-h Print this message
-v Verbose
--timeout N Next settings if no output within N seconds
--rewind Rewind input (stdin must be a file)
--probesize N Forward only N bytes (with --rewind)
leantsgen --help
Usage: leantsgen [-c PACKETCOUNT]
Output numbered MPEG TS packets on stdout.
Example
rtl_sdr -g 0 -f 315e6 -s 1000000 /tmp/test.ts
leandvb --gui -v -d -f 1000e3 --sr 500e3 --cr 1/2 --derotate -4500 --anf 0 < /tmp/test.ts > mpeg.ts

https://www.rtl-sdr.com/transmitting-dvb-s-with-a-plutosdr-and-receiving-it-with-an-rtl-sdr/
http://www.pabr.org/radio/leandvb/leandvb.en.html