Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package octave-forge-communications for 
openSUSE:Factory checked in at 2023-10-31 20:25:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/octave-forge-communications (Old)
 and      /work/SRC/openSUSE:Factory/.octave-forge-communications.new.17445 
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "octave-forge-communications"

Tue Oct 31 20:25:44 2023 rev:7 rq:1121352 version:1.2.6

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/octave-forge-communications/octave-forge-communications.changes
  2022-02-18 23:03:59.933407894 +0100
+++ 
/work/SRC/openSUSE:Factory/.octave-forge-communications.new.17445/octave-forge-communications.changes
       2023-10-31 20:25:57.910524965 +0100
@@ -1,0 +2,15 @@
+Mon Oct 30 16:00:13 UTC 2023 - Atri Bhattacharya <badshah...@gmail.com>
+
+- Update URL to point to 'https://gnu-octave.github.io/packages/'
+
+-------------------------------------------------------------------
+Mon Oct 16 00:27:37 UTC 2023 - Atri Bhattacharya <badshah...@gmail.com>
+
+- Update to version 1.2.6:
+  * Replaced operators deprecated as of Octave 7.
+- Changes from version 1.2.5:
+  * New functions: ssbmod  ssbdemod.
+  * The following functions have improved Matlab compatibility and
+    tests: pskmod qammod.
+
+-------------------------------------------------------------------

Old:
----
  communications-1.2.4.tar.gz

New:
----
  communications-1.2.6.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ octave-forge-communications.spec ++++++
--- /var/tmp/diff_new_pack.6bEa1x/_old  2023-10-31 20:25:58.534547885 +0100
+++ /var/tmp/diff_new_pack.6bEa1x/_new  2023-10-31 20:25:58.538548032 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package octave-forge-communications
 #
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,12 +18,12 @@
 
 %define octpkg  communications
 Name:           octave-forge-%{octpkg}
-Version:        1.2.4
+Version:        1.2.6
 Release:        0
 Summary:        Digital Communications for Octave
 License:        GPL-3.0-or-later
 Group:          Productivity/Scientific/Math
-URL:            https://octave.sourceforge.io/%{octpkg}/index.html
+URL:            https://gnu-octave.github.io/packages/%{octpkg}/
 Source0:        
https://downloads.sourceforge.net/octave/%{octpkg}-%{version}.tar.gz
 BuildRequires:  gcc-c++
 BuildRequires:  hdf5-devel

++++++ communications-1.2.4.tar.gz -> communications-1.2.6.tar.gz ++++++
++++ 6213 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/DESCRIPTION new/communications-1.2.6/DESCRIPTION
--- old/communications-1.2.4/DESCRIPTION        2022-01-19 19:10:18.000000000 
+0100
+++ new/communications-1.2.6/DESCRIPTION        2023-05-10 16:43:07.000000000 
+0200
@@ -1,6 +1,6 @@
 Name: communications
-Version: 1.2.4
-Date: 2022-01-19
+Version: 1.2.6
+Date: 2023-05-08
 Author: various authors
 Maintainer: Nir Krakauer <m...@nirkrakauer.net>
 Title: Communications
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/INDEX new/communications-1.2.6/INDEX
--- old/communications-1.2.4/INDEX      2022-01-19 19:10:18.000000000 +0100
+++ new/communications-1.2.6/INDEX      2023-05-10 16:43:07.000000000 +0200
@@ -87,6 +87,8 @@
  qaskenco
  qammod
  qamdemod
+ ssbmod
+ ssbdemod
 Channel Filters 
  rcosfir
 Galois Fields of Even Characteristic
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/NEWS new/communications-1.2.6/NEWS
--- old/communications-1.2.4/NEWS       2022-01-19 19:10:18.000000000 +0100
+++ new/communications-1.2.6/NEWS       2023-05-10 16:43:07.000000000 +0200
@@ -2,6 +2,22 @@
 Summary of important user-visible changes for communications (next release):
 ------------------------------------------------------------------
 
+Summary of important user-visible changes for communications 1.2.6:
+------------------------------------------------------------------
+
+** Replaced operators deprecated as of Octave 7.
+
+Summary of important user-visible changes for communications 1.2.5:
+------------------------------------------------------------------
+
+ ** The following functions are new:
+ 
+      ssbmod  ssbdemod
+
+ ** The following functions have improved Matlab compatibility and tests:
+      pskmod
+      qammod
+
 Summary of important user-visible changes for communications 1.2.4:
 ------------------------------------------------------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/doc/comms.info new/communications-1.2.6/doc/comms.info
--- old/communications-1.2.4/doc/comms.info     2022-01-19 19:11:49.668558750 
+0100
+++ new/communications-1.2.6/doc/comms.info     2023-05-10 16:45:53.919558876 
+0200
@@ -1,4 +1,4 @@
-This is comms.info, produced by makeinfo version 6.7 from comms.texi.
+This is comms.info, produced by makeinfo version 6.8 from comms.texi.
 
 
 File: comms.info,  Node: Top,  Next: Introduction,  Up: (dir)
@@ -2135,8 +2135,8 @@
                keying modulated signal Y.
 * qamdemod::   Create the QAM demodulation of x with a size of alphabet m
                See also: qammod, pskmod, pskdemod
-* qammod::     Create the QAM modulation of x with a size of alphabet m
-               See also: qamdemod, pskmod, pskdemod
+* qammod::     Create the QAM modulation of X with a size of alphabet M
+               using a given SYMORDER
 * qaskdeco::   Demaps an analog signal using a square QASK constellation.
 * qaskenco::   Map a digital signal using a square QASK constellation.
 * qfunc::      Compute the Q function See also: erfc, erf
@@ -2193,6 +2193,19 @@
                the 'range [1,N]' with 'N = length (dict)'.
 * sqrt::       Compute the square root of X, element by element, in a
                Galois Field See also: exp
