• Mac OSX 编译 LeanSDR


    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

  • 相关阅读:
    lvs+keeplived笔录
    python之购物车的编写(熬夜撸代码中。。。)
    关于三级菜单程序的编写
    .split()函数使用方法
    range()函数的使用
    关于python如何简单跳出多层循环
    Kubernetes部署通用手册 (支持版本1.19,1.18,1.17,1.16)
    八个开源的 Spring Boot 前后端分离项目,一定要收藏!
    招聘简章-2020年10月25日19:31:39
    小公司老板的日常管理
  • 原文地址:https://www.cnblogs.com/k1two2/p/7566678.html
Copyright © 2020-2023  润新知