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 $@
make
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