+* ssbdemod::   Creates the SSB demodulation of the signal S with carrier
+               frequency FC, sampling frequency FS initial phase PHI and a
+               standard 5th order low pass butterworth filter [b a] =
+               butter (5, fc .* 2 ./ fs) where b and a are numerator and
+               denominator respectively
+* ssbmod::     Creates the SSB modulation of the amplitude signal X with
+               carrier frequency FC , sampling frequency FS initial phase
+               : PHI and specified band : BAND initial phase : PHI and
+               specified band : BAND are optional arguments and initial
+               phase : PHI will be considered 0 if not given specified
+               band : BAND by default is lower sideband, but upper
+               sideband can be specified by giving 'upper' as the fourth
+               argument
 * sum::        Sum of elements along dimension DIM of Galois array.
 * sumsq::      Sum of squares of elements along dimension DIM of Galois
                array If DIM is omitted, it defaults to 1 (column-wise sum
@@ -2467,7 +2480,7 @@
           msg = randint (10, k);
           code = bchenco (msg, n, k);
           noisy = mod (randerr (10,n) + code, 2);
-          [dec, err] = bchdeco (msg, k, t);
+          [dec, err] = bchdeco (noisy, k, t);
 
      Valid codes can be found using 'bchpoly'.  In general the codeword
      length N should be of the form '2^M-1', where m is an integer.
@@ -4530,6 +4543,9 @@
           y = pskmod (d, 4, 0, "gray");
           z = awgn (y, 30);
           plot (z, "rx")
+
+     The output Y will be the same shape as the input X
+
      See also: pskdemod
 
 
@@ -4549,8 +4565,28 @@
 -------------
 
  -- Function File: qammod (X, M)
-     Create the QAM modulation of x with a size of alphabet m See also:
-     qamdemod, pskmod, pskdemod
+ -- Function File: qammod (X, M, SYMORDER)
+     Create the QAM modulation of X with a size of alphabet M using a
+     given SYMORDER
+
+     X vector in the range 0 to M-1
+
+     M modulation order
+
+     SYMORDER 'bin', 'gray', user define array
+
+          M = 4;
+          sym = 0:M-1;
+          qammod(sym, M)
+
+          ans =
+
+           -1 + 1i
+           -1 - 1i
+            1 + 1i
+            1 - 1i
+
+     See also: qamdemod, pskmod, pskdemod
 
 
 File: comms.info,  Node: qaskdeco,  Next: qaskenco,  Prev: qammod,  Up: 
Function Reference
@@ -5318,7 +5354,7 @@
      See also: shannonfanodeco, shannonfanodict
 
 
-File: comms.info,  Node: sqrt,  Next: sum,  Prev: shannonfanoenco,  Up: 
Function Reference
+File: comms.info,  Node: sqrt,  Next: ssbdemod,  Prev: shannonfanoenco,  Up: 
Function Reference
 
 9.1.118 sqrt
 ------------
@@ -5328,9 +5364,84 @@
      See also: exp
 
 
-File: comms.info,  Node: sum,  Next: sumsq,  Prev: sqrt,  Up: Function 
Reference
+File: comms.info,  Node: ssbdemod,  Next: ssbmod,  Prev: sqrt,  Up: Function 
Reference
+
+9.1.119 ssbdemod
+----------------
+
+ -- Function File: M = ssbdemod (S, FC, FS)
+ -- Function File: M = ssbdemod (S, FC, FS, PHI)
+
+     Creates the SSB demodulation of the signal S with carrier frequency
+     FC, sampling frequency FS initial phase PHI and a standard 5th
+     order low pass butterworth filter [b a] = butter (5, fc .* 2 ./ fs)
+     where b and a are numerator and denominator respectively
+
+     The initial phase PHI is optional and will be considered 0 if not
+     given
+
+     references and equation for ssdebmod:
+     https://electronicscoach.com/single-sideband-modulation.html
+     
https://www.ee-diary.com/2023/02/ssb-sc-am-signal-generation-in-matlab.html
+
+     Inputs:
+        * S: amplitude message signal
+
+        * FC: carrier frequency
+
+        * FS: sampling frequency
+
+        * PHI: initial phase
+
+     Output:
+          M: The SSB demodulation of S
+     Demo
+          demo ssbmod
+     See also: ssbmod,ammod,amdemod, fmmod, fmdemod
+
+
+File: comms.info,  Node: ssbmod,  Next: sum,  Prev: ssbdemod,  Up: Function 
Reference
+
+9.1.120 ssbmod
+--------------
+
+ -- Function File: Y = ssbmod (X, FC, FS)
+ -- Function File: Y = ssbmod (X, FC, FS, PHI)
+ -- Function File: Y = ssbmod (X, FC, FS, PHI, BAND)
+
+     Creates the SSB modulation of the amplitude signal X with carrier
+     frequency FC , sampling frequency FS initial phase : PHI and
+     specified band : BAND initial phase : PHI and specified band : BAND
+     are optional arguments and initial phase : PHI will be considered 0
+     if not given specified band : BAND by default is lower sideband,
+     but upper sideband can be specified by giving 'upper' as the fourth
+     argument
+
+     references and equation for ssbmod:
+     https://electronicscoach.com/single-sideband-modulation.html
+     
https://www.ee-diary.com/2023/02/ssb-sc-am-signal-generation-in-matlab.html
+
+     Inputs:
+        * X: amplitude message signal
+
+        * FC: carrier frequency
+
+        * FS: sampling frequency
+
+        * PHI: initial phase (defaults to 0)
+
+        * BAND: specified band (if upper)
+
+     Output:
+          Y: The SSB modulation of X
+     Demo
+          demo ssbmod
+     See also: ssbdemod,ammod,amdemod, fmmod, fmdemod
+
+
+File: comms.info,  Node: sum,  Next: sumsq,  Prev: ssbmod,  Up: Function 
Reference
 
-9.1.119 sum
+9.1.121 sum
 -----------
 
  -- Loadable Function: sum (X, DIM)
@@ -5340,7 +5451,7 @@
 
 File: comms.info,  Node: sumsq,  Next: symerr,  Prev: sum,  Up: Function 
Reference
 
-9.1.120 sumsq
+9.1.122 sumsq
 -------------
 
  -- Loadable Function: sumsq (X, DIM)
@@ -5354,7 +5465,7 @@
 
 File: comms.info,  Node: symerr,  Next: syndtable,  Prev: sumsq,  Up: Function 
Reference
 
-9.1.121 symerr
+9.1.123 symerr
 --------------
 
  -- Function File: [NUM, RATE] = symerr (A, B)
@@ -5391,7 +5502,7 @@
 
 File: comms.info,  Node: syndtable,  Next: systematize,  Prev: symerr,  Up: 
Function Reference
 
-9.1.122 syndtable
+9.1.124 syndtable
 -----------------
 
  -- Loadable Function: T = syndtable (H)
@@ -5405,7 +5516,7 @@
 
 File: comms.info,  Node: systematize,  Next: vec2mat,  Prev: syndtable,  Up: 
Function Reference
 
-9.1.123 systematize
+9.1.125 systematize
 -------------------
 
  -- Function File: systematize (G)
@@ -5431,7 +5542,7 @@
 
 File: comms.info,  Node: vec2mat,  Next: wgn,  Prev: systematize,  Up: 
Function Reference
 
-9.1.124 vec2mat
+9.1.126 vec2mat
 ---------------
 
  -- Function File: M = vec2mat (V, C)
@@ -5446,7 +5557,7 @@
 
 File: comms.info,  Node: wgn,  Prev: vec2mat,  Up: Function Reference
 
-9.1.125 wgn
+9.1.127 wgn
 -----------
 
  -- Function File: Y = wgn (M, N, P)
@@ -5516,131 +5627,133 @@
 Node: Linear Algebra66614
 Node: Signal Processing68670
 Node: Function Reference71720
-Node: ademodce83482
-Node: amdemod85656
-Node: ammod86167
-Node: amodce86651
-Node: apkconst88580
-Node: awgn90318
-Node: bchdeco91553
-Node: bchenco93790
-Node: bchpoly95417
-Node: berconfint98643
-Node: bi2de99506
-Node: bin2gray100324
-Node: biterr101208
-Node: bsc103205
-Node: comms103448
-Node: compand104991
-Node: conv106260
-Node: convenc106667
-Node: convmtx107749
-Node: cosets108485
-Node: cyclgen108814
-Node: cyclpoly110051
-Node: de2bi111222
-Node: decode112465
-Node: deconv117181
-Node: deintrlv117648
-Node: demodmap117902
-Node: det120400
-Node: dftmtx120599
-Node: diag121274
-Node: dpcmdeco122024
-Node: dpcmenco122541
-Node: dpcmopt123746
-Node: egolaydec125325
-Node: egolayenc126549
-Node: egolaygen127184
-Node: encode127592
-Node: exp131082
-Node: eyediagram131301
-Node: fft132920
-Node: fibodeco133246
-Node: fiboenco134256
-Node: fibosplitstream135519
-Node: filter136398
-Node: finddelay137575
-Node: fmdemod138148
-Node: fmmod138629
-Node: gen2par139219
-Node: genqamdemod139782
-Node: genqammod140162
-Node: gf140855
-Node: gftable140993
-Node: gfweight141378
-Node: golombdeco142330
-Node: golombenco143420
-Node: hammgen145396
-Node: helscanintrlv146313
-Node: huffmandeco146578
-Node: huffmandict147617
-Node: huffmanenco149330
-Node: ifft150067
-Node: intrlv150412
-Node: inv150660
-Node: inverse151032
-Node: isequal151214
-Node: isgalois151466
-Node: isprimitive151706
-Node: istrellis152037
-Node: lloyds152495
-Node: log154512
-Node: lu154731
-Node: lz77deco155741
-Node: lz77enco156206
-Node: matdeintrlv156632
-Node: matintrlv156936
-Node: minpol157238
-Node: modmap157622
-Node: oct2dec160371
-Node: pamdemod160685
-Node: pammod161541
-Node: poly2trellis162320
-Node: primpoly164433
-Node: prod165705
-Node: pskdemod165987
-Node: pskmod166862
-Node: qamdemod167660
-Node: qammod167925
-Node: qaskdeco168186
-Node: qaskenco169501
-Node: qfunc171294
-Node: qfuncinv171496
-Node: quantiz171714
-Node: randdeintrlv172652
-Node: randerr172948
-Node: randint174067
-Node: randintrlv175001
-Node: randsrc175281
-Node: rank176258
-Node: rcosfir176504
-Node: reedmullerdec177064
-Node: reedmullerenc178403
-Node: reedmullergen179148
-Node: reshape180142
-Node: ricedeco181161
-Node: riceenco182023
-Node: rledeco183457
-Node: rleenco183962
-Node: roots184512
-Node: rsdec184945
-Node: rsdecof187140
-Node: rsenc188096
-Node: rsencof190145
-Node: rsgenpoly191345
-Node: scatterplot193105
-Node: shannonfanodeco194684
-Node: shannonfanodict195876
-Node: shannonfanoenco196675
-Node: sqrt197466
-Node: sum197712
-Node: sumsq197976
-Node: symerr198380
-Node: syndtable200075
-Node: systematize200621
-Node: vec2mat201497
-Node: wgn201998
+Node: ademodce84175
+Node: amdemod86349
+Node: ammod86860
+Node: amodce87344
+Node: apkconst89273
+Node: awgn91011
+Node: bchdeco92246
+Node: bchenco94485
+Node: bchpoly96112
+Node: berconfint99338
+Node: bi2de100201
+Node: bin2gray101019
+Node: biterr101903
+Node: bsc103900
+Node: comms104143
+Node: compand105686
+Node: conv106955
+Node: convenc107362
+Node: convmtx108444
+Node: cosets109180
+Node: cyclgen109509
+Node: cyclpoly110746
+Node: de2bi111917
+Node: decode113160
+Node: deconv117876
+Node: deintrlv118343
+Node: demodmap118597
+Node: det121095
+Node: dftmtx121294
+Node: diag121969
+Node: dpcmdeco122719
+Node: dpcmenco123236
+Node: dpcmopt124441
+Node: egolaydec126020
+Node: egolayenc127244
+Node: egolaygen127879
+Node: encode128287
+Node: exp131777
+Node: eyediagram131996
+Node: fft133615
+Node: fibodeco133941
+Node: fiboenco134951
+Node: fibosplitstream136214
+Node: filter137093
+Node: finddelay138270
+Node: fmdemod138843
+Node: fmmod139324
+Node: gen2par139914
+Node: genqamdemod140477
+Node: genqammod140857
+Node: gf141550
+Node: gftable141688
+Node: gfweight142073
+Node: golombdeco143025
+Node: golombenco144115
+Node: hammgen146091
+Node: helscanintrlv147008
+Node: huffmandeco147273
+Node: huffmandict148312
+Node: huffmanenco150025
+Node: ifft150762
+Node: intrlv151107
+Node: inv151355
+Node: inverse151727
+Node: isequal151909
+Node: isgalois152161
+Node: isprimitive152401
+Node: istrellis152732
+Node: lloyds153190
+Node: log155207
+Node: lu155426
+Node: lz77deco156436
+Node: lz77enco156901
+Node: matdeintrlv157327
+Node: matintrlv157631
+Node: minpol157933
+Node: modmap158317
+Node: oct2dec161066
+Node: pamdemod161380
+Node: pammod162236
+Node: poly2trellis163015
+Node: primpoly165128
+Node: prod166400
+Node: pskdemod166682
+Node: pskmod167557
+Node: qamdemod168413
+Node: qammod168678
+Node: qaskdeco169281
+Node: qaskenco170596
+Node: qfunc172389
+Node: qfuncinv172591
+Node: quantiz172809
+Node: randdeintrlv173747
+Node: randerr174043
+Node: randint175162
+Node: randintrlv176096
+Node: randsrc176376
+Node: rank177353
+Node: rcosfir177599
+Node: reedmullerdec178159
+Node: reedmullerenc179498
+Node: reedmullergen180243
+Node: reshape181237
+Node: ricedeco182256
+Node: riceenco183118
+Node: rledeco184552
+Node: rleenco185057
+Node: roots185607
+Node: rsdec186040
+Node: rsdecof188235
+Node: rsenc189191
+Node: rsencof191240
+Node: rsgenpoly192440
+Node: scatterplot194200
+Node: shannonfanodeco195779
+Node: shannonfanodict196971
+Node: shannonfanoenco197770
+Node: sqrt198561
+Node: ssbdemod198812
+Node: ssbmod199868
+Node: sum201106
+Node: sumsq201372
+Node: symerr201776
+Node: syndtable203471
+Node: systematize204017
+Node: vec2mat204893
+Node: wgn205394
 
 End Tag Table
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/doc/comms.texi new/communications-1.2.6/doc/comms.texi
--- old/communications-1.2.4/doc/comms.texi     2022-01-19 19:11:48.724567188 
+0100
+++ new/communications-1.2.6/doc/comms.texi     2023-05-10 16:45:53.427561163 
+0200
@@ -2484,9 +2484,13 @@
 @item qaskenco
 Map a digital signal using a square QASK constellation.
 @item qammod
-Create the QAM modulation of x with a size of alphabet m See also: qamdemod, 
pskmod, pskdemod
+Create the QAM modulation of X with a size of alphabet M using a given SYMORDER
 @item qamdemod
 Create the QAM demodulation of x with a size of alphabet m See also: qammod, 
pskmod, pskdemod
+@item ssbmod
+Creates the SSB modulation of the amplitude signal X with carrier frequency FC 
, sampling frequency FS initial phase : PHI and specified band : BAND initial 
phase : PHI and specified band : BAND are optional arguments and initial phase 
: PHI will be considered 0 if not given specified band : BAND by default is 
lower sideband, but upper sideband can be specified by giving 'upper' as the 
fourth argument
+@item ssbdemod
+Creates the SSB demodulation of the signal S with carrier frequency FC, 
sampling frequency FS initial phase PHI and a standard 5th order low pass 
butterworth filter [b a] = butter (5, fc .* 2 ./ fs) where b and a are 
numerator and denominator respectively
 @end table
 @subsection Channel Filters 
 @table @asis
@@ -2773,8 +2777,8 @@
                keying modulated signal Y.
 * qamdemod::   Create the QAM demodulation of x with a size of alphabet m
                See also: qammod, pskmod, pskdemod
-* qammod::     Create the QAM modulation of x with a size of alphabet m
-               See also: qamdemod, pskmod, pskdemod
+* qammod::     Create the QAM modulation of X with a size of alphabet M
+               using a given SYMORDER
 * qaskdeco::   Demaps an analog signal using a square QASK constellation.
 * qaskenco::   Map a digital signal using a square QASK constellation.
 * qfunc::      Compute the Q function See also: erfc, erf
@@ -2831,6 +2835,19 @@
                the 'range [1,N]' with 'N = length (dict)'.
 * sqrt::       Compute the square root of X, element by element, in a
                Galois Field See also: exp
+* ssbdemod::   Creates the SSB demodulation of the signal S with carrier
+               frequency FC, sampling frequency FS initial phase PHI and a
+               standard 5th order low pass butterworth filter [b a] =
+               butter (5, fc .* 2 ./ fs) where b and a are numerator and
+               denominator respectively
+* ssbmod::     Creates the SSB modulation of the amplitude signal X with
+               carrier frequency FC , sampling frequency FS initial phase
+               : PHI and specified band : BAND initial phase : PHI and
+               specified band : BAND are optional arguments and initial
+               phase : PHI will be considered 0 if not given specified
+               band : BAND by default is lower sideband, but upper
+               sideband can be specified by giving 'upper' as the fourth
+               argument
 * sum::        Sum of elements along dimension DIM of Galois array.
 * sumsq::      Sum of squares of elements along dimension DIM of Galois
                array If DIM is omitted, it defaults to 1 (column-wise sum
@@ -3131,7 +3148,7 @@
 msg = randint (10, k);
 code = bchenco (msg, n, k);
 noisy = mod (randerr (10,n) + code, 2);
-[dec, err] = bchdeco (msg, k, t);
+[dec, err] = bchdeco (noisy, k, t);
 @end example
 
 Valid codes can be found using @code{bchpoly}. In general the codeword
@@ -5414,6 +5431,9 @@
 plot (z, "rx")
 @end group
 @end example
+
+The output @var{y} will be the same shape as the input @var{x}
+
 See also: pskdemod
 @end deftypefn
 
@@ -5432,8 +5452,30 @@
 @node qammod, qaskdeco, qamdemod, Function Reference
 @subsection qammod
 
-@deftypefn {Function File} {} qammod (@var{x}, @var{m})
-Create the QAM modulation of x with a size of alphabet m
+@deftypefn {Function File} {} qammod (@var{x}, @var{M})
+@deftypefnx {Function File} {} qammod (@var{x}, @var{M}, @var{symOrder})
+Create the QAM modulation of @var{x} with a size of alphabet @var{M} using a 
given @var{symOrder}
+
+@var{x} vector in the range 0 to M-1
+
+@var{M} modulation order
+
+@var{symOrder} 'bin', 'gray', user define array
+
+@example
+M = 4;
+sym = 0:M-1;
+qammod(sym, M)
+
+ans =
+
+ -1 + 1i
+ -1 - 1i
+  1 + 1i
+  1 - 1i
+@end example
+
+
 See also: qamdemod, pskmod, pskdemod
 @end deftypefn
 
@@ -6299,7 +6341,7 @@
 
 
 
-@node sqrt, sum, shannonfanoenco, Function Reference
+@node sqrt, ssbdemod, shannonfanoenco, Function Reference
 @subsection sqrt
 
 @deftypefn {Loadable Function} {} sqrt (@var{x})
@@ -6309,7 +6351,110 @@
 
 
 
-@node sum, sumsq, sqrt, Function Reference
+@node ssbdemod, ssbmod, sqrt, Function Reference
+@subsection ssbdemod
+
+@deftypefn {Function File} {@var{m} =} ssbdemod (@var{s}, @var{fc}, @var{fs})
+@deftypefnx {Function File} {@var{m} =} ssbdemod (@var{s}, @var{fc}, @var{fs}, 
@var{phi})
+
+
+Creates the SSB demodulation of the signal @var{s}
+with carrier frequency @var{fc}, sampling frequency @var{fs}
+initial phase @var{phi} and a standard 5th order low pass butterworth filter
+[b a] = butter (5, fc .* 2 ./ fs) where b and a are numerator and
+denominator respectively
+
+The initial phase @var{phi} is optional
+and will be considered 0 if not given
+
+references and equation for ssdebmod:
+https://electronicscoach.com/single-sideband-modulation.html
+https://www.ee-diary.com/2023/02/ssb-sc-am-signal-generation-in-matlab.html
+
+Inputs:
+@itemize
+@item
+@var{s}: amplitude message signal
+
+@item
+@var{fc}: carrier frequency
+
+@item
+@var{fs}: sampling frequency
+
+
+@item
+@var{phi}: initial phase
+@end itemize
+
+Output:
+@itemize
+@var{m}: The SSB demodulation of @var{s}
+@end itemize
+Demo
+@example
+demo ssbmod
+@end example
+See also: ssbmod,ammod,amdemod, fmmod, fmdemod
+@end deftypefn
+
+
+
+@node ssbmod, sum, ssbdemod, Function Reference
+@subsection ssbmod
+
+@deftypefn {Function File} {@var{y} =} ssbmod (@var{x}, @var{fc}, @var{fs})
+@deftypefnx {Function File} {@var{y} =} ssbmod (@var{x}, @var{fc}, @var{fs}, 
@var{phi})
+@deftypefnx {Function File} {@var{y} =} ssbmod (@var{x}, @var{fc}, @var{fs}, 
@var{phi}, @var{band})
+
+Creates the SSB modulation of the amplitude signal @var{x}
+with carrier frequency @var{fc} , sampling frequency @var{fs}
+initial phase : @var{phi} and specified band : @var{band}
+initial phase : @var{phi} and specified band : @var{band} are optional
+arguments and initial phase : @var{phi} will be considered 0 if not given
+specified band : @var{band} by default is lower sideband, but upper sideband
+can be specified by giving 'upper' as the fourth argument
+
+
+references and equation for ssbmod:
+https://electronicscoach.com/single-sideband-modulation.html
+https://www.ee-diary.com/2023/02/ssb-sc-am-signal-generation-in-matlab.html
+
+
+Inputs:
+@itemize
+@item
+@var{x}: amplitude message signal
+
+@item
+@var{fc}: carrier frequency
+
+@item
+@var{fs}: sampling frequency
+
+
+@item
+@var{phi}: initial phase (defaults to 0)
+
+
+@item
+@var{band}: specified band (if upper)
+@end itemize
+
+Output:
+@itemize
+@var{y}: The SSB modulation of @var{x}
+@end itemize
+Demo
+@example
+demo ssbmod
+@end example
+See also: ssbdemod,ammod,amdemod, fmmod, fmdemod
+@end deftypefn
+
+
+
+@node sum, sumsq, ssbmod, Function Reference
 @subsection sum
 
 @deftypefn {Loadable Function} {} sum (@var{x}, @var{dim})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/doc/commsimages.m 
new/communications-1.2.6/doc/commsimages.m
--- old/communications-1.2.4/doc/commsimages.m  2022-01-19 19:10:18.000000000 
+0100
+++ new/communications-1.2.6/doc/commsimages.m  2023-05-10 16:43:07.000000000 
+0200
@@ -15,6 +15,26 @@
 ## this program; if not, see <http://www.gnu.org/licenses/>.
 ## <http://www.gnu.org/licenses/>.
 
+## -*- texinfo -*-
+## @deftypefn  {Function File} {} commsimages (@var{nm}, @var{typ})
+##
+## Internal function for making demo plots.
+##
+## Inputs:
+## @itemize
+##
+## @item
+## @var{nm}: plot to generate;
+## "awgn", "eyediagram", or "scatterplot"
+##
+## @item
+## @var{typ}: output format;
+## "png", "eps", or another available output device
+##
+## @end itemize
+##
+## @end deftypefn
+
 function commsimages (nm, typ)
   graphics_toolkit ("gnuplot");
   set_print_size ();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/inst/amdemod.m new/communications-1.2.6/inst/amdemod.m
--- old/communications-1.2.4/inst/amdemod.m     2022-01-19 19:10:18.000000000 
+0100
+++ new/communications-1.2.6/inst/amdemod.m     2023-05-10 16:43:07.000000000 
+0200
@@ -55,7 +55,7 @@
   endif
 
   l = length (s);
-  t = 0: 1 ./ fs: (l .- 1) ./ fs;
+  t = 0: 1 ./ fs: (l - 1) ./ fs;
   
   e = s .* cos (2 .* pi .* fc .* t);
   [b a] = butter (5, fc .* 2 ./ fs);
@@ -92,4 +92,4 @@
 %! figure('Name','AM Modulation');
 %! subplot(3,1,1); plot(t,x); title('Modulating signal');
 %! subplot(3,1,2); plot(t,y); title('Modulated signal');
-%! subplot(3,1,3); plot(t,z); title('Demodulated signal');
\ No newline at end of file
+%! subplot(3,1,3); plot(t,z); title('Demodulated signal');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/inst/ammod.m new/communications-1.2.6/inst/ammod.m
--- old/communications-1.2.4/inst/ammod.m       2022-01-19 19:10:18.000000000 
+0100
+++ new/communications-1.2.6/inst/ammod.m       2023-05-10 16:43:07.000000000 
+0200
@@ -53,7 +53,7 @@
   endif
 
   l = length (x);
-  t = 0: 1 ./ fs: (l .- 1) ./ fs;
+  t = 0: 1 ./ fs: (l - 1) ./ fs;
   y = x .* cos (2 .* pi .* fc .* t);
 
 endfunction
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/inst/de2bi.m new/communications-1.2.6/inst/de2bi.m
--- old/communications-1.2.4/inst/de2bi.m       2022-01-19 19:10:18.000000000 
+0100
+++ new/communications-1.2.6/inst/de2bi.m       2023-05-10 16:43:07.000000000 
+0200
@@ -132,7 +132,7 @@
 %! x = randi ([0 2^16-1], 100, 1);
 %!assert (de2bi (0), 0)
 %!assert (de2bi (1), 1)
-%!assert (de2bi (uint8(31), ones (1,5)))
+%!assert (de2bi (uint8(31)), uint8 (ones (1,5)))
 %!assert (class(de2bi(uint8(31))), 'uint8')
 %!assert (de2bi (255), ones (1, 8))
 %!assert (de2bi (255, [], 256), 255)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/inst/dpcmenco.m 
new/communications-1.2.6/inst/dpcmenco.m
--- old/communications-1.2.4/inst/dpcmenco.m    2022-01-19 19:10:18.000000000 
+0100
+++ new/communications-1.2.6/inst/dpcmenco.m    2023-05-10 16:43:07.000000000 
+0200
@@ -64,7 +64,7 @@
 endfunction
 
 %!function y = my_sawtooth (t, width)
-%!  ## sawtooth function, so not to require the signal package for the demo 
and test
+%!  ## sawtooth function, so not to require the signal package for the test
 %!    if (nargin == 1)
 %!      width = 1;
 %!  endif
@@ -85,7 +85,7 @@
 %! codebook = [-1+delta/2 : delta : 1-delta/2];
 %! partition = (codebook(1:end-1) + codebook(2:end))/2;
 %! t = linspace (0, 2*pi, 128);
-%! x = my_sawtooth (2*t, 0.25);
+%! x = sawtooth (2*t, 0.25);
 %! [idx, xq, distor] = dpcmenco (x, codebook, partition, predictor);
 %! xr = dpcmdeco (idx, codebook, predictor);
 %! plot (t, x, 'k--','linewidth',1, t, xr, 'b-','linewidth',1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/inst/fmmod.m new/communications-1.2.6/inst/fmmod.m
--- old/communications-1.2.4/inst/fmmod.m       2022-01-19 19:10:18.000000000 
+0100
+++ new/communications-1.2.6/inst/fmmod.m       2023-05-10 16:43:07.000000000 
+0200
@@ -53,10 +53,10 @@
   endif
 
   l = length (m);
-  t = 0: 1 ./ fs: (l .- 1) ./ fs;
+  t = 0: 1 ./ fs: (l - 1) ./ fs;
   int_m = cumsum (m) ./ fs;
 
-  s = cos (2 .* pi .* fc .* t .+ 2 .* pi .* freqdev .* int_m);
+  s = cos (2 .* pi .* fc .* t + 2 .* pi .* freqdev .* int_m);
 
 endfunction
 
@@ -77,7 +77,7 @@
 %! time = (0: 1 ./ fs:0.2)';
 %!
 %! ## Create two sinusoidal signals with frequencies 30 Hz and 60 Hz
-%! x = sin (2 .* pi .* 30 .* time) .+ 2 .* sin (2 .* pi .* 60 .* time);  
+%! x = sin (2 .* pi .* 30 .* time) + 2 .* sin (2 .* pi .* 60 .* time);  
 %!
 %! ## Frequency Deviation
 %! fDev = 50;
@@ -89,4 +89,4 @@
 %! plot (time, x, 'r', time, y, 'b--')
 %! xlabel ('Time (s)')
 %! ylabel ('Amplitude')
-%! legend ('Original Signal','Modulated Signal')
\ No newline at end of file
+%! legend ('Original Signal','Modulated Signal')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/inst/golombdeco.m 
new/communications-1.2.6/inst/golombdeco.m
--- old/communications-1.2.4/inst/golombdeco.m  2022-01-19 19:10:18.000000000 
+0100
+++ new/communications-1.2.6/inst/golombdeco.m  2023-05-10 16:43:07.000000000 
+0200
@@ -61,7 +61,7 @@
 
   L = length (code);
   C = ceil (log2 (m));
-  partition_limit = 2**C - m;
+  partition_limit = 2^C - m;
 
 
   power_seq = [2.^(ceil (log2 (m)) - 1:-1:0)];
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/inst/golombenco.m 
new/communications-1.2.6/inst/golombenco.m
--- old/communications-1.2.4/inst/golombenco.m  2022-01-19 19:10:18.000000000 
+0100
+++ new/communications-1.2.6/inst/golombenco.m  2023-05-10 16:43:07.000000000 
+0200
@@ -69,7 +69,7 @@
 
 
   C = ceil (log2 (m));
-  partition_limit = 2**C-m;
+  partition_limit = 2^C-m;
   Ltot = 0;
   for j = 1:L
     if ( rem(j) <  partition_limit )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/inst/huffmandeco.m 
new/communications-1.2.6/inst/huffmandeco.m
--- old/communications-1.2.4/inst/huffmandeco.m 2022-01-19 19:10:18.000000000 
+0100
+++ new/communications-1.2.6/inst/huffmandeco.m 2023-05-10 16:43:07.000000000 
+0200
@@ -1,3 +1,4 @@
+## Copyright (C) 2021 The Octave Project Developers
 ## Copyright (C) 2006 Muthiah Annamalai <muthiah.annama...@uta.edu>
 ## Copyright (C) 2011 Ferran Mesas Garcia <ferran.mesa...@gmail.com>
 ##
@@ -97,11 +98,19 @@
 
 endfunction
 
-%!assert (huffmandeco (huffmanenco (1:4, huffmandict (1:4, [0.5 0.25 0.15 
0.10])), huffmandict (1:4, [0.5 0.25 0.15 0.10])), [1:4], 0)
-%!assert (huffmandeco (huffmanenco ([1:100 100:-1:1], huffmandict (1:100, ones 
(1, 100)/100)), huffmandict (1:100, ones (1, 100)/100)), [1:100 100:-1:1], 0)
-%!assert (huffmandeco ([huffmanenco(1:4, huffmandict (1:4, [0.5 0.25 0.15 
0.10])) 0], huffmandict (1:4, [0.5 0.25 0.15 0.10])), [1:4 -1], 0)
-%!fail ("huffmandeco ([huffmanenco(1:4, huffmandict (1:4, [0.5 0.25 0.15 
0.10])) 0], huffmandict (1:4, [0.5 0.25 0.15 0.10]))", "warning")
-%!fail ("huffmandeco ('this is not a code', huffmandict (1:4, [0.5 0.25 0.15 
0.10]))")
+%!test
+%! dict = huffmandict (1:4, [0.5 0.25 0.15 0.10]);
+%! hcode = huffmanenco (1:4, dict);
+%! assert (huffmandeco (hcode, dict), [1:4], 0)
+%! fail ("huffmandeco ([hcode 0], dict)", "warning")
+%! fail ("huffmandeco ('this is not a code', dict)")
+
+
+%!test
+%! dict2 = huffmandict (1:100, ones (1, 100)/100);
+%! hcode2 = huffmanenco ([1:100 100:-1:1], dict2);
+%! assert (huffmandeco (hcode2, dict2), [1:100 100:-1:1], 0)
+
 %!fail ("huffmandeco ([1 0 1 0], 'this is not a dictionary')")
 
 %% Test input validation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/inst/pskmod.m new/communications-1.2.6/inst/pskmod.m
--- old/communications-1.2.4/inst/pskmod.m      2022-01-19 19:10:18.000000000 
+0100
+++ new/communications-1.2.6/inst/pskmod.m      2023-05-10 16:43:07.000000000 
+0200
@@ -33,6 +33,9 @@
 ## plot (z, "rx")
 ## @end group
 ## @end example
+##
+## The output @var{y} will be the same shape as the input @var{x}.
+##
 ## @seealso{pskdemod}
 ## @end deftypefn
 
@@ -56,7 +59,7 @@
     type = "Bin";
   endif
 
-  constellation = exp (1j*2*pi*m/M+1j*phi);
+  constellation = exp (1j*2*pi*m/M + 1j*phi);
 
   if (strcmp (type, "Bin") || strcmp (type, "bin"))
     y = constellation(x+1);
@@ -67,12 +70,25 @@
     print_usage ();
   endif
 
+  if (iscolumn (x))
+    ## Correct for vector input defaulting to row vector output
+    y = y(:);
+  end
+
 endfunction
 
 %!assert (round (pskmod ([0:3], 4, 0, "Bin")), [1 j -1 -j])
 %!assert (round (pskmod ([0:3], 4, 0, "Gray")), [1 j -j -1])
 
-%% Test input validation
+##verify output size matches inputs size
+%!assert <*51560> (size (pskmod ([0:3], 4, pi/4)), [1, 4])
+%!assert <*51560> (size (pskmod ([0:3]', 4, pi/4)), [4, 1])
+%!assert <*51560> (size (pskmod ([0:3; 0:3], 4, pi/4)), [2, 4])
+%!assert <*51560> (size (pskmod (cat(3,[0:3],[0:3]), 4, pi/4)), [1, 4, 2])
+%!assert <*51560> (size (pskmod (cat(3,[0:3]',[0:3]'), 4, pi/4)), [4, 1, 2])
+%!assert <*51560> (size (pskmod (cat(3,[0:3;0:3],[0:3;0:3]), 4, pi/4)), [2, 4, 
2])
+
+## Test input validation
 %!error pskmod ()
 %!error pskmod (1)
 %!error pskmod (1, 2, 3, 4, 5)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/inst/qammod.m new/communications-1.2.6/inst/qammod.m
--- old/communications-1.2.4/inst/qammod.m      2022-01-19 19:10:18.000000000 
+0100
+++ new/communications-1.2.6/inst/qammod.m      2023-05-10 16:43:07.000000000 
+0200
@@ -1,51 +1,108 @@
-## Copyright (C) 2007 Sylvain Pelissier <sylvain.peliss...@gmail.com>
-##
-## This program is free software; you can redistribute it and/or modify it 
under
-## the terms of the GNU General Public License as published by the Free 
Software
-## Foundation; either version 3 of the License, or (at your option) any later
-## version.
-##
-## This program is distributed in the hope that it will be useful, but WITHOUT
-## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 
more
-## details.
-##
-## You should have received a copy of the GNU General Public License along with
-## this program; if not, see <http://www.gnu.org/licenses/>.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {} qammod (@var{x}, @var{m})
-## Create the QAM modulation of x with a size of alphabet m.
-## @seealso{qamdemod, pskmod, pskdemod}
-## @end deftypefn
-
-function y = qammod (x, m)
-
-  if (nargin != 2)
-    print_usage ();
-  endif
-
-  if (any (x >= m))
-    error ("qammod: all elements of X must be in the range [0,M-1]");
-  endif
-
-  if (!all (x == fix (x)))
-    error ("qammod: all elements of X must be integers");
-  endif
-
-  c = sqrt (m);
-  if (! (c == fix (c) && log2 (c) == fix (log2 (c))))
-    error ("qammod: M must be a square of a power of 2");
-  endif
-
-  b = -2 .* mod (x, (c)) + c - 1;
-  a = 2 .* floor (x ./ (c)) - c + 1;
-  y = a + i.*b;
-
-endfunction
-
-%% Test input validation
-%!error qammod ()
-%!error qammod (1)
-%!error qammod (1, 2)
-%!error qammod (1, 2, 3)
+## Copyright (C) 2022 The Octave Project Developers
+## Copyright (C) 2016 Òscar Monerris Belda <>
+## Copyright (C) 2007 Sylvain Pelissier <sylvain.peliss...@gmail.com>
+##
+## This program is free software; you can redistribute it and/or modify it 
under
+## the terms of the GNU General Public License as published by the Free 
Software
+## Foundation; either version 3 of the License, or (at your option) any later
+## version.
+##
+## This program is distributed in the hope that it will be useful, but WITHOUT
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 
more
+## details.
+##
+## You should have received a copy of the GNU General Public License along with
+## this program; if not, see <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {Function File} {} qammod (@var{x}, @var{M})
+## @deftypefnx {Function File} {} qammod (@var{x}, @var{M}, @var{symOrder})
+## Create the QAM modulation of @var{x} with a size of alphabet @var{M} using 
a given @var{symOrder}.
+##
+## @var{x} vector in the range 0 to M-1
+##
+## @var{M} modulation order
+##
+## @var{symOrder} 'bin', 'gray', user define array
+##
+## @example
+## M = 4;
+## sym = 0:M-1;
+## qammod(sym, M)
+##
+## ans =
+##
+##  -1 + 1i
+##  -1 - 1i
+##   1 + 1i
+##   1 - 1i
+## @end example
+##
+##
+## @seealso{qamdemod, pskmod, pskdemod}
+## @end deftypefn
+
+function y = qammod (x, M, symOrder)
+
+  if (nargin < 1 || nargin > 3)
+    print_usage ();
+  elseif (nargin == 2)
+    symOrder = 'gray';
+  endif
+
+  if (any (x >= M))
+    error ("qammod: all elements of X must be in the range [0,M-1]");
+  endif
+
+  if (~all (x == fix (x)))
+    error ("qammod: all elements of X must be integers");
+  endif
+  
+  symOrder = lower (symOrder);
+  if (~(isnumeric (symOrder) || strcmpi (symOrder,'gray') || strcmpi 
(symOrder,'bin')))
+    error('qammod: symOrder %s is not valid options are bin and gray', 
symOrder);
+  endif
+  
+  if (fix (sqrt(M)) ~= sqrt(M))
+    error ("qammod: M must be a square of a power of 2");
+  endif
+
+  rng = sqrt (M);
+  # Create the binary mapping table
+  val = 2 * (0: rng - 1) - rng + 1;
+  [Ii, Qi] = meshgrid (val);
+  lookupTable = reshape (Ii - j * Qi, M, 1);
+  
+  # Build the symOrder lookup table to convert 
+  # map from binary to gray or custom (if applicable)
+  if ischar (symOrder)
+    if strcmpi (symOrder, 'bin')
+      % Do nothing
+    elseif strcmpi (symOrder, 'gray')
+      % bitxor(x,bitshift(x,-1));
+      [x,~] = bin2gray (x, 'qam', M);
+    endif
+  elseif isvector (symOrder)
+    x = symOrder (x + 1);
+  endif
+  
+  # Map the input symbols to their IQ value
+  y = lookupTable (x + 1);
+
+endfunction
+
+%% Test input validation
+%!error qammod ()
+%!error qammod (1)
+%!error qammod (1, 16, 2)
+%!error <symOrder> qammod(4,5,'grey')
+
+%!test
+%! M = 4;sym = 0:M-1;
+%! assert (qammod(sym, M), [-1+1i; -1-1i; 1+1i; 1-1i]);
+
+#https://github.com/kirlf/modulationPy
+%!test
+%! M = 16;sym = 0:M-1;
+%! assert (qammod(sym, M, 'gray'), [-3+3i -3+1i -3-3i -3-1i -1+3i -1+1i -1-3i 
-1-1i 3+3i 3+1i 3-3i 3-1i 1+3i 1+1i 1-3i 1-1i].');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/inst/ricedeco.m 
new/communications-1.2.6/inst/ricedeco.m
--- old/communications-1.2.4/inst/ricedeco.m    2022-01-19 19:10:18.000000000 
+0100
+++ new/communications-1.2.6/inst/ricedeco.m    2023-05-10 16:43:07.000000000 
+0200
@@ -59,7 +59,7 @@
 
   L = length (code);
 
-  K_pow_2 = 2**K;
+  K_pow_2 = 2^K;
 
   if (K != 0)
     power_seq = [2.^((K-1):-1:0)];
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/inst/riceenco.m 
new/communications-1.2.6/inst/riceenco.m
--- old/communications-1.2.4/inst/riceenco.m    2022-01-19 19:10:18.000000000 
+0100
+++ new/communications-1.2.6/inst/riceenco.m    2023-05-10 16:43:07.000000000 
+0200
@@ -71,7 +71,7 @@
     quot = sig;
 
     for k = 1:7
-      k_pow_2 = 2**k;
+      k_pow_2 = 2^k;
       quot_k = floor (sig./k_pow_2);
       len = sum (quot_k)+L+k*L;
       if (len < len_past)
@@ -83,9 +83,9 @@
     endfor
     Ltot = len_past;
     K = k_opt;
-    K_pow_2 = 2**K;
+    K_pow_2 = 2^K;
   else
-    K_pow_2 = 2**K;
+    K_pow_2 = 2^K;
     quot = floor (sig./K_pow_2);
     rem = mod (sig, K_pow_2);
   endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/inst/ssbdemod.m 
new/communications-1.2.6/inst/ssbdemod.m
--- old/communications-1.2.4/inst/ssbdemod.m    1970-01-01 01:00:00.000000000 
+0100
+++ new/communications-1.2.6/inst/ssbdemod.m    2023-05-10 16:43:07.000000000 
+0200
@@ -0,0 +1,123 @@
+
+## Copyright (C) 2023 The Octave Project Developers
+## Copyright (C) 2023 Mohammed Azmat Khan < azmat.d...@gmail.com >
+##
+## This program is free software; you can redistribute it and/or modify it 
under
+## the terms of the GNU General Public License as published by the Free 
Software
+## Foundation; either version 3 of the License, or (at your option) any later
+## version.
+##
+## This program is distributed in the hope that it will be useful, but WITHOUT
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 
more
+## details.
+##
+## You should have received a copy of the GNU General Public License along with
+## this program; if not, see <http://www.gnu.org/licenses/>.
+
+
+## -*- texinfo -*-
+## @deftypefn {Function File} {@var{m} =} ssbdemod (@var{s}, @var{fc}, 
@var{fs})
+## @deftypefnx {Function File} {@var{m} =} ssbdemod (@var{s}, @var{fc}, 
@var{fs}, @var{phi})
+##
+##
+## Creates the SSB demodulation of the signal @var{s}
+## with carrier frequency @var{fc}, sampling frequency @var{fs}
+## initial phase @var{phi} and a standard 5th order low pass butterworth filter
+## [b a] = butter (5, fc .* 2 ./ fs) where b and a are numerator and
+## denominator respectively.
+##
+## The initial phase @var{phi} is optional
+## and will be considered 0 if not given.
+##
+## references and equation for ssdebmod:
+## https://electronicscoach.com/single-sideband-modulation.html
+## https://www.ee-diary.com/2023/02/ssb-sc-am-signal-generation-in-matlab.html
+##
+## Inputs:
+## @itemize
+## @item
+## @var{s}: amplitude message signal
+##
+## @item
+## @var{fc}: carrier frequency
+##
+## @item
+## @var{fs}: sampling frequency
+##
+##
+## @item
+## @var{phi}: initial phase
+## @end itemize
+##
+## Output:
+## @itemize
+## @var{m}: The SSB demodulation of @var{s}
+## @end itemize
+## Demo
+## @example
+## demo ssbmod
+## @end example
+## @seealso{ssbmod,ammod,amdemod, fmmod, fmdemod}
+## @end deftypefn
+function m = ssbdemod (s, fc, fs, varargin)
+
+  % check for arguments
+  if(nargin > 4)
+    print_usage ();
+  endif
+
+  % check if fs > 2*fc
+  if (fs < 2 .* fc)
+    error ("ssbdemod: fs is too small must be at least 2 * fc")
+  endif
+
+  % set phi = 0 if phase is empty
+
+  if(nargin>=4)
+    phi = varargin{1};
+    if(isempty(phi))
+      phi = 0;
+    endif
+  else
+    phi = 0;
+  endif
+
+  % Argument check ends
+
+  l = length (s);
+  t = reshape (0: 1 ./ fs: (l - 1) ./ fs, size(s));
+
+  % Demodulation equation
+  e = s .* cos (2 .* pi .* fc .* t + phi);
+
+  % filtering high frequencies
+  [b a] = butter (5, fc .* 2 ./ fs);
+
+  % filtered ssb demodulated equation
+  m = filtfilt (b, a, e) .* 2;
+
+endfunction
+
+## Test input validation
+%!error ssbdemod ()
+%!error ssbdemod (1)
+%!error ssbdemod (1, 2)
+%!error ssbdemod (1, 2, 3, 4)
+%!error ssbdemod (1, 2, 3, 4, 5)
+%
+%
+%!demo
+%! fc=400;
+%! fs=8000;
+%! t=0:(1/fs):0.1;
+%! y=sin(20*pi*t);
+%! y1=ssbmod(y,fc,fs);
+%! y2=ssbdemod(y1,fc,fs);
+%! figure(1)
+%! subplot(3,1,1)
+%! plot(t,y)
+%! subplot(3,1,2)
+%! plot(t,y1)
+%! subplot(3,1,3)
+%! plot(t,y2)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/inst/ssbmod.m new/communications-1.2.6/inst/ssbmod.m
--- old/communications-1.2.4/inst/ssbmod.m      1970-01-01 01:00:00.000000000 
+0100
+++ new/communications-1.2.6/inst/ssbmod.m      2023-05-10 16:43:07.000000000 
+0200
@@ -0,0 +1,166 @@
+
+## Copyright (C) 2023 The Octave Project Developers
+## Copyright (C) 2023 Mohammed Azmat Khan < azmat.d...@gmail.com >
+##
+## This program is free software; you can redistribute it and/or modify it 
under
+## the terms of the GNU General Public License as published by the Free 
Software
+## Foundation; either version 3 of the License, or (at your option) any later
+## version.
+##
+## This program is distributed in the hope that it will be useful, but WITHOUT
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 
more
+## details.
+##
+## You should have received a copy of the GNU General Public License along with
+## this program; if not, see <http://www.gnu.org/licenses/>.
+
+
+## -*- texinfo -*-
+## @deftypefn {Function File} {@var{y} =} ssbmod (@var{x}, @var{fc}, @var{fs})
+## @deftypefnx {Function File} {@var{y} =} ssbmod (@var{x}, @var{fc}, 
@var{fs}, @var{phi})
+## @deftypefnx {Function File} {@var{y} =} ssbmod (@var{x}, @var{fc}, 
@var{fs}, @var{phi}, @var{band})
+##
+## Creates the SSB modulation of the amplitude signal @var{x}
+## with carrier frequency @var{fc} , sampling frequency @var{fs}
+## initial phase : @var{phi} and specified band : @var{band}
+## initial phase : @var{phi} and specified band : @var{band} are optional
+## arguments and initial phase : @var{phi} will be considered 0 if not given.
+## specified band : @var{band} by default is lower sideband, but upper sideband
+## can be specified by giving 'upper' as the fourth argument.
+##
+##
+## references and equation for ssbmod:
+## https://electronicscoach.com/single-sideband-modulation.html
+## https://www.ee-diary.com/2023/02/ssb-sc-am-signal-generation-in-matlab.html
+##
+##
+## Inputs:
+## @itemize
+## @item
+## @var{x}: amplitude message signal
+##
+## @item
+## @var{fc}: carrier frequency
+##
+## @item
+## @var{fs}: sampling frequency
+##
+##
+## @item
+## @var{phi}: initial phase (defaults to 0)
+##
+##
+## @item
+## @var{band}: specified band (if upper)
+## @end itemize
+##
+## Output:
+## @itemize
+## @var{y}: The SSB modulation of @var{x}
+## @end itemize
+## Demo
+## @example
+## demo ssbmod
+## @end example
+## @seealso{ssbdemod,ammod,amdemod, fmmod, fmdemod}
+## @end deftypefn
+
+
+
+
+
+
+
+function y = ssbmod (x, fc, fs, varargin)
+
+  % checks for input arguments
+
+  % check for no. of arguments
+  if (nargin > 5 || nargin < 3)
+    print_usage ();
+  endif
+
+  % check if fs < 2*fc
+  if (fs < 2 .* fc)
+    error ("ssbmod: fs is too small, must be at least 2 * fc")
+  endif
+
+  % check for initial phase. if empty phi = 0
+  if( nargin >= 4)
+    phi = varargin{1};
+    if (isempty(phi))
+      phi = 0;
+    endif
+  else
+    phi = 0;
+  endif
+
+  % check if upper band specified band
+  band = '';
+  if (nargin == 5)
+    band = varargin{2};
+    if (!strcmpi(band,'upper'))
+      error ("ssbmod: band argument can only be 'upper'")
+    endif
+  endif
+
+
+  % Input arguments check end
+
+
+  l = length (x);
+
+  % defining t from sampling frequency fs
+  t = reshape (0: 1 ./ fs: (l - 1) ./ fs, size(x));
+
+  % Hilbert transform of message signal
+  mh = imag(hilbert(x));
+
+  % ssbmod equation for upper sideband
+  if (strcmpi(band, 'upper'))
+    y = (x .* cos(2 .* pi .* fc .* t + phi)) - (mh .* sin(2 .* pi .* fc .* t + 
phi));
+
+  % ssbmod equation for Lower side band
+  else
+    y = (x .* cos(2 .* pi .* fc .* t + phi)) + (mh .* sin(2 .* pi .* fc .* t + 
phi));
+  endif
+
+
+endfunction
+
+%------------------------------- end of function ----------------------
+%
+## Test input validation
+%!error ssbmod ()
+%!error ssbmod (1)
+%!error ssbmod (1, 2)
+%!error ssbmod (1, 2, 3, 4)
+%!error ssbmod (1, 2, 3, 4, 5)
+%
+%!error <fs is too> ssbmod (pi/2, 100, 10)
+%
+%
+%!demo
+%! #carrier frequency
+%! fc=400;
+%! #sampling frequency
+%! fs=8000;
+%!
+%! t=0:(1/fs):0.1;
+%!
+%! #message signal y
+%! y=sin(20*pi*t);
+%!
+%! #ssb modulation
+%! y1=ssbmod(y,fc,fs);
+%!
+%! #plot results
+%! figure(1)
+%! subplot(2,1,1)
+%! plot(t,y)
+%!
+%! #ssbmod plot
+%! subplot(2,1,2)
+%! plot(t,y1)
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/src/config.h.in 
new/communications-1.2.6/src/config.h.in
--- old/communications-1.2.4/src/config.h.in    2022-01-19 19:11:50.660549885 
+0100
+++ new/communications-1.2.6/src/config.h.in    2023-05-10 16:45:54.695555269 
+0200
@@ -11,9 +11,6 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
 /* Define to 1 if you have the <octave/base-lu.h> header file. */
 #undef HAVE_OCTAVE_BASE_LU_H
 
@@ -59,6 +56,9 @@
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
 
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
 /* Define to 1 if you have the <stdlib.h> header file. */
 #undef HAVE_STDLIB_H
 
@@ -125,7 +125,9 @@
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
 
-/* Define to 1 if you have the ANSI C header files. */
+/* Define to 1 if all of the C90 standard headers exist (not just the ones
+   required in a freestanding environment). This macro is provided for
+   backward compatibility; new code need not use it. */
 #undef STDC_HEADERS
 
 #include "oct-alt-includes.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/communications-1.2.4/src/gf.cc new/communications-1.2.6/src/gf.cc
--- old/communications-1.2.4/src/gf.cc  2022-01-19 19:10:18.000000000 +0100
+++ new/communications-1.2.6/src/gf.cc  2023-05-10 16:43:07.000000000 +0200
@@ -2496,7 +2496,7 @@
 msg = randint (10, k);\n\
 code = bchenco (msg, n, k);\n\
 noisy = mod (randerr (10,n) + code, 2);\n\
-[dec, err] = bchdeco (msg, k, t);\n\
+[dec, err] = bchdeco (noisy, k, t);\n\
 @end example\n\
 \n\
 Valid codes can be found using @code{bchpoly}. In general the codeword\n\

Reply via email to