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
+
+- Update URL to point to 'https://gnu-octave.github.io/packages/'
+
+-------------------------------------------------------------------
+Mon Oct 16 00:27:37 UTC 2023 - Atri Bhattacharya
+
+- 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
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
## Copyright (C) 2011 Ferran Mesas Garcia
##
@@ -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
-##
-## 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
+##
+## 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.dev0@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.dev0@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 header file. */
#undef HAVE_INTTYPES_H
-/* Define to 1 if you have the header file. */
-#undef HAVE_MEMORY_H
-
/* Define to 1 if you have the header file. */
#undef HAVE_OCTAVE_BASE_LU_H
@@ -59,6 +56,9 @@
/* Define to 1 if you have the header file. */
#undef HAVE_STDINT_H
+/* Define to 1 if you have the header file. */
+#undef HAVE_STDIO_H
+
/* Define to 1 if you have the 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\