LeanSDR:Lightweight, portable software-defined radio
git clone http://github.com/pabr/leansdr.gitcd 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 leandvbIn file included from leandvb.cc:17:../leansdr/gui.h:16:10: fatal error: 'X11/X.h' file not found#include^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 leansdrscanleansdrscan.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 -lX11clang: 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 leansdrcatld: library not found for -lX11clang: 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 leantsgenld: library not found for -lX11clang: 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 leanchansimld: library not found for -lX11clang: 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 leandvbtxld: library not found for -lX11clang: 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.hfind: /dev/fd/cn0xroot: No such file or directoryfind: /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 leansdrscanAPPS += leansdrcat leantsgen leanchansim leandvbtxall: $(APPS)clean:rm -f $(APPS)DEPS = ../leansdr/*.hCXXFLAGS = -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-constantleandvb.embedded: leandvb.cc $(DEPS)g++ $(CXXFLAGS) $(EMBED_FLAGS) $< -static -o $@ || \g++ $(CXXFLAGS) $(EMBED_FLAGS) $< -o $@
make
Usage
leandvb --helpUsage: leandvb [options] < IQ > TSDemodulate DVB-S I/Q on stdin, output MPEG packets on stdoutInput 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 descriptorDVB-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 ViterbiCompatibility 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 EOFTesting options: --awgn STDDEV Add white gaussian noise (slow)
eanchansim --helpUsage: leanchansim [options] < IQ.in > IQ.outSimulate 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 constantDrift 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 --helpUsage: leandvbtx [options] < TS > IQModulate MPEG packets into a DVB-S baseband signalOutput float complex samplesOptions: -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 --helpUsage: 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 --helpUsage: 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 --helpUsage: leantsgen [-c PACKETCOUNT]Output numbered MPEG TS packets on stdout.
Example
rtl_sdr -g 0 -f 315e6 -s 1000000 /tmp/test.tsleandvb --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