commit octave-forge-communications for openSUSE:Factory
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 <badshah400@gmail.com> + +- Update URL to point to 'https://gnu-octave.github.io/packages/' + +------------------------------------------------------------------- +Mon Oct 16 00:27:37 UTC 2023 - Atri Bhattacharya <badshah400@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 <mail@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.annamalai@uta.edu> ## Copyright (C) 2011 Ferran Mesas Garcia <ferran.mesas01@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.pelissier@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.pelissier@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.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 <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\
participants (1)
-
Source-Sync