From c69b1421a7e5ac65b0dfdfc90c11e99842e4f1ce Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 11 May 2019 00:42:21 +0200 Subject: [PATCH] Local Output/Sink: updated documentation --- app/main.cpp | 2 +- debian/changelog | 6 ++ doc/img/LocalOutput_plugin.png | Bin 0 -> 9647 bytes doc/img/LocalOutput_plugin.xcf | Bin 0 -> 40912 bytes doc/img/LocalSource.png | Bin 0 -> 12625 bytes doc/img/LocalSource.xcf | Bin 0 -> 42959 bytes plugins/channeltx/localsource/localsource.pro | 52 ++++++++++++++++++ .../localsource/localsourcesettings.cpp | 2 +- plugins/channeltx/localsource/readme.md | 49 +++++++++++++++++ .../samplesink/localoutput/localoutput.pro | 51 +++++++++++++++++ .../samplesink/localoutput/localoutputgui.ui | 14 ----- plugins/samplesink/localoutput/readme.md | 24 ++++++++ sdrangel.windows.pro | 2 + 13 files changed, 186 insertions(+), 16 deletions(-) create mode 100644 doc/img/LocalOutput_plugin.png create mode 100644 doc/img/LocalOutput_plugin.xcf create mode 100644 doc/img/LocalSource.png create mode 100644 doc/img/LocalSource.xcf create mode 100644 plugins/channeltx/localsource/localsource.pro create mode 100644 plugins/channeltx/localsource/readme.md create mode 100644 plugins/samplesink/localoutput/localoutput.pro create mode 100644 plugins/samplesink/localoutput/readme.md diff --git a/app/main.cpp b/app/main.cpp index 78d2eeb60..e2610a494 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -27,7 +27,7 @@ #include "mainwindow.h" #include "dsp/dsptypes.h" #ifdef _MSC_VER -#define GIT_COMMIT_HASH_STR "v4.7.2" +#define GIT_COMMIT_HASH_STR "v4.8.0" #else #include "sdrangel_version.h" #endif diff --git a/debian/changelog b/debian/changelog index 5e071ce9a..304a22e44 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +sdrangel (4.8.0-1) unstable; urgency=medium + + * Local output plugin + + -- Edouard Griffiths, F4EXB Fri, 10 May 2019 20:44:06 +0100 + sdrangel (4.7.2-1) unstable; urgency=medium * Unique DeviceAPI interface for sources and sinks diff --git a/doc/img/LocalOutput_plugin.png b/doc/img/LocalOutput_plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..8e9ecf750faedcbaedb8cb8edbebf8aea3e7ce9d GIT binary patch literal 9647 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 literal 0 HcmV?d00001 diff --git a/doc/img/LocalOutput_plugin.xcf b/doc/img/LocalOutput_plugin.xcf new file mode 100644 index 0000000000000000000000000000000000000000..4c519f507f948bfcca52271f76ac916e324e2bfb GIT binary patch literal 40912 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 n#ek)NLocal source channel plugin + +

Introduction

+ +This plugin draws I/Q samples from a Local Output plugin device sink in another device set into the baseband. It is basically the same as the Remote Source channel plugin but pipes the samples internally instead of receiving them over the network. + +It may be used when you want to use a particular sub area of the baseband for madulation. + +Note that because it uses only the channelizer half band filter chain to achieve interpolation and center frequency shift you have a limited choice on the center frequencies that may be used (similarly to the Remote Source). The available center frequencies depend on the baseband sample rate, the channel interpolation and the filter chain that is used so you have to play with these parameters to obtain a suitable center frequency and pass band. + +

Interface

+ +![Local source channel plugin GUI](../../../doc/img/LocalSource.png) + +

1: Interpolation factor

+ +The device baseband can be interpolated from the channel and its center can be selected with (5). The resulting sample rate of the I/Q stream pulled from the Local Output device sink is the baseband sample rate divided by this value. The value is displayed in (2). + +

2: I/Q stream sample rate

+ +This is the sample rate in kS/s of the I/Q stream pulled from the Local Output device sink instance. + +

3: Half-band filters chain sequence

+ +This string represents the sequence of half-band filters used in the interpolation. Each character represents a filter type: + + - **L**: lower half-band + - **H**: higher half-band + - **C**: centered + +

4: Center frequency shift

+ +This is the shift of the channel center frequency from the device center frequency. Its value is driven by the device sample rate, the interpolation (1) and the filter chain sequence (5). + +

5: Half-band filter chain sequence

+ +The slider moves the channel center frequency roughly from the lower to the higher frequency in the device baseband. The number on the right represents the filter sequence as the decimal value of a base 3 number. Each base 3 digit represents the filter type and its sequence from MSB to LSB in the filter chain: + + - **0**: lower half-band + - **1**: centered + - **2**: higher half-band + +

6: Local Output source index

+ +This selects the index of the Local Output device sink from which to pull the I/Q samples. The list can be refreshed with the next button (7) + +

7: Refresh local output devices list

+ +Use this button to refresh the list of Local Output device sinks indexes. diff --git a/plugins/samplesink/localoutput/localoutput.pro b/plugins/samplesink/localoutput/localoutput.pro new file mode 100644 index 000000000..655d2872a --- /dev/null +++ b/plugins/samplesink/localoutput/localoutput.pro @@ -0,0 +1,51 @@ +#-------------------------------------------------------- +# +# Pro file for Windows builds with Qt Creator +# +#-------------------------------------------------------- + +TEMPLATE = lib +CONFIG += plugin + +QT += core gui widgets multimedia network opengl + +TARGET = outputlocal + +INCLUDEPATH += $$PWD +INCLUDEPATH += ../../../exports +INCLUDEPATH += ../../../sdrbase +INCLUDEPATH += ../../../sdrgui +INCLUDEPATH += ../../../swagger/sdrangel/code/qt5/client +macx:INCLUDEPATH += /opt/local/include + +CONFIG(Release):build_subdir = release +CONFIG(Debug):build_subdir = debug + +CONFIG(MINGW32):INCLUDEPATH += "C:\softs\boost_1_66_0" +CONFIG(MSVC):INCLUDEPATH += "C:\softs\boost_1_66_0" +CONFIG(macx):INCLUDEPATH += "../../../boost_1_69_0" + +SOURCES += localoutputgui.cpp\ +localoutput.cpp\ +localoutputsettings.cpp\ +localoutputplugin.cpp + +HEADERS += localoutputgui.h\ +localoutput.h\ +localoutputsettings.h\ +localoutputplugin.h + +FORMS += localoutputgui.ui + +LIBS += -L../../../sdrbase/$${build_subdir} -lsdrbase +LIBS += -L../../../sdrgui/$${build_subdir} -lsdrgui +LIBS += -L../../../swagger/$${build_subdir} -lswagger + +macx { + QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/ +} + +RESOURCES = ../../../sdrgui/resources/res.qrc + +CONFIG(MINGW32):DEFINES += USE_INTERNAL_TIMER=1 + diff --git a/plugins/samplesink/localoutput/localoutputgui.ui b/plugins/samplesink/localoutput/localoutputgui.ui index 9baffb313..e610cdb76 100644 --- a/plugins/samplesink/localoutput/localoutputgui.ui +++ b/plugins/samplesink/localoutput/localoutputgui.ui @@ -65,20 +65,6 @@ - - - - Toggle record I/Q samples from device - - - - - - - :/record_off.png:/record_off.png - - - diff --git a/plugins/samplesink/localoutput/readme.md b/plugins/samplesink/localoutput/readme.md new file mode 100644 index 000000000..a25993a3d --- /dev/null +++ b/plugins/samplesink/localoutput/readme.md @@ -0,0 +1,24 @@ +

Local output plugin

+ +

Introduction

+ +This output sample sink plugin sends its samples to a Local Source channel in another device set. + +

Interface

+ +![SDR Local output plugin GUI](../../../doc/img/LocalOutput_plugin.png) + +

1: Start/Stop

+ +Device start / stop button. + + - Blue triangle icon: device is ready and can be started + - Green square icon: device is running and can be stopped + +

2: Frequency

+ +This is the center frequency in Hz sent from the Local Source channel instance and corresponds to the center frequency of transmission. The sub kHz value (000 to 999 Hz) is represented in smaller digits on the right. + +

3: Stream sample rate

+ +Stream I/Q sample rate in kS/s diff --git a/sdrangel.windows.pro b/sdrangel.windows.pro index c1d1d6b0e..90fd79942 100644 --- a/sdrangel.windows.pro +++ b/sdrangel.windows.pro @@ -48,6 +48,7 @@ SUBDIRS += plugins/samplesink/bladerf2output SUBDIRS += plugins/samplesink/hackrfoutput SUBDIRS += plugins/samplesink/limesdroutput SUBDIRS += plugins/samplesink/plutosdroutput +SUBDIRS += plugins/samplesink/localoutput CONFIG(MSVC):SUBDIRS += plugins/samplesink/remoteoutput CONFIG(MSVC):SUBDIRS += plugins/samplesink/soapysdroutput SUBDIRS += plugins/channelrx/chanalyzer @@ -68,6 +69,7 @@ SUBDIRS += plugins/channeltx/modnfm SUBDIRS += plugins/channeltx/modssb SUBDIRS += plugins/channeltx/modwfm SUBDIRS += plugins/channeltx/udpsource +SUBDIRS += plugins/channeltx/localsource # Main app must be last SUBDIRS += app