Input buildinfo: https://buildinfos.debian.net/buildinfo-pool/o/octave-signal/octave-signal_1.4.1-4+b1_amd64.buildinfo Use metasnap for getting required timestamps New buildinfo file: /tmp/octave-signal-1.4.1-4+b124fbx06b/octave-signal_1.4.1-4+b1_amd64.buildinfo Get source package info: octave-signal=1.4.1-4 Source URL: http://snapshot.notset.fr/mr/package/octave-signal/1.4.1-4/srcfiles?fileinfo=1 env -i PATH=/usr/sbin:/usr/bin:/sbin:/bin TMPDIR=/tmp mmdebstrap --arch=amd64 --include=aglfn=1.7+git20191031.4036a9c-2 autoconf=2.69-11.1 automake=1:1.16.3-1 autopoint=0.19.8.1-10 autotools-dev=20180224.1 base-files=11 base-passwd=3.5.48 bash=5.1-1 binutils=2.35.1-4 binutils-common=2.35.1-4 binutils-x86-64-linux-gnu=2.35.1-4 bsdextrautils=2.36.1-2 bsdutils=1:2.36.1-2 build-essential=12.8 bzip2=1.0.8-4 ca-certificates=20200601 cme=1.032-1 coreutils=8.32-4+b1 cpp=4:10.2.0-1 cpp-10=10.2.1-1 dash=0.5.11+git20200708+dd9ef66-2 debconf=1.5.74 debhelper=13.3 debianutils=4.11.2 dh-autoreconf=19 dh-octave=1.0.2 dh-octave-autopkgtest=1.0.2 dh-strip-nondeterminism=1.9.0-1 diffstat=1.63-1 diffutils=1:3.7-3 dpkg=1.20.5 dpkg-dev=1.20.5 dwz=0.13+20201015-2 file=1:5.39-3 findutils=4.7.0+git20201010-2 fontconfig=2.13.1-4.2 fontconfig-config=2.13.1-4.2 fonts-dejavu-core=2.37-2 fonts-freefont-otf=20120503-10 g++=4:10.2.0-1 g++-10=10.2.1-1 gcc=4:10.2.0-1 gcc-10=10.2.1-1 gcc-10-base=10.2.1-1 gettext=0.19.8.1-10 gettext-base=0.19.8.1-10 gfortran=4:10.2.0-1 gfortran-10=10.2.1-1 gnuplot-data=5.4.1+dfsg1-1 gnuplot-nox=5.4.1+dfsg1-1 gpg=2.2.20-1 gpgconf=2.2.20-1 grep=3.6-1 groff-base=1.22.4-5 gzip=1.10-2 hdf5-helpers=1.10.6+repack-2 hostname=3.23 init-system-helpers=1.59 intltool-debian=0.35.0+20060710.5 libacl1=2.2.53-8 libaec-dev=1.0.4-1 libaec0=1.0.4-1 libalgorithm-c3-perl=0.11-1 libaliased-perl=0.34-1 libamd2=1:5.8.1+dfsg-2 libapp-cmd-perl=0.331-1 libapt-pkg-perl=0.1.36+b4 libapt-pkg6.0=2.1.12 libarchive-zip-perl=1.68-1 libarpack2=3.8.0-1 libarray-intspan-perl=2.004-1 libasan6=10.2.1-1 libasound2=1.2.4-1 libasound2-data=1.2.4-1 libassuan0=2.5.3-7.1 libatomic1=10.2.1-1 libattr1=1:2.4.48-5 libaudit-common=1:2.8.5-3.1 libaudit1=1:2.8.5-3.1+b1 libavahi-client3=0.8-3 libavahi-common-data=0.8-3 libavahi-common3=0.8-3 libb-hooks-endofscope-perl=0.24-1 libb-hooks-op-check-perl=0.22-1+b3 libbinutils=2.35.1-4 libblas-dev=3.9.0-3 libblas3=3.9.0-3 libblkid1=2.36.1-2 libboolean-perl=0.46-1 libbrotli1=1.0.9-2+b2 libbsd0=0.10.0-1 libbz2-1.0=1.0.8-4 libc-bin=2.31-5 libc-dev-bin=2.31-5 libc6=2.31-5 libc6-dev=2.31-5 libcairo2=1.16.0-4 libcamd2=1:5.8.1+dfsg-2 libcap-ng0=0.7.9-2.2+b1 libcapture-tiny-perl=0.48-1 libcarp-assert-more-perl=1.24-1 libcarp-assert-perl=0.21-1 libcc1-0=10.2.1-1 libccolamd2=1:5.8.1+dfsg-2 libcholmod3=1:5.8.1+dfsg-2 libclass-c3-perl=0.35-1 libclass-data-inheritable-perl=0.08-3 libclass-load-perl=0.25-1 libclass-method-modifiers-perl=2.13-1 libclass-xsaccessor-perl=1.19-3+b6 libclone-choose-perl=0.010-1 libclone-perl=0.45-1+b1 libcolamd2=1:5.8.1+dfsg-2 libcom-err2=1.45.6-1 libconfig-model-backend-yaml-perl=2.133-2 libconfig-model-dpkg-perl=2.139 libconfig-model-perl=2.140-1 libconfig-tiny-perl=2.24-1 libconvert-binhex-perl=1.125-1 libcpanel-json-xs-perl=4.25-1+b1 libcroco3=0.6.13-1 libcrypt-dev=1:4.4.17-1 libcrypt1=1:4.4.17-1 libctf-nobfd0=2.35.1-4 libctf0=2.35.1-4 libcups2=2.3.3op1-3 libcurl3-gnutls=7.72.0-1 libcxsparse3=1:5.8.1+dfsg-2 libdata-dpath-perl=0.58-1 libdata-messagepack-perl=1.00-4+b1 libdata-optlist-perl=0.110-1 libdata-section-perl=0.200007-1 libdata-validate-domain-perl=0.10-1 libdatrie1=0.2.12-3 libdb5.3=5.3.28+dfsg1-0.6 libdbus-1-3=1.12.20-1 libdebconfclient0=0.255 libdebhelper-perl=13.3 libdevel-callchecker-perl=0.008-1+b2 libdevel-size-perl=0.83-1+b2 libdevel-stacktrace-perl=2.0400-1 libdouble-conversion3=3.1.5-6.1 libdpkg-perl=1.20.5 libdrm-amdgpu1=2.4.103-2 libdrm-common=2.4.103-2 libdrm-intel1=2.4.103-2 libdrm-nouveau2=2.4.103-2 libdrm-radeon1=2.4.103-2 libdrm2=2.4.103-2 libdynaloader-functions-perl=0.003-1 libedit2=3.1-20191231-1 libegl-dev=1.3.2-1 libegl-mesa0=20.2.4-1 libegl1=1.3.2-1 libelf1=0.182-1 libemail-address-xs-perl=1.04-1+b3 libencode-locale-perl=1.05-1 liberror-perl=0.17029-1 libevdev2=1.10.0+dfsg-1 libexception-class-perl=1.44-1 libexpat1=2.2.10-1 libexporter-lite-perl=0.08-1 libexporter-tiny-perl=1.002002-1 libffi7=3.3-5 libfftw3-bin=3.3.8-2 libfftw3-dev=3.3.8-2 libfftw3-double3=3.3.8-2 libfftw3-long3=3.3.8-2 libfftw3-quad3=3.3.8-2 libfftw3-single3=3.3.8-2 libfile-basedir-perl=0.08-1 libfile-find-rule-perl=0.34-1 libfile-homedir-perl=1.006-1 libfile-listing-perl=6.14-1 libfile-stripnondeterminism-perl=1.9.0-1 libfile-which-perl=1.23-1 libflac8=1.3.3-1 libfltk-gl1.3=1.3.5-2 libfltk1.3=1.3.5-2 libfont-ttf-perl=1.06-1 libfontconfig1=2.13.1-4.2 libfreetype6=2.10.4+dfsg-1 libfribidi0=1.0.8-2 libgbm1=20.2.4-1 libgcc-10-dev=10.2.1-1 libgcc-s1=10.2.1-1 libgcrypt20=1.8.7-2 libgd3=2.3.0-2 libgdbm-compat4=1.18.1-5.1 libgdbm6=1.18.1-5.1 libgetopt-long-descriptive-perl=0.105-1 libgfortran-10-dev=10.2.1-1 libgfortran5=10.2.1-1 libgl-dev=1.3.2-1 libgl1=1.3.2-1 libgl1-mesa-dev=20.2.4-1 libgl1-mesa-dri=20.2.4-1 libgl2ps1.4=1.4.2+dfsg1-1 libglapi-mesa=20.2.4-1 libgles-dev=1.3.2-1 libgles1=1.3.2-1 libgles2=1.3.2-1 libglib2.0-0=2.66.3-2 libglpk40=4.65-2 libglu1-mesa=9.0.1-1 libglvnd-dev=1.3.2-1 libglvnd0=1.3.2-1 libglx-dev=1.3.2-1 libglx-mesa0=20.2.4-1 libglx0=1.3.2-1 libgmp10=2:6.2.1+dfsg-1 libgnutls30=3.7.0-3 libgomp1=10.2.1-1 libgpg-error0=1.38-2 libgraphicsmagick++-q16-12=1.4+really1.3.35+hg16394-1 libgraphicsmagick-q16-3=1.4+really1.3.35+hg16394-1 libgraphite2-3=1.3.14-1 libgssapi-krb5-2=1.18.3-4 libgudev-1.0-0=234-1 libharfbuzz0b=2.6.7-1 libhash-fieldhash-perl=0.15-1+b3 libhash-merge-perl=0.302-1 libhdf5-103-1=1.10.6+repack-2 libhdf5-cpp-103-1=1.10.6+repack-2 libhdf5-dev=1.10.6+repack-2 libhdf5-fortran-102=1.10.6+repack-2 libhdf5-hl-100=1.10.6+repack-2 libhdf5-hl-cpp-100=1.10.6+repack-2 libhdf5-hl-fortran-100=1.10.6+repack-2 libhogweed6=3.6-2 libhtml-html5-entities-perl=0.004-1 libhtml-parser-perl=3.75-1+b1 libhtml-tagset-perl=3.20-4 libhtml-tree-perl=5.07-2 libhttp-cookies-perl=6.09-1 libhttp-date-perl=6.05-1 libhttp-message-perl=6.26-1 libhttp-negotiate-perl=6.01-1 libice6=2:1.0.10-1 libicu67=67.1-5 libidn2-0=2.3.0-4 libimport-into-perl=1.002005-1 libinput-bin=1.16.4-1 libinput10=1.16.4-1 libio-html-perl=1.001-1 libio-socket-ssl-perl=2.068-1 libio-string-perl=1.08-3 libio-stringy-perl=2.111-3 libio-tiecombine-perl=1.005-1 libipc-run3-perl=0.048-2 libipc-system-simple-perl=1.30-1 libisl23=0.23-1 libiterator-perl=0.03+ds1-1 libiterator-util-perl=0.02+ds1-1 libitm1=10.2.1-1 libjack-jackd2-0=1.9.16~dfsg-1 libjbig0=2.1-3.1+b2 libjpeg-dev=1:2.0.5-1.1 libjpeg62-turbo=1:2.0.5-1.1 libjpeg62-turbo-dev=1:2.0.5-1.1 libjson-maybexs-perl=1.004003-1 libjson-perl=4.02000-2 libk5crypto3=1.18.3-4 libkeyutils1=1.6.1-2 libkrb5-3=1.18.3-4 libkrb5support0=1.18.3-4 liblapack-dev=3.9.0-3 liblapack3=3.9.0-3 liblcms2-2=2.9-4+b1 libldap-2.4-2=2.4.56+dfsg-1 liblist-compare-perl=0.55-1 liblist-moreutils-perl=0.416-1+b6 liblist-someutils-perl=0.58-1 liblist-utilsby-perl=0.11-1 libllvm11=1:11.0.0-5+b1 liblog-any-adapter-screen-perl=0.140-1 liblog-any-perl=1.708-1 liblog-log4perl-perl=1.53-1 liblsan0=10.2.1-1 libltdl7=2.4.6-14 liblua5.4-0=5.4.2-1 liblwp-mediatypes-perl=6.04-1 liblwp-protocol-https-perl=6.09-1 liblz4-1=1.9.2-2 liblzma5=5.2.4-1+b1 liblzo2-2=2.10-2 libmagic-mgc=1:5.39-3 libmagic1=1:5.39-3 libmailtools-perl=2.21-1 libmarkdown2=2.2.6-1 libmd4c0=0.4.6-1 libmetis5=5.1.0.dfsg-7 libmime-tools-perl=5.509-1 libmodule-implementation-perl=0.09-1 libmodule-pluggable-perl=5.2-1 libmodule-runtime-perl=0.016-1 libmoo-perl=2.004004-1 libmoox-aliases-perl=0.001006-1 libmoox-struct-perl=0.020-1 libmount1=2.36.1-2 libmouse-perl=2.5.10-1+b1 libmousex-nativetraits-perl=1.09-2 libmousex-strictconstructor-perl=0.02-2 libmpc3=1.2.0-1 libmpfr6=4.1.0-3 libmro-compat-perl=0.13-1 libmtdev1=1.1.6-1 libnamespace-autoclean-perl=0.29-1 libnamespace-clean-perl=0.27-1 libncurses-dev=6.2+20201114-1 libncurses6=6.2+20201114-1 libncursesw6=6.2+20201114-1 libnet-domain-tld-perl=1.75-1 libnet-http-perl=6.19-1 libnet-smtp-ssl-perl=1.04-1 libnet-ssleay-perl=1.88-3+b1 libnettle8=3.6-2 libnghttp2-14=1.42.0-1 libnsl-dev=1.3.0-2 libnsl2=1.3.0-2 libnumber-compare-perl=0.03-1 libnumber-range-perl=0.12-1 libobject-id-perl=0.1.2-2 liboctave-dev=6.1.0-2 liboctave8=6.1.0-2 libogg0=1.3.2-1+b1 libopengl-dev=1.3.2-1 libopengl0=1.3.2-1 libp11-kit0=0.23.21-2 libpackage-stash-perl=0.39-1 libpam-modules=1.3.1-5 libpam-modules-bin=1.3.1-5 libpam-runtime=1.3.1-5 libpam0g=1.3.1-5 libpango-1.0-0=1.46.2-3 libpangocairo-1.0-0=1.46.2-3 libpangoft2-1.0-0=1.46.2-3 libparams-classify-perl=0.015-1+b3 libparams-util-perl=1.102-1+b1 libparams-validate-perl=1.30-1+b1 libparse-debcontrol-perl=2.005-4 libparse-recdescent-perl=1.967015+dfsg-2 libpath-iterator-rule-perl=1.014-1 libpath-tiny-perl=0.114-1 libpciaccess0=0.16-1 libpcre2-16-0=10.35-2 libpcre2-8-0=10.35-2 libpcre3=2:8.39-13 libperl5.32=5.32.0-5 libperlio-gzip-perl=0.19-1+b7 libpipeline1=1.5.3-1 libpixman-1-0=0.40.0-1 libpng16-16=1.6.37-3 libpod-constants-perl=0.19-2 libpod-parser-perl=1.63-2 libpod-pom-perl=2.01-3 libportaudio2=19.6.0-1.1 libproc-processtable-perl=0.59-2+b1 libpsl5=0.21.0-1.1 libpthread-stubs0-dev=0.4-1 libqhull8.0=2020.2-3 libqrupdate1=1.1.2-4 libqscintilla2-qt5-15=2.11.6+dfsg-1 libqscintilla2-qt5-l10n=2.11.6+dfsg-1 libqt5core5a=5.15.1+dfsg-4 libqt5dbus5=5.15.1+dfsg-4 libqt5gui5=5.15.1+dfsg-4 libqt5help5=5.15.1-2+b1 libqt5network5=5.15.1+dfsg-4 libqt5printsupport5=5.15.1+dfsg-4 libqt5sql5=5.15.1+dfsg-4 libqt5widgets5=5.15.1+dfsg-4 libqt5xml5=5.15.1+dfsg-4 libquadmath0=10.2.1-1 libre-engine-re2-perl=0.13-5+b5 libre2-9=20201101+dfsg-2 libreadline-dev=8.1-1 libreadline8=8.1-1 libregexp-common-perl=2017060201-1 libregexp-pattern-license-perl=3.4.0-1 libregexp-pattern-perl=0.2.14-1 librole-tiny-perl=2.001004-1 librtmp1=2.4+20151223.gitfa8646d.1-2+b2 libsamplerate0=0.1.9-2 libsasl2-2=2.1.27+dfsg-2 libsasl2-modules-db=2.1.27+dfsg-2 libseccomp2=2.5.0-3+b1 libselinux1=3.1-2+b2 libsensors-config=1:3.6.0-2 libsensors5=1:3.6.0-2 libsereal-decoder-perl=4.018+ds-1+b1 libsereal-encoder-perl=4.018+ds-1+b1 libsigsegv2=2.12-2 libslicot0=5.0+20101122-4 libsm6=2:1.2.3-1 libsmartcols1=2.36.1-2 libsndfile1=1.0.28-8 libsoftware-license-perl=0.103014-2 libsoftware-licensemoreutils-perl=1.005-1 libsort-key-perl=1.33-2+b3 libsort-versions-perl=1.62-1 libsqlite3-0=3.34.0-1 libssh2-1=1.9.0-1 libssl1.1=1.1.1i-1 libstdc++-10-dev=10.2.1-1 libstdc++6=10.2.1-1 libstrictures-perl=2.000006-1 libstring-copyright-perl=0.003006-1 libstring-escape-perl=2010.002-2 libstring-rewriteprefix-perl=0.008-1 libsub-exporter-perl=0.987-1 libsub-exporter-progressive-perl=0.001013-1 libsub-identify-perl=0.14-1+b3 libsub-install-perl=0.928-1 libsub-name-perl=0.26-1+b1 libsub-override-perl=0.09-2 libsub-quote-perl=2.006006-1 libsub-uplevel-perl=0.2800-1 libsuitesparseconfig5=1:5.8.1+dfsg-2 libsystemd0=247.1-3 libsz2=1.0.4-1 libtasn1-6=4.16.0-2 libtest-exception-perl=0.43-1 libtext-autoformat-perl=1.750000-1 libtext-glob-perl=0.11-1 libtext-levenshtein-damerau-perl=0.41-1 libtext-levenshteinxs-perl=0.03-4+b8 libtext-markdown-discount-perl=0.12-1+b1 libtext-reform-perl=1.20-3 libtext-template-perl=1.59-1 libtext-unidecode-perl=1.30-1 libtext-xslate-perl=3.5.8-1+b1 libthai-data=0.1.28-3 libthai0=0.1.28-3 libtiff5=4.1.0+git191117-2 libtime-duration-perl=1.21-1 libtime-moment-perl=0.44-1+b3 libtimedate-perl=2.3300-1 libtinfo6=6.2+20201114-1 libtirpc-common=1.2.6-3 libtirpc-dev=1.2.6-3 libtirpc3=1.2.6-3 libtool=2.4.6-14 libtry-tiny-perl=0.30-1 libtsan0=10.2.1-1 libtype-tiny-perl=1.012000-1 libubsan1=10.2.1-1 libuchardet0=0.0.7-1 libudev1=247.1-3 libumfpack5=1:5.8.1+dfsg-2 libunicode-utf8-perl=0.62-1+b2 libunistring2=0.9.10-4 liburi-perl=5.05-1 libuuid1=2.36.1-2 libvariable-magic-perl=0.62-1+b3 libvorbis0a=1.3.7-1 libvorbisenc2=1.3.7-1 libvulkan1=1.2.154.1-1 libwacom-common=1.6-1 libwacom2=1.6-1 libwayland-client0=1.18.0-2~exp1.1 libwayland-server0=1.18.0-2~exp1.1 libwebp6=0.6.1-2+b1 libwebpmux3=0.6.1-2+b1 libwmf0.2-7=0.2.8.4-17 libwww-perl=6.49-1 libwww-robotrules-perl=6.02-1 libx11-6=2:1.6.12-1 libx11-data=2:1.6.12-1 libx11-dev=2:1.6.12-1 libx11-xcb1=2:1.6.12-1 libxau-dev=1:1.0.8-1+b2 libxau6=1:1.0.8-1+b2 libxcb-dri2-0=1.14-2 libxcb-dri3-0=1.14-2 libxcb-glx0=1.14-2 libxcb-icccm4=0.4.1-1.1 libxcb-image0=0.4.0-1+b3 libxcb-keysyms1=0.4.0-1+b2 libxcb-present0=1.14-2 libxcb-randr0=1.14-2 libxcb-render-util0=0.3.9-1+b1 libxcb-render0=1.14-2 libxcb-shape0=1.14-2 libxcb-shm0=1.14-2 libxcb-sync1=1.14-2 libxcb-util1=0.4.0-1+b1 libxcb-xfixes0=1.14-2 libxcb-xinerama0=1.14-2 libxcb-xinput0=1.14-2 libxcb-xkb1=1.14-2 libxcb1=1.14-2 libxcb1-dev=1.14-2 libxcursor1=1:1.2.0-2 libxdamage1=1:1.1.5-2 libxdmcp-dev=1:1.1.2-3 libxdmcp6=1:1.1.2-3 libxext6=2:1.3.3-1+b2 libxfixes3=1:5.0.3-2 libxft2=2.3.2-2 libxinerama1=2:1.1.4-2 libxkbcommon-x11-0=1.0.3-2 libxkbcommon0=1.0.3-2 libxml-libxml-perl=2.0134+dfsg-2+b1 libxml-namespacesupport-perl=1.12-1 libxml-sax-base-perl=1.09-1 libxml-sax-perl=1.02+dfsg-1 libxml2=2.9.10+dfsg-6.3+b1 libxpm4=1:3.5.12-1 libxrender1=1:0.9.10-1 libxshmfence1=1.3-1 libxxf86vm1=1:1.1.4-1+b2 libyaml-0-2=0.2.2-1 libyaml-libyaml-perl=0.82+repack-1+b1 libyaml-perl=1.30-1 libyaml-tiny-perl=1.73-1 libz3-4=4.8.9-1 libzstd1=1.4.5+dfsg-4 licensecheck=3.0.47-1 lintian=2.104.0 linux-libc-dev=5.9.11-1 login=1:4.8.1-1 lsb-base=11.1.0 lzip=1.21-8 lzop=1.04-2 m4=1.4.18-4 make=4.3-4 man-db=2.9.3-2 mawk=1.3.4.20200120-2 ncurses-base=6.2+20201114-1 ncurses-bin=6.2+20201114-1 netbase=6.2 octave=6.1.0-2 octave-common=6.1.0-2 octave-control=3.2.0-5+b1 openssl=1.1.1i-1 patch=2.7.6-6 patchutils=0.4.2-1 perl=5.32.0-5 perl-base=5.32.0-5 perl-modules-5.32=5.32.0-5 perl-openssl-defaults=5 po-debconf=1.0.21 readline-common=8.1-1 sed=4.7-1 sensible-utils=0.0.12+nmu1 shared-mime-info=2.0-1 sysvinit-utils=2.96-5 t1utils=1.41-4 tar=1.32+dfsg-1 tex-common=6.15 texinfo=6.7.0.dfsg.2-5+b1 ucf=3.0043 unzip=6.0-25 util-linux=2.36.1-2 x11-common=1:7.7+21 x11proto-core-dev=2020.1-1 x11proto-dev=2020.1-1 xkb-data=2.29-2 xorg-sgml-doctools=1:1.11-1 xtrans-dev=1.4.0-1 xz-utils=5.2.4-1+b1 zlib1g=1:1.2.11.dfsg-2 zlib1g-dev=1:1.2.11.dfsg-2 --variant=apt --aptopt=Acquire::Check-Valid-Until "false" --aptopt=Acquire::http::Dl-Limit "1000"; --aptopt=Acquire::https::Dl-Limit "1000"; --aptopt=Acquire::Retries "5"; --aptopt=APT::Get::allow-downgrades "true"; --keyring=/usr/share/keyrings/ --essential-hook=chroot "$1" sh -c "apt-get --yes install fakeroot util-linux" --essential-hook=copy-in /usr/share/keyrings/debian-archive-bullseye-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-security-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-stable.gpg /usr/share/keyrings/debian-archive-buster-automatic.gpg /usr/share/keyrings/debian-archive-buster-security-automatic.gpg /usr/share/keyrings/debian-archive-buster-stable.gpg /usr/share/keyrings/debian-archive-keyring.gpg /usr/share/keyrings/debian-archive-removed-keys.gpg /usr/share/keyrings/debian-archive-stretch-automatic.gpg /usr/share/keyrings/debian-archive-stretch-security-automatic.gpg /usr/share/keyrings/debian-archive-stretch-stable.gpg /usr/share/keyrings/debian-ports-archive-keyring-removed.gpg /usr/share/keyrings/debian-ports-archive-keyring.gpg /usr/share/keyrings/debian-keyring.gpg /etc/apt/trusted.gpg.d/ --essential-hook=chroot "$1" sh -c "rm /etc/apt/sources.list && echo 'deb http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb-src http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb http://snapshot.notset.fr/archive/debian/20201210T083846Z/ unstable main' >> /etc/apt/sources.list && apt-get update" --customize-hook=chroot "$1" useradd --no-create-home -d /nonexistent -p "" builduser -s /bin/bash --customize-hook=chroot "$1" env sh -c "apt-get source --only-source -d octave-signal=1.4.1-4 && mkdir -p /build/octave-signal-Uu6nV8 && dpkg-source --no-check -x /*.dsc /build/octave-signal-Uu6nV8/octave-signal-1.4.1 && cd /build/octave-signal-Uu6nV8/octave-signal-1.4.1 && { printf '%s' 'octave-signal (1.4.1-4+b1) sid; urgency=low, binary-only=yes * Binary-only non-maintainer upload for amd64; no source changes. * Rebuild against octave 6 -- amd64 / i386 Build Daemon (x86-ubc-01) Thu, 10 Dec 2020 01:07:36 +0000 '; cat debian/changelog; } > debian/changelog.debrebuild && mv debian/changelog.debrebuild debian/changelog && chown -R builduser:builduser /build/octave-signal-Uu6nV8" --customize-hook=chroot "$1" env --unset=TMPDIR runuser builduser -c "cd /build/octave-signal-Uu6nV8/octave-signal-1.4.1 && env DEB_BUILD_OPTIONS="parallel=4" LC_ALL="C.UTF-8" SOURCE_DATE_EPOCH="1607562456" dpkg-buildpackage -uc -a amd64 --build=any" --customize-hook=sync-out /build/octave-signal-Uu6nV8 /tmp/octave-signal-1.4.1-4+b124fbx06b bullseye /dev/null deb http://snapshot.notset.fr/archive/debian/20201210T083846Z unstable main I: automatically chosen mode: root I: chroot architecture amd64 is equal to the host's architecture I: automatically chosen format: tar I: using /tmp/mmdebstrap.GUeTYoLzWj as tempdir I: running apt-get update... I: downloading packages with apt... I: extracting archives... I: installing essential packages... I: running --essential-hook in shell: sh -c 'chroot "$1" sh -c "apt-get --yes install fakeroot util-linux"' exec /tmp/mmdebstrap.GUeTYoLzWj Reading package lists... Building dependency tree... util-linux is already the newest version (2.36.1-2). The following NEW packages will be installed: fakeroot libfakeroot 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 134 kB of archives. After this operation, 397 kB of additional disk space will be used. Get:1 http://snapshot.notset.fr/archive/debian/20201210T083846Z unstable/main amd64 libfakeroot amd64 1.25.3-1.1 [47.0 kB] Get:2 http://snapshot.notset.fr/archive/debian/20201210T083846Z unstable/main amd64 fakeroot amd64 1.25.3-1.1 [87.0 kB] debconf: delaying package configuration, since apt-utils is not installed Fetched 134 kB in 0s (1019 kB/s) Selecting previously unselected package libfakeroot:amd64. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 4616 files and directories currently installed.) Preparing to unpack .../libfakeroot_1.25.3-1.1_amd64.deb ... Unpacking libfakeroot:amd64 (1.25.3-1.1) ... Selecting previously unselected package fakeroot. Preparing to unpack .../fakeroot_1.25.3-1.1_amd64.deb ... Unpacking fakeroot (1.25.3-1.1) ... Setting up libfakeroot:amd64 (1.25.3-1.1) ... Setting up fakeroot (1.25.3-1.1) ... update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode Processing triggers for libc-bin (2.31-5) ... I: running special hook: copy-in /usr/share/keyrings/debian-archive-bullseye-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-security-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-stable.gpg /usr/share/keyrings/debian-archive-buster-automatic.gpg /usr/share/keyrings/debian-archive-buster-security-automatic.gpg /usr/share/keyrings/debian-archive-buster-stable.gpg /usr/share/keyrings/debian-archive-keyring.gpg /usr/share/keyrings/debian-archive-removed-keys.gpg /usr/share/keyrings/debian-archive-stretch-automatic.gpg /usr/share/keyrings/debian-archive-stretch-security-automatic.gpg /usr/share/keyrings/debian-archive-stretch-stable.gpg /usr/share/keyrings/debian-ports-archive-keyring-removed.gpg /usr/share/keyrings/debian-ports-archive-keyring.gpg /usr/share/keyrings/debian-keyring.gpg /etc/apt/trusted.gpg.d/ I: running --essential-hook in shell: sh -c 'chroot "$1" sh -c "rm /etc/apt/sources.list && echo 'deb http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb-src http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb http://snapshot.notset.fr/archive/debian/20201210T083846Z/ unstable main' >> /etc/apt/sources.list && apt-get update"' exec /tmp/mmdebstrap.GUeTYoLzWj Get:1 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm InRelease [81.6 kB] Hit:2 http://snapshot.notset.fr/archive/debian/20201210T083846Z unstable InRelease Ign:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources Ign:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages Ign:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources Ign:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages Ign:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources Ign:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages Get:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources [11.4 MB] Get:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages [11.1 MB] Fetched 22.6 MB in 22s (1012 kB/s) Reading package lists... I: installing remaining packages inside the chroot... I: running --customize-hook in shell: sh -c 'chroot "$1" useradd --no-create-home -d /nonexistent -p "" builduser -s /bin/bash' exec /tmp/mmdebstrap.GUeTYoLzWj I: running --customize-hook in shell: sh -c 'chroot "$1" env sh -c "apt-get source --only-source -d octave-signal=1.4.1-4 && mkdir -p /build/octave-signal-Uu6nV8 && dpkg-source --no-check -x /*.dsc /build/octave-signal-Uu6nV8/octave-signal-1.4.1 && cd /build/octave-signal-Uu6nV8/octave-signal-1.4.1 && { printf '%s' 'octave-signal (1.4.1-4+b1) sid; urgency=low, binary-only=yes * Binary-only non-maintainer upload for amd64; no source changes. * Rebuild against octave 6 -- amd64 / i386 Build Daemon (x86-ubc-01) Thu, 10 Dec 2020 01:07:36 +0000 '; cat debian/changelog; } > debian/changelog.debrebuild && mv debian/changelog.debrebuild debian/changelog && chown -R builduser:builduser /build/octave-signal-Uu6nV8"' exec /tmp/mmdebstrap.GUeTYoLzWj Reading package lists... NOTICE: 'octave-signal' packaging is maintained in the 'Git' version control system at: https://salsa.debian.org/pkg-octave-team/octave-signal.git Please use: git clone https://salsa.debian.org/pkg-octave-team/octave-signal.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 210 kB of source archives. Get:1 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main octave-signal 1.4.1-4 (dsc) [2122 B] Get:2 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main octave-signal 1.4.1-4 (tar) [202 kB] Get:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main octave-signal 1.4.1-4 (diff) [5904 B] Fetched 210 kB in 0s (1100 kB/s) Download complete and in download only mode W: Download is performed unsandboxed as root as file 'octave-signal_1.4.1-4.dsc' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) dpkg-source: info: extracting octave-signal in /build/octave-signal-Uu6nV8/octave-signal-1.4.1 dpkg-source: info: unpacking octave-signal_1.4.1.orig.tar.gz dpkg-source: info: unpacking octave-signal_1.4.1-4.debian.tar.xz I: running --customize-hook in shell: sh -c 'chroot "$1" env --unset=TMPDIR runuser builduser -c "cd /build/octave-signal-Uu6nV8/octave-signal-1.4.1 && env DEB_BUILD_OPTIONS="parallel=4" LC_ALL="C.UTF-8" SOURCE_DATE_EPOCH="1607562456" dpkg-buildpackage -uc -a amd64 --build=any"' exec /tmp/mmdebstrap.GUeTYoLzWj dpkg-buildpackage: info: source package octave-signal dpkg-buildpackage: info: source version 1.4.1-4+b1 dpkg-buildpackage: info: source distribution sid dpkg-buildpackage: info: source changed by amd64 / i386 Build Daemon (x86-ubc-01) dpkg-source --before-build . dpkg-buildpackage: info: host architecture amd64 debian/rules clean dh clean --buildsystem=octave --with=octave dh_auto_clean -O--buildsystem=octave dh_octave_clean make[1]: Entering directory '/build/octave-signal-Uu6nV8/octave-signal-1.4.1/src' rm -f *.o *.oct PKG_* make[1]: Leaving directory '/build/octave-signal-Uu6nV8/octave-signal-1.4.1/src' dh_autoreconf_clean -O--buildsystem=octave dh_clean -O--buildsystem=octave debian/rules binary-arch dh binary-arch --buildsystem=octave --with=octave dh_update_autotools_config -a -O--buildsystem=octave dh_autoreconf -a -O--buildsystem=octave dh_octave_version -a -O--buildsystem=octave Checking the Octave version... ok dh_auto_configure -a -O--buildsystem=octave dh_auto_build -a -O--buildsystem=octave dh_auto_test -a -O--buildsystem=octave create-stamp debian/debhelper-build-stamp dh_testroot -a -O--buildsystem=octave dh_prep -a -O--buildsystem=octave dh_auto_install -a -O--buildsystem=octave octave --no-gui --no-history --silent --no-init-file --no-window-system /usr/share/dh-octave/install-pkg.m warning: creating installation directory /build/octave-signal-Uu6nV8/octave-signal-1.4.1/debian/octave-signal/usr/share/octave/packages warning: called from install at line 36 column 5 pkg at line 568 column 9 /usr/share/dh-octave/install-pkg.m at line 47 column 1 make[1]: Entering directory '/build/octave-signal-Uu6nV8/octave-signal-1.4.1/src' /usr/bin/mkoctfile --verbose -Wall -Wno-deprecated-declarations __fwht__.cc -o __fwht__.oct g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.1.0/octave/.. -I/usr/include/octave-6.1.0/octave -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-deprecated-declarations __fwht__.cc -o /tmp/oct-7eIA2C.o /usr/bin/mkoctfile --verbose -Wall -Wno-deprecated-declarations __ultrwin__.cc -o __ultrwin__.oct g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.1.0/octave/.. -I/usr/include/octave-6.1.0/octave -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-deprecated-declarations __ultrwin__.cc -o /tmp/oct-abIvKQ.o /usr/bin/mkoctfile --verbose -Wall -Wno-deprecated-declarations -c cl2bp.cc -o cl2bp.o /usr/bin/mkoctfile --verbose -Wall -Wno-deprecated-declarations -c cl2bp_lib.cc -o cl2bp_lib.o /usr/bin/mkoctfile --verbose -Wall -Wno-deprecated-declarations medfilt1.cc -o medfilt1.oct g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.1.0/octave/.. -I/usr/include/octave-6.1.0/octave -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-deprecated-declarations cl2bp.cc -o cl2bp.o /usr/bin/mkoctfile --verbose -Wall -Wno-deprecated-declarations remez.cc -o remez.oct g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.1.0/octave/.. -I/usr/include/octave-6.1.0/octave -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-deprecated-declarations cl2bp_lib.cc -o cl2bp_lib.o /usr/bin/mkoctfile --verbose -Wall -Wno-deprecated-declarations sosfilt.cc -o sosfilt.oct g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.1.0/octave/.. -I/usr/include/octave-6.1.0/octave -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-deprecated-declarations medfilt1.cc -o /tmp/oct-03TTci.o /usr/bin/mkoctfile --verbose -Wall -Wno-deprecated-declarations upfirdn.cc -o upfirdn.oct g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.1.0/octave/.. -I/usr/include/octave-6.1.0/octave -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-deprecated-declarations remez.cc -o /tmp/oct-iNaLOD.o g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.1.0/octave/.. -I/usr/include/octave-6.1.0/octave -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-deprecated-declarations sosfilt.cc -o /tmp/oct-tlB8TK.o g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-6.1.0/octave/.. -I/usr/include/octave-6.1.0/octave -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-deprecated-declarations upfirdn.cc -o /tmp/oct-8I2DzZ.o g++ -I/usr/include/octave-6.1.0/octave/.. -I/usr/include/octave-6.1.0/octave -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-deprecated-declarations -o __fwht__.oct /tmp/oct-7eIA2C.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro g++ -I/usr/include/octave-6.1.0/octave/.. -I/usr/include/octave-6.1.0/octave -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-deprecated-declarations -o __ultrwin__.oct /tmp/oct-abIvKQ.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro /usr/bin/mkoctfile --verbose -Wall -Wno-deprecated-declarations cl2bp.o cl2bp_lib.o -o cl2bp.oct g++ -I/usr/include/octave-6.1.0/octave/.. -I/usr/include/octave-6.1.0/octave -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-deprecated-declarations -o cl2bp.oct cl2bp.o cl2bp_lib.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro g++ -I/usr/include/octave-6.1.0/octave/.. -I/usr/include/octave-6.1.0/octave -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-deprecated-declarations -o remez.oct /tmp/oct-iNaLOD.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro g++ -I/usr/include/octave-6.1.0/octave/.. -I/usr/include/octave-6.1.0/octave -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-deprecated-declarations -o sosfilt.oct /tmp/oct-tlB8TK.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro g++ -I/usr/include/octave-6.1.0/octave/.. -I/usr/include/octave-6.1.0/octave -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-deprecated-declarations -o medfilt1.oct /tmp/oct-03TTci.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro g++ -I/usr/include/octave-6.1.0/octave/.. -I/usr/include/octave-6.1.0/octave -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-deprecated-declarations -o upfirdn.oct /tmp/oct-8I2DzZ.o -shared -Wl,-Bsymbolic -Wl,-z,relro -L/usr/lib/x86_64-linux-gnu -Wl,-z,relro make[1]: Leaving directory '/build/octave-signal-Uu6nV8/octave-signal-1.4.1/src' copyfile /build/octave-signal-Uu6nV8/octave-signal-1.4.1/./src/__fwht__.oct /build/octave-signal-Uu6nV8/octave-signal-1.4.1/./src/__ultrwin__.oct /build/octave-signal-Uu6nV8/octave-signal-1.4.1/./src/cl2bp.oct /build/octave-signal-Uu6nV8/octave-signal-1.4.1/./src/medfilt1.oct /build/octave-signal-Uu6nV8/octave-signal-1.4.1/./src/remez.oct /build/octave-signal-Uu6nV8/octave-signal-1.4.1/./src/sosfilt.oct /build/octave-signal-Uu6nV8/octave-signal-1.4.1/./src/upfirdn.oct /build/octave-signal-Uu6nV8/octave-signal-1.4.1/./src/__fwht__.cc-tst /build/octave-signal-Uu6nV8/octave-signal-1.4.1/./src/__ultrwin__.cc-tst /build/octave-signal-Uu6nV8/octave-signal-1.4.1/./src/cl2bp.cc-tst /build/octave-signal-Uu6nV8/octave-signal-1.4.1/./src/medfilt1.cc-tst /build/octave-signal-Uu6nV8/octave-signal-1.4.1/./src/remez.cc-tst /build/octave-signal-Uu6nV8/octave-signal-1.4.1/./src/upfirdn.cc-tst /build/octave-signal-Uu6nV8/octave-signal-1.4.1/./inst/x86_64-pc-linux-gnu-api-v55 For information about changes from previous versions of the signal package, run 'news signal'. chmod: cannot access 'debian/*/usr/lib/*/octave/packages/*/*/*.mex': No such file or directory dh_octave_check -a -O--buildsystem=octave Checking package... Checking m files ... [inst/window.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/window.m ***** assert (window (@bartlett, 16), window ("bartlett", 16)) ***** assert (window (@hamming, 16), window ("hamming", 16)) ***** assert (window (@hanning, 16), window ("hanning", 16)) ***** assert (window (@triang, 16), window ("triang", 16)) ***** error window () ***** error window (1) ***** error window ("hanning") 7 tests, 7 passed, 0 known failure, 0 skipped [inst/fwhm.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/fwhm.m ***** test x=-pi:0.001:pi; y=cos(x); assert( abs(fwhm(x, y) - 2*pi/3) < 0.01 ); ***** test assert( fwhm(-10:10) == 0 && fwhm(ones(1,50)) == 0 ); ***** test x=-20:1:20; y1=-4+zeros(size(x)); y1(4:10)=8; y2=-2+zeros(size(x)); y2(4:11)=2; y3= 2+zeros(size(x)); y3(5:13)=10; assert( max(abs(fwhm(x, [y1;y2;y3]') - [20.0/3,7.5,9.25])) < 0.01 ); ***** test x=1:3; y=[-1,3,-1]; assert(abs(fwhm(x,y)-0.75)<0.001 && abs(fwhm(x,y,'zero')-0.75)<0.001 && abs(fwhm(x,y,'min')-1.0)<0.001); ***** test x=1:3; y=[-1,3,-1]; assert(abs(fwhm(x,y, 'rlevel', 0.1)-1.35)<0.001 && abs(fwhm(x,y,'zero', 'rlevel', 0.1)-1.35)<0.001 && abs(fwhm(x,y,'min', 'rlevel', 0.1)-1.40)<0.001); ***** test x=1:3; y=[-1,3,-1]; assert(abs(fwhm(x,y, 'alevel', 2.5)-0.25)<0.001 && abs(fwhm(x,y,'alevel', -0.5)-1.75)<0.001); ***** test x=-10:10; assert( fwhm(x.*x) == 0 ); ***** test x=-5:5; y=18-x.*x; assert( abs(fwhm(y)-6.0) < 0.001 && abs(fwhm(x,y,'zero')-6.0) < 0.001 && abs(fwhm(x,y,'min')-7.0 ) < 0.001); 8 tests, 8 passed, 0 known failure, 0 skipped [inst/buffer.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/buffer.m ***** error (buffer(1:10, 4.1)) ***** assert (buffer(1:10, 4), reshape([1:10,0,0],[4,3])) ***** assert (buffer(1:10, 4, 1), reshape([0:3,3:6,6:9,9,10,0,0],[4,4])) ***** assert (buffer(1:10, 4, 2), reshape ([0,0:2,1:4,3:6,5:8,7:10],[4,5])) ***** assert (buffer(1:10, 4, 3), [0,0,0:7;0,0:8;0:9;1:10]) ***** error (buffer(1:10, 4, 3.1)) ***** error (buffer(1:10, 4, 4)) ***** assert (buffer(1:10, 4, -1), reshape([1:4,6:9],[4,2])) ***** assert (buffer(1:10, 4, -2), reshape([1:4,7:10],[4,2])) ***** assert (buffer(1:10, 4, -3), reshape([1:4,8:10,0],[4,2])) ***** assert (buffer(1:10, 4, 1, 11), reshape([11,1:3,3:6,6:9,9,10,0,0],[4,4])) ***** error (buffer(1:10, 4, 1, [10,11])) ***** assert (buffer(1:10, 4, 1, 'nodelay'), reshape([1:4,4:7,7:10],[4,3])) ***** error (buffer(1:10, 4, 1, 'badstring')) ***** assert (buffer(1:10, 4, 2,'nodelay'), reshape ([1:4,3:6,5:8,7:10],[4,4])) ***** assert (buffer(1:10, 4, 3, [11,12,13]),[11,12,13,1:7;12,13,1:8;13,1:9;1:10]) ***** assert (buffer(1:10, 4, 3, 'nodelay'),[1:8;2:9;3:10;4:10,0]) ***** assert (buffer(1:11,4,-2,1),reshape([2:5,8:11],4,2)) ***** test [y, z] = buffer(1:12,4); assert (y, reshape(1:12,4,3)); assert (z, zeros (1,0)); ***** test [y, z] = buffer(1:11,4); assert (y, reshape(1:8,4,2)); assert (z, [9, 10, 11]); ***** test [y, z] = buffer([1:12]',4); assert (y, reshape(1:12,4,3)); assert (z, zeros (0,1)); ***** test [y, z] = buffer([1:11]',4); assert (y, reshape(1:8,4,2)); assert (z, [9; 10; 11]); ***** test [y,z,opt] = buffer(1:15,4,-2,1); assert (y, reshape([2:5,8:11],4,2)); assert (z, [14, 15]); assert (opt, 0); ***** test [y,z,opt] = buffer(1:11,4,-2,1); assert (y, reshape([2:5,8:11],4,2)); assert (z, zeros (1,0)); assert (opt, 2); ***** test [y,z,opt] = buffer([1:15]',4,-2,1); assert (y, reshape([2:5,8:11],4,2)); assert (z, [14; 15]); assert (opt, 0); ***** test [y,z,opt] = buffer([1:11]',4,-2,1); assert (y, reshape([2:5,8:11],4,2)); assert (z, zeros (0, 1)); assert (opt, 2); ***** test [y,z,opt] = buffer([1:11],5,2,[-1,0]); assert (y, reshape ([-1:3,2:6,5:9],[5,3])); assert (z, [10, 11]); assert (opt, [8; 9]); ***** test [y,z,opt] = buffer([1:11]',5,2,[-1,0]); assert (y, reshape ([-1:3,2:6,5:9],[5,3])); assert (z, [10; 11]); assert (opt, [8; 9]); ***** test [y, z, opt] = buffer (1:10, 6, 4); assert (y, [0 0 1:2:5; 0 0 2:2:6; 0 1:2:7; 0 2:2:8; 1:2:9; 2:2:10]) assert (z, zeros (1, 0)) assert (opt, [7; 8; 9; 10]) 29 tests, 29 passed, 0 known failure, 0 skipped [inst/cheby1.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/cheby1.m ***** error [a, b] = cheby1 () ***** error [a, b] = cheby1 (1) ***** error [a, b] = cheby1 (1, 2) ***** error [a, b] = cheby1 (1, 2, 3, 4, 5, 6) ***** error [a, b] = cheby1 (.5, 2, .2) ***** error [a, b] = cheby1 (3, 2, .2, "invalid") ***** test cheby1 (3, 4, .5); assert (isrow (ans)); ***** test A = cheby1 (3, 4, .5); assert (isrow (A)); ***** test [A, B] = cheby1 (3, 4, .5); assert (isrow (A)); assert (isrow (B)); ***** test [z, p, g] = cheby1 (3, 4, .5); assert (iscolumn (z)); assert (iscolumn (p)); assert (isscalar (g)); ***** test [a, b, c, d] = cheby1 (3, 4, .5); assert (ismatrix (a)); assert (iscolumn (b)); assert (isrow (c)); assert (isscalar (d)); 11 tests, 11 passed, 0 known failure, 0 skipped [inst/grpdelay.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/grpdelay.m ***** demo % 1 %-------------------------------------------------------------- % From Oppenheim and Schafer, a single zero of radius r=0.9 at % angle pi should have a group delay of about -9 at 1 and 1/2 % at zero and 2*pi. %-------------------------------------------------------------- grpdelay([1 0.9],[],512,'whole',1); hold on; xlabel('Normalized Frequency (cycles/sample)'); stem([0, 0.5, 1],[0.5, -9, 0.5],'*b;target;'); hold off; title ('Zero at z = -0.9'); ***** demo % 2 %-------------------------------------------------------------- % confirm the group delays approximately meet the targets % don't worry that it is not exact, as I have not entered % the exact targets. %-------------------------------------------------------------- b = poly([1/0.9*exp(1i*pi*0.2), 0.9*exp(1i*pi*0.6)]); a = poly([0.9*exp(-1i*pi*0.6), 1/0.9*exp(-1i*pi*0.2)]); grpdelay(b,a,512,'whole',1); hold on; xlabel('Normalized Frequency (cycles/sample)'); stem([0.1, 0.3, 0.7, 0.9], [9, -9, 9, -9],'*b;target;'); hold off; title ('Two Zeros and Two Poles'); ***** demo % 3 %-------------------------------------------------------------- % fir lowpass order 40 with cutoff at w=0.3 and details of % the transition band [.3, .5] %-------------------------------------------------------------- subplot(211); Fs = 8000; % sampling rate Fc = 0.3*Fs/2; % lowpass cut-off frequency nb = 40; b = fir1(nb,2*Fc/Fs); % matlab freq normalization: 1=Fs/2 [H,f] = freqz(b,1,[],1); [gd,f] = grpdelay(b,1,[],1); plot(f,20*log10(abs(H))); title(sprintf('b = fir1(%d,2*%d/%d);',nb,Fc,Fs)); xlabel('Normalized Frequency (cycles/sample)'); ylabel('Amplitude Response (dB)'); grid('on'); subplot(212); del = nb/2; % should equal this plot(f,gd); title(sprintf('Group Delay in Pass-Band (Expect %d samples)',del)); ylabel('Group Delay (samples)'); axis([0, 0.2, del-1, del+1]); ***** demo % 4 %-------------------------------------------------------------- % IIR bandstop filter has delays at [1000, 3000] %-------------------------------------------------------------- Fs = 8000; [b, a] = cheby1(3, 3, 2*[1000, 3000]/Fs, 'stop'); [H,f] = freqz(b,a,[],Fs); [gd,f] = grpdelay(b,a,[],Fs); subplot(211); plot(f,abs(H)); title('[b,a] = cheby1(3, 3, 2*[1000, 3000]/Fs, "stop");'); xlabel('Frequency (Hz)'); ylabel('Amplitude Response'); grid('on'); subplot(212); plot(f,gd); title('[gd,f] = grpdelay(b,a,[],Fs);'); ylabel('Group Delay (samples)'); ***** test % 00 [gd1,w] = grpdelay([0,1]); [gd2,w] = grpdelay([0,1],1); assert(gd1,gd2,10*eps); ***** test % 0A [gd,w] = grpdelay([0,1],1,4); assert(gd,[1;1;1;1]); assert(w,pi/4*[0:3]',10*eps); ***** test % 0B [gd,w] = grpdelay([0,1],1,4,'whole'); assert(gd,[1;1;1;1]); assert(w,pi/2*[0:3]',10*eps); ***** test % 0C [gd,f] = grpdelay([0,1],1,4,0.5); assert(gd,[1;1;1;1]); assert(f,1/16*[0:3]',10*eps); ***** test % 0D [gd,w] = grpdelay([0,1],1,4,'whole',1); assert(gd,[1;1;1;1]); assert(w,1/4*[0:3]',10*eps); ***** test % 0E [gd,f] = grpdelay([1 -0.9j],[],4,'whole',1); gd0 = 0.447513812154696; gdm1 =0.473684210526316; assert(gd,[gd0;-9;gd0;gdm1],20*eps); assert(f,1/4*[0:3]',10*eps); ***** test % 1A: gd= grpdelay(1,[1,.9],2*pi*[0,0.125,0.25,0.375]); assert(gd, [-0.47368;-0.46918;-0.44751;-0.32316],1e-5); ***** test % 1B: gd= grpdelay(1,[1,.9],[0,0.125,0.25,0.375],1); assert(gd, [-0.47368;-0.46918;-0.44751;-0.32316],1e-5); ***** test % 2: gd = grpdelay([1,2],[1,0.5,.9],4); assert(gd,[-0.29167;-0.24218;0.53077;0.40658],1e-5); ***** test % 3 b1=[1,2];a1f=[0.25,0.5,1];a1=fliplr(a1f); % gd1=grpdelay(b1,a1,4); gd=grpdelay(conv(b1,a1f),1,4)-2; assert(gd, [0.095238;0.239175;0.953846;1.759360],1e-5); ***** test % 4 warning ("off", "signal:grpdelay-singularity", "local"); Fs = 8000; [b, a] = cheby1(3, 3, 2*[1000, 3000]/Fs, 'stop'); [h, w] = grpdelay(b, a, 256, 'half', Fs); [h2, w2] = grpdelay(b, a, 512, 'whole', Fs); assert (size(h), size(w)); assert (length(h), 256); assert (size(h2), size(w2)); assert (length(h2), 512); assert (h, h2(1:256)); assert (w, w2(1:256)); ***** test % 5 a = [1 0 0.9]; b = [0.9 0 1]; [dh, wf] = grpdelay(b, a, 512, 'whole'); [da, wa] = grpdelay(1, a, 512, 'whole'); [db, wb] = grpdelay(b, 1, 512, 'whole'); assert(dh,db+da,1e-5); ***** test DR= [1.00000 -0.00000 -3.37219 0.00000 ... 5.45710 -0.00000 -5.24394 0.00000 ... 3.12049 -0.00000 -1.08770 0.00000 0.17404]; N = [-0.0139469 -0.0222376 0.0178631 0.0451737 ... 0.0013962 -0.0259712 0.0016338 0.0165189 ... 0.0115098 0.0095051 0.0043874]; assert (nthargout (1:2, @grpdelay, N, DR, 1024), nthargout (1:2, @grpdelay, N', DR', 1024)); 13 tests, 13 passed, 0 known failure, 0 skipped [inst/bitrevorder.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/bitrevorder.m ***** assert (bitrevorder (0), 0); ***** assert (bitrevorder (0:1), 0:1); ***** assert (bitrevorder ([0:1]'), [0:1]'); ***** assert (bitrevorder (0:7), [0 4 2 6 1 5 3 7]); ***** assert (bitrevorder ([0:7]'), [0 4 2 6 1 5 3 7]'); ***** assert (bitrevorder ([0:7]*i), [0 4 2 6 1 5 3 7]*i); ***** assert (bitrevorder ([0:7]'*i), [0 4 2 6 1 5 3 7]'*i); ***** assert (bitrevorder (0:15), [0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15]); ***** error bitrevorder (); ***** error bitrevorder (1, 2); ***** error bitrevorder ([]); ***** error bitrevorder (0:2); 12 tests, 12 passed, 0 known failure, 0 skipped [inst/flattopwin.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/flattopwin.m ***** assert (flattopwin (1), 1); ***** assert (flattopwin (2), 0.0042 / 4.6402 * ones (2, 1), eps); ***** assert (flattopwin (15), flipud (flattopwin (15)), 10*eps); ***** assert (flattopwin (16), flipud (flattopwin (16)), 10*eps); ***** assert (flattopwin (15), flattopwin (15, "symmetric")); ***** assert (flattopwin (16)(1:15), flattopwin (15, "periodic")); ***** error flattopwin () ***** error flattopwin (0.5) ***** error flattopwin (-1) ***** error flattopwin (ones (1, 4)) ***** error flattopwin (1, 2) ***** error flattopwin (1, 2, 3) ***** error flattopwin (1, "invalid") 13 tests, 13 passed, 0 known failure, 0 skipped [inst/impz.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/impz.m ***** assert (size (impz (1, [1 -1 0.9], 100)), [100 1]) ***** xtest [h, t] = impz (1, [1 -1 0.9], 0:101); assert (size (h), [101 1]) assert (t, 0:101) !!!!! known failure impz: N must be empty or a scalar 2 tests, 1 passed, 1 known failure, 0 skipped [inst/rectpuls.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/rectpuls.m ***** demo fs = 11025; # arbitrary sample rate f0 = 100; # pulse train sample rate w = 0.3/f0; # pulse width 1/10th the distance between pulses x = pulstran (0:1/fs:4/f0, 0:1/f0:4/f0, "rectpuls", w); plot ([0:length(x)-1]*1000/fs, x); xlabel ("Time (ms)"); ylabel ("Amplitude"); title ("Rectangular pulse train of 3 ms pulses at 10 ms intervals"); ***** assert (rectpuls ([]), []) ***** assert (rectpuls ([], 0.1), []) ***** assert (rectpuls (zeros (10, 1)), ones (10, 1)) ***** assert (rectpuls (-1:1), [0, 1, 0]) ***** assert (rectpuls (-5:5, 9), [0, ones(1,9), 0]) ***** assert (rectpuls (0:1/100:0.3, 0.1), rectpuls ([0:1/100:0.3]', 0.1)') ***** error rectpuls () ***** error rectpuls (1, 2, 3) ***** error rectpuls (1, 2j) 9 tests, 9 passed, 0 known failure, 0 skipped [inst/ellip.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/ellip.m ***** demo [n, Ws] = ellipord ([.1 .2], [.01 .4], 1, 90); [b, a] = ellip (5, 1, 90, [.1 .2]); [h, w] = freqz (b, a); plot (w./pi, 20*log10 (abs (h)), ";;") xlabel ("Frequency"); ylabel ("abs(H[w])[dB]"); axis ([0, 1, -100, 0]); hold ("on"); x=ones (1, length (h)); plot (w./pi, x.*-1, ";-1 dB;") plot (w./pi, x.*-90, ";-90 dB;") hold ("off"); ***** error [a, b] = ellip () ***** error [a, b] = ellip (1) ***** error [a, b] = ellip (1, 2) ***** error [a, b] = ellip (1, 2, 3) ***** error [a, b] = ellip (1, 2, 3, 4, 5, 6, 7) ***** error [a, b] = ellip (.5, 2, 40, .2) ***** error [a, b] = ellip (3, 2, 40, .2, "invalid") ***** test ellip (6, 3, 50, .6); assert (isrow (ans)); ***** test A = ellip (6, 3, 50, .6); assert (isrow (A)); ***** test [A, B] = ellip (6, 3, 50, .6); assert (isrow (A)); assert (isrow (B)); ***** test [z, p, g] = ellip (6, 3, 50, .6); assert (iscolumn (z)); assert (iscolumn (p)); assert (isscalar (g)); ***** test [a, b, c, d] = ellip (6, 3, 50, .6); assert (ismatrix (a)); assert (iscolumn (b)); assert (isrow (c)); assert (isscalar (d)); 12 tests, 12 passed, 0 known failure, 0 skipped [inst/unshiftdata.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/unshiftdata.m ***** test x = 1:5; [y, perm, shifts] = shiftdata (x); x2 = unshiftdata (y, perm, shifts); assert (x, x2); ***** test X = fix (rand (3, 3) * 100); [Y, perm, shifts] = shiftdata (X, 2); X2 = unshiftdata (Y, perm, shifts); assert (X, X2); ***** test X = fix (rand (4, 4, 4, 4) * 100); [Y, perm, shifts] = shiftdata (X, 3); X2 = unshiftdata (Y, perm, shifts); assert (X, X2); ***** test X = fix (rand (1, 1, 3, 4) * 100); [Y, perm, shifts] = shiftdata (X); X2 = unshiftdata (Y, perm, shifts); assert (X, X2); ***** error unshiftdata () ***** error unshiftdata (1, 2) ***** error unshiftdata (1, 2, 3, 4) ***** error unshiftdata (1, 2.5) ***** error unshiftdata (1, [], 2.5) ***** error unshiftdata (1, [], []) 10 tests, 10 passed, 0 known failure, 0 skipped [inst/cheby2.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/cheby2.m ***** error [a, b] = cheby2 () ***** error [a, b] = cheby2 (1) ***** error [a, b] = cheby2 (1, 2) ***** error [a, b] = cheby2 (1, 2, 3, 4, 5, 6) ***** error [a, b] = cheby2 (.5, 40, .2) ***** error [a, b] = cheby2 (3, 40, .2, "invalid") ***** test cheby2 (3, 4, .5); assert (isrow (ans)); ***** test A = cheby2 (3, 4, .5); assert (isrow (A)); ***** test [A, B] = cheby2 (3, 4, .5); assert (isrow (A)); assert (isrow (B)); ***** test [z, p, g] = cheby2 (3, 4, .5); assert (iscolumn (z)); assert (iscolumn (p)); assert (isscalar (g)); ***** test [a, b, c, d] = cheby2 (3, 4, .5); assert (ismatrix (a)); assert (iscolumn (b)); assert (isrow (c)); assert (isscalar (d)); 11 tests, 11 passed, 0 known failure, 0 skipped [inst/idst.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/idst.m ***** test x = log(gausswin(32)); assert(x, idst(dst(x)), 100*eps) 1 test, 1 passed, 0 known failure, 0 skipped [inst/zp2sos.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/zp2sos.m ***** test B=[1 0 0 0 0 1]; A=[1 0 0 0 0 .9]; [z,p,k] = tf2zp(B,A); [sos,g] = zp2sos(z,p,k); [Bh,Ah] = sos2tf(sos,g); assert({Bh,Ah},{B,A},100*eps); 1 test, 1 passed, 0 known failure, 0 skipped [inst/fir1.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/fir1.m ***** demo freqz(fir1(40,0.3)); ***** demo freqz(fir1(15,[0.2, 0.5], 'stop')); # note the zero-crossing at 0.1 ***** demo freqz(fir1(15,[0.2, 0.5], 'stop', 'noscale')); ***** assert(fir1(2, .5, 'low', @hanning, 'scale'), [0 1 0]); ***** assert(fir1(2, .5, 'low', "hanning", 'scale'), [0 1 0]); ***** assert(fir1(2, .5, 'low', hanning(3), 'scale'), [0 1 0]); ***** assert(fir1(10,.5,'noscale'), fir1(10,.5,'low','hamming','noscale')); ***** assert(fir1(10,.5,'high'), fir1(10,.5,'high','hamming','scale')); ***** assert(fir1(10,.5,'boxcar'), fir1(10,.5,'low','boxcar','scale')); ***** assert(fir1(10,.5,'hanning','scale'), fir1(10,.5,'scale','hanning','low')); ***** assert(fir1(10,.5,'haNNing','NOscale'), fir1(10,.5,'noscale','Hanning','LOW')); ***** assert(fir1(10,.5,'boxcar',[]), fir1(10,.5,'boxcar')); ***** test b = fir1 (30, 0.3); h = abs (freqz (b, 1, [0, 0.3, 1], 2)); assert (h(1), 1, 1e-3) assert (all (h(2:3) <= [1/sqrt(2), 3e-3])) ***** test b = fir1 (30, 0.7, "high"); h = abs (freqz (b, 1, [0, 0.7, 1], 2)); assert (h(3), 1, 1e-3) assert (all (h(1:2) <= [3e-3, 1/sqrt(2)])) ***** test b = fir1 (30, [0.3, 0.7]); h = abs (freqz (b, 1, [0, 0.3, 0.5, 0.7, 1], 2)); assert (h(3), 1, 1e-3) assert (all (h([1:2, 4:5]) <= [3e-3, 1/sqrt(2), 1/sqrt(2), 3e-3])) ***** test b = fir1 (50, [0.3, 0.7], "stop"); h = abs (freqz (b, 1, [0, 0.3, 0.5, 0.7, 1], 2)); assert (h(1), 1, 1e-3) assert (h(5), 1, 1e-3) assert (all (h(2:4) <= [1/sqrt(2), 3e-3, 1/sqrt(2)])) 13 tests, 13 passed, 0 known failure, 0 skipped [inst/kaiser.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/kaiser.m ***** demo % use demo("kaiserord"); ***** assert (kaiser (1), 1) ***** error kaiser () ***** error kaiser (0.5) ***** error kaiser (-1) ***** error kaiser (ones (1, 4)) ***** error kaiser (1, 2, 3) 6 tests, 6 passed, 0 known failure, 0 skipped [inst/pulstran.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/pulstran.m ***** error pulstran ***** error pulstran(1,2,3,4,5,6) ***** ## parameter size and shape checking ***** shared t,d t = 0:0.01:1; d=0:0.1:1; ***** assert (isempty(pulstran([], d, 'sin'))); ***** assert (pulstran(t, [], 'sin'), zeros(size(t))); ***** assert (isempty(pulstran([], d, boxcar(5)))); ***** assert (pulstran(t, [], boxcar(5)), zeros(size(t))); ***** assert (size(pulstran(t,d,'sin')), size(t)); ***** assert (size(pulstran(t,d','sin')), size(t)); ***** assert (size(pulstran(t',d,'sin')), size(t')); ***** assert (size(pulstran(t,d','sin')), size(t)); ***** demo fs = 11025; # arbitrary sample rate f0 = 100; # pulse train sample rate w = 0.003; # pulse width of 3 milliseconds t = 0:1/fs:0.1; d=0:1/f0:0.1; # define sample times and pulse times a = hanning(length(d)); # define pulse amplitudes subplot(221); x = pulstran(t', d', 'rectpuls', w); plot([0:length(x)-1]*1000/fs, x); hold on; plot(d*1000,ones(size(d)),'g*;pulse;'); hold off; ylabel("amplitude"); xlabel("time (ms)"); title("rectpuls"); subplot(223); x = pulstran(f0*t, [f0*d', a], 'sinc'); plot([0:length(x)-1]*1000/fs, x); hold on; plot(d*1000,a,'g*;pulse;'); hold off; ylabel("amplitude"); xlabel("time (ms)"); title("sinc => band limited interpolation"); subplot(222); pulse = boxcar(30); # pulse width of 3 ms at 10 kHz x = pulstran(t, d', pulse, 10000); plot([0:length(x)-1]*1000/fs, x); hold on; plot(d*1000,ones(size(d)),'g*;pulse;'); hold off; ylabel("amplitude"); xlabel("time (ms)"); title("interpolated boxcar"); subplot(224); pulse = sin(2*pi*[0:0.0001:w]/w).*[w:-0.0001:0]; x = pulstran(t', [d', a], pulse', 10000); plot([0:length(x)-1]*1000/fs, x); hold on; plot(d*1000,a*w,'g*;pulse;'); hold off; title(""); ylabel("amplitude"); xlabel("time (ms)"); title("interpolated asymmetric sin"); %---------------------------------------------------------- % Should see (1) rectangular pulses centered on *, % (2) rectangular pulses to the right of *, % (3) smooth interpolation between the *'s, and % (4) asymmetric sines to the right of * 10 tests, 10 passed, 0 known failure, 0 skipped [inst/gausswin.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/gausswin.m ***** assert (gausswin (1), 1) ***** assert (gausswin (2), [exp(-3.125); exp(-3.125)]) ***** assert (gausswin (3), [exp(-3.125); 1; exp(-3.125)]) ***** error gausswin () ***** error gausswin (0.5) ***** error gausswin (-1) ***** error gausswin (ones (1, 4)) ***** error gausswin (1, 2, 3) 8 tests, 8 passed, 0 known failure, 0 skipped [inst/bohmanwin.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/bohmanwin.m ***** assert (bohmanwin (1), 1) ***** assert (bohmanwin (2), zeros (2, 1)) ***** error bohmanwin () ***** error bohmanwin (0.5) ***** error bohmanwin (-1) ***** error bohmanwin (ones (1, 4)) ***** error bohmanwin (1, 2) 7 tests, 7 passed, 0 known failure, 0 skipped [inst/udecode.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/udecode.m ***** test u = [0 0 0 0 0 1 2 3 3 3 3 3 3]; y = udecode(u, 2); assert(y, [-1 -1 -1 -1 -1 -0.5 0 0.5 0.5 0.5 0.5 0.5 0.5]); ***** test u = [0 1 2 3 4 5 6 7 8 9 10]; y = udecode(u, 2, 1, "saturate"); assert(y, [-1 -0.5 0 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5]); ***** test u = [0 1 2 3 4 5 6 7 8 9 10]; y = udecode(u, 2, 1, "wrap"); assert(y, [-1 -0.5 0 0.5 -1 -0.5 0 0.5 -1 -0.5 0]); ***** test u = [-4 -3 -2 -1 0 1 2 3]; y = udecode(u, 3, 2); assert(y, [-2, -1.5 -1 -0.5 0 0.5 1 1.5]); ***** test u = [-7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7]; y = udecode(u, 3, 2, "saturate"); assert(y, [-2 -2 -2 -2 -1.5 -1 -0.5 0 0.5 1 1.5 1.5 1.5 1.5 1.5]); ***** test u = [-7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7]; y = udecode(u, 3, 2, "wrap"); assert(y, [0.5 1 1.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 -2 -1.5 -1 -0.5]); ***** error udecode () ***** error udecode (1) ***** error udecode (1, 2, 3, 4, 5) ***** error udecode (1.5) ***** error udecode (1, 100) ***** error udecode (1, 4, 0) ***** error udecode (1, 4, -1) ***** error udecode (1, 4, 2, "invalid") 14 tests, 14 passed, 0 known failure, 0 skipped [inst/ifht.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/ifht.m ***** assert(ifht(fht(1:4)),[1 2 3 4]) 1 test, 1 passed, 0 known failure, 0 skipped [inst/fir2.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/fir2.m ***** xtest f = [0 0.6 0.6 1]; m = [1 1 0 0]; b9 = fir2 (30, f, m, 9); b16 = fir2 (30, f, m, 16); b17 = fir2 (30, f, m, 17); b32 = fir2 (30, f, m, 32); assert ( isequal (b9, b16)) assert ( isequal (b17, b32)) assert (~isequal (b16, b17)) ***** test f = [0, 0.7, 0.7, 1]; m = [0, 0, 1, 1]; b = fir2 (50, f, m); h = abs (freqz (b, 1, [0, 0.7, 1], 2)); assert (h(1) <= 3e-3) assert (h(2) <= 1/sqrt (2)) assert (h(3), 1, 2e-3) ***** test f = [0, 0.25, 0.25, 0.75, 0.75, 1]; m = [0, 0, 1, 1, 0, 0]; b = fir2 (50, f, m); h = abs (freqz (b, 1, [0, 0.25, 0.5, 0.75, 1], 2)); assert (h(1) <= 3e-3) assert (h(2) <= 1/sqrt (2)) assert (h(3), 1, 2e-3) assert (h(4) <= 1/sqrt (2)) assert (h(5) <= 3e-3) ***** test f = [0, 0.45, 0.45, 0.55, 0.55, 1]; m = [1, 1, 0, 0, 1, 1]; b = fir2 (50, f, m); h = abs (freqz (b, 1, [0, 0.45, 0.5, 0.55, 1], 2)); assert (h(1), 1, 2e-3) assert (h(2) <= 1/sqrt (2)) assert (h(3) <= 1e-1) assert (h(4) <= 1/sqrt (2)) assert (h(5), 1, 2e-3) ***** demo f=[0, 0.3, 0.3, 0.6, 0.6, 1]; m=[0, 0, 1, 1/2, 0, 0]; [h, w] = freqz(fir2(100,f,m)); subplot(121); plot(f,m,';target response;',w/pi,abs(h),';filter response;'); subplot(122); plot(f,20*log10(m+1e-5),';target response (dB);',... w/pi,20*log10(abs(h)),';filter response (dB);'); ***** demo f=[0, 0.3, 0.3, 0.6, 0.6, 1]; m=[0, 0, 1, 1/2, 0, 0]; plot(f,20*log10(m+1e-5),';target response;'); hold on; [h, w] = freqz(fir2(50,f,m,512,0)); plot(w/pi,20*log10(abs(h)),';filter response (ramp=0);'); [h, w] = freqz(fir2(50,f,m,512,25.6)); plot(w/pi,20*log10(abs(h)),';filter response (ramp=pi/20 rad);'); [h, w] = freqz(fir2(50,f,m,512,51.2)); plot(w/pi,20*log10(abs(h)),';filter response (ramp=pi/10 rad);'); hold off; ***** demo % Classical Jakes spectrum % X represents the normalized frequency from 0 % to the maximum Doppler frequency asymptote = 2/3; X = linspace(0,asymptote-0.0001,200); Y = (1 - (X./asymptote).^2).^(-1/4); % The target frequency response is 0 after the asymptote X = [X, asymptote, 1]; Y = [Y, 0, 0]; plot(X,Y,'b;Target spectrum;'); hold on; [H,F]=freqz(fir2(20, X, Y)); plot(F/pi,abs(H),'c;Synthesized spectrum (n=20);'); [H,F]=freqz(fir2(50, X, Y)); plot(F/pi,abs(H),'r;Synthesized spectrum (n=50);'); [H,F]=freqz(fir2(200, X, Y)); plot(F/pi,abs(H),'g;Synthesized spectrum (n=200);'); hold off; title('Theoretical/Synthesized CLASS spectrum'); xlabel('Normalized frequency (Fs=2)'); ylabel('Magnitude'); 4 tests, 4 passed, 0 known failure, 0 skipped [inst/gauspuls.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/gauspuls.m ***** demo fs = 11025; # arbitrary sample rate f0 = 100; # pulse train sample rate x = pulstran (0:1/fs:4/f0, 0:1/f0:4/f0, "gauspuls"); plot ([0:length(x)-1]*1000/fs, x); xlabel ("Time (ms)"); ylabel ("Amplitude"); title ("Gaussian pulse train at 10 ms intervals"); ***** assert (gauspuls ([]), []) ***** assert (gauspuls (zeros (10, 1)), ones (10, 1)) ***** assert (gauspuls (-1:1), [0, 1, 0]) ***** assert (gauspuls (0:1/100:0.3, 0.1), gauspuls ([0:1/100:0.3]', 0.1)') ***** error gauspuls () ***** error gauspuls (1, 2, 3, 4) ***** error gauspuls (1, -1) ***** error gauspuls (1, 2j) ***** error gauspuls (1, 1e3, 0) 9 tests, 9 passed, 0 known failure, 0 skipped [inst/resample.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/resample.m ***** test N=512; p=3; q=5; r=p/q; NN=ceil(r*N); t=0:N-1; tt=0:NN-1; err=zeros(N/2,1); for n = 0:N/2-1, phi0=2*pi*rand; f0=n/N; x=sin(2*pi*f0*t' + phi0); [y,h]=resample(x,p,q); xx=sin(2*pi*f0/r*tt' + phi0); t0=ceil((length(h)-1)/2/q); idx=t0+1:NN-t0; err(n+1)=max(abs(y(idx)-xx(idx))); endfor; rolloff=.1; rejection=10^-3; idx_inband=1:ceil((1-rolloff/2)*r*N/2)-1; assert(max(err(idx_inband))>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/pow2db.m ***** shared pow pow = [0, 10, 20, 60, 100]; ***** assert (pow2db (pow), [-Inf, 10.000, 13.010, 17.782, 20.000], 0.01) ***** assert (pow2db (pow'), [-Inf; 10.000; 13.010; 17.782; 20.000], 0.01) ***** error pow2db () ***** error pow2db (1, 2) ***** error pow2db (-5) ***** error pow2db ([-5 7]) 6 tests, 6 passed, 0 known failure, 0 skipped [inst/chirp.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/chirp.m ***** demo t = 0:0.001:5; y = chirp (t); specgram (y, 256, 1000); %------------------------------------------------------------ % Shows linear sweep of 100 Hz/sec starting at zero for 5 sec % since the sample rate is 1000 Hz, this should be a diagonal % from bottom left to top right. ***** demo t = -2:0.001:15; y = chirp (t, 400, 10, 100, "quadratic"); [S, f, t] = specgram (y, 256, 1000); t = t - 2; imagesc(t, f, 20 * log10 (abs (S))); set (gca (), "ydir", "normal"); xlabel ("Time"); ylabel ("Frequency"); %------------------------------------------------------------ % Shows a quadratic chirp of 400 Hz at t=0 and 100 Hz at t=10 % Time goes from -2 to 15 seconds. ***** demo t = 0:1/8000:5; y = chirp (t, 200, 2, 500, "logarithmic"); specgram (y, 256, 8000); %------------------------------------------------------------- % Shows a logarithmic chirp of 200 Hz at t=0 and 500 Hz at t=2 % Time goes from 0 to 5 seconds at 8000 Hz. ***** shared t t = (0:5000) ./ 1000; ***** test y1 = chirp (t); y2 = chirp (t, 0, 1, 100, "linear", 0); assert (y2, y1) ***** test y1 = chirp (t, [], [], [], "li"); y2 = chirp (t, 0, 1, 100, "linear", 0); assert (y2, y1) ***** test y1 = chirp (t, [], [], [], "q"); y2 = chirp (t, 0, 1, 100, "quadratic", 0); assert (y2, y1) ***** test y1 = chirp (t, [], [], [], "lo"); y2 = chirp (t, 1e-6, 1, 100, "logarithmic", 0); assert (y2, y1) ***** error chirp () ***** error chirp (1, 2, 3, 4, 5, 6, 7) ***** error chirp (0, [], [], [], "l") ***** error chirp (0, [], [], [], "foo") 8 tests, 8 passed, 0 known failure, 0 skipped [inst/tripuls.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/tripuls.m ***** demo fs = 11025; # arbitrary sample rate f0 = 100; # pulse train sample rate w = 0.5/f0; # pulse width 1/10th the distance between pulses x = pulstran (0:1/fs:4/f0, 0:1/f0:4/f0, "tripuls", w); plot ([0:length(x)-1]*1000/fs, x); xlabel ("Time (ms)"); ylabel ("Amplitude"); title ("Triangular pulse train of 5 ms pulses at 10 ms intervals"); ***** demo fs = 11025; # arbitrary sample rate f0 = 100; # pulse train sample rate w = 0.5/f0; # pulse width 1/10th the distance between pulses x = pulstran (0:1/fs:4/f0, 0:1/f0:4/f0, "tripuls", w, -0.5); plot ([0:length(x)-1]*1000/fs, x); xlabel ("Time (ms)"); ylabel ("Amplitude"); title ("Triangular pulse train of 5 ms pulses at 10 ms intervals, skew = -0.5"); ***** assert (tripuls ([]), []) ***** assert (tripuls ([], 0.1), []) ***** assert (tripuls (zeros (10, 1)), ones (10, 1)) ***** assert (tripuls (-1:1), [0, 1, 0]) ***** assert (tripuls (-5:5, 9), [0, 1, 3, 5, 7, 9, 7, 5, 3, 1, 0] / 9) ***** assert (tripuls (0:1/100:0.3, 0.1), tripuls ([0:1/100:0.3]', 0.1)') ***** error tripuls () ***** error tripuls (1, 2, 3, 4) ***** error tripuls (1, 2j) ***** error tripuls (1, 2, 2) ***** error tripuls (1, 2, -2) 11 tests, 11 passed, 0 known failure, 0 skipped [inst/triang.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/triang.m ***** assert (triang (1), 1) ***** assert (triang (2), [1; 1]/2) ***** assert (triang (3), [1; 2; 1]/2) ***** assert (triang (4), [1; 3; 3; 1]/4) ***** test x = bartlett (5); assert (triang (3), x(2:4)); ***** error triang () ***** error triang (0.5) ***** error triang (-1) ***** error triang (ones (1, 4)) ***** error triang (1, 2) ***** demo subplot(221); n=7; k=(n-1)/2; t=[-k:0.1:k]/(k+1); plot(t,1-abs(t),";continuous;",[-k:k]/(k+1),triang(n),"g*;discrete;"); axis([-1, 1, 0, 1.3]); grid("on"); title("comparison with continuous for odd n"); subplot(222); n=8; k=(n-1)/2; t=[-k:0.1:k]/(k+1/2); plot(t,1+1/n-abs(t),";continuous;",[-k:k]/(k+1/2),triang(n),"g*;discrete;"); axis([-1, 1, 0, 1.3]); grid("on"); title("note the higher peak for even n"); subplot(223); n=7; plot(0:n+1,bartlett(n+2),"g-*;bartlett;",triang(n),"r-+;triang;"); axis; grid("off"); title("n odd, triang(n)==bartlett(n+2)"); subplot(224); n=8; plot(0:n+1,bartlett(n+2),"g-*;bartlett;",triang(n),"r-+;triang;"); axis; grid("off"); title("n even, triang(n)!=bartlett(n+2)"); 10 tests, 10 passed, 0 known failure, 0 skipped [inst/nuttallwin.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/nuttallwin.m ***** assert (nuttallwin (1), 1) ***** assert (nuttallwin (2), zeros (2, 1), eps) ***** assert (nuttallwin (15), flipud (nuttallwin (15)), 10*eps); ***** assert (nuttallwin (16), flipud (nuttallwin (16)), 10*eps); ***** assert (nuttallwin (15), nuttallwin (15, "symmetric")); ***** assert (nuttallwin (16)(1:15), nuttallwin (15, "periodic")); ***** error nuttallwin () ***** error nuttallwin (0.5) ***** error nuttallwin (-1) ***** error nuttallwin (ones (1, 4)) ***** error nuttallwin (1, 2) ***** error nuttallwin (1, "invalid") 12 tests, 12 passed, 0 known failure, 0 skipped [inst/parzenwin.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/parzenwin.m ***** assert (parzenwin (1), 1) ***** assert (parzenwin (2), 0.25 * ones (2, 1)) ***** error parzenwin () ***** error parzenwin (0.5) ***** error parzenwin (-1) ***** error parzenwin (ones (1, 4)) ***** error parzenwin (1, 2) 7 tests, 7 passed, 0 known failure, 0 skipped [inst/cheb2ord.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/cheb2ord.m ***** demo fs = 44100; fpass = 4000; fstop = 10988; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby2 (n, Rstop, Wn_p); SYS = tf (b, a, 1 / fs); f = (0:fs/2)'; W = f * (2 * pi / fs); [H, P] = bode (SYS, 2 * pi * f); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev low-pass Typ II : matching pass band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on; plot (outline_lp_pass_x, outline_lp_pass_y, "m"); plot (outline_lp_stop_x, outline_lp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fpass = 4000; fstop = 10988; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby2 (n, Rstop, Wn_s); SYS = tf (b, a, 1 / fs); f = (0:fs/2)'; W = f * (2 * pi / fs); [H, P] = bode (SYS, 2 * pi * f); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev low-pass Typ II : matching stop band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on; plot (outline_lp_pass_x, outline_lp_pass_y, "m"); plot (outline_lp_stop_x, outline_lp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fstop = 4000; fpass = 10988; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby2 (n, Rstop, Wn_p, "high"); f = (0:fs/2)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev high-pass Typ II : matching pass band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [min(f) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on; plot (outline_hp_pass_x, outline_hp_pass_y, "m"); plot (outline_hp_stop_x, outline_hp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fstop = 4000; fpass = 10988; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby2 (n, Rstop, Wn_s, "high"); f = (0:fs/2)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev high-pass Typ II : matching stop band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [min(f) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on; plot (outline_hp_pass_x, outline_hp_pass_y, "m"); plot (outline_hp_stop_x, outline_hp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fpass = [9500 9750]; fstop = [8500, 10052]; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby2 (n, Rstop, Wn_p); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev band-pass Typ II : matching pass band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fs = 44100; fpass = [9500 9750]; fstop = [8500, 10052]; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby2 (n, Rstop, Wn_s); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev band-pass Typ II : matching stop band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fs = 44100; fpass = [9500 9750]; fstop = [9182 12000]; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby2 (n, Rstop, Wn_p); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev band-pass Typ II : matching pass band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fs = 44100; fpass = [9500 9750]; fstop = [9182 12000]; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby2 (n, Rstop, Wn_s); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev band-pass Typ II : matching stop band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fs = 44100; fstop = [9875, 10126.5823]; fpass = [8500, 10834]; Rpass = 0.5; Rstop = 40; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby2 (n, Rstop, Wn_p, "stop"); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); Ampl = abs (H); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev notch Typ II : matching pass band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fstop = [9875, 10126.5823]; fpass = [8500, 10834]; Rpass = 0.5; Rstop = 40; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby2 (n, Rstop, Wn_s, "stop"); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); Ampl = abs (H); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev notch Typ II : matching stop band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fstop = [9875, 10126.5823]; fpass = [9182, 12000]; Rpass = 0.5; Rstop = 40; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby2 (n, Rstop, Wn_p, "stop"); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); Ampl = abs (H); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev notch Typ II : matching pass band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fstop = [9875, 10126.5823]; fpass = [9182, 12000]; Rpass = 0.5; Rstop = 40; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby2 (n, Rstop, Wn_s, "stop"); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); Ampl = abs (H); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev notch Typ II : matching stop band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fpass = 4000; fstop = 13584; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby2 (n, Rstop, Wn_p, "s"); f = 1000:10:100000; W = 2 * pi * f; H = freqs (b, a, W); semilogx (f, 20 * log10 (abs (H))); title ("Analog Chebyshev low-pass Typ II : matching pass band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on; plot (outline_lp_pass_x, outline_lp_pass_y, "m"); plot (outline_lp_stop_x, outline_lp_stop_y, "m"); ylim ([-80, 0]); ***** demo fpass = 4000; fstop = 13584; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby2 (n, Rstop, Wn_s, "s"); f = 1000:10:100000; W = 2 * pi * f; H = freqs (b, a, W); semilogx (f, 20 * log10 (abs (H))); title ("Analog Chebyshev low-pass Typ II : matching stop band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on; plot (outline_lp_pass_x, outline_lp_pass_y, "m"); plot (outline_lp_stop_x, outline_lp_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = 4000; fpass = 13584; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby2 (n, Rstop, Wn_p, "high", "s"); f = 1000:10:100000; W = 2 * pi * f; H = freqs (b, a, W); semilogx (f, 20 * log10 (abs (H))); title ("Analog Chebyshev high-pass Typ II : matching pass band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on; plot (outline_hp_pass_x, outline_hp_pass_y, "m"); plot (outline_hp_stop_x, outline_hp_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = 4000; fpass = 13584; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby2 (n, Rstop, Wn_s, "high", "s"); f = 1000:10:100000; W = 2 * pi * f; H = freqs (b, a, W); semilogx (f, 20 * log10 (abs (H))); title ("Analog Chebyshev high-pass Typ II : matching stop band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on; plot (outline_hp_pass_x, outline_hp_pass_y, "m"); plot (outline_hp_stop_x, outline_hp_stop_y, "m"); ylim ([-80, 0]); ***** demo fpass = [9875, 10126.5823]; fstop = [9000, 10437]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby2 (n, Rstop, Wn_p, "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev band-pass Typ II : matching pass band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fpass = [9875, 10126.5823]; fstop = [9000, 10437]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby2 (n, Rstop, Wn_s, "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev band-pass Typ II : matching stop band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fpass = [9875, 10126.5823]; fstop = [9581, 12000]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby2 (n, Rstop, Wn_p, "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev band-pass Typ II : matching pass band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fpass = [9875, 10126.5823]; fstop = [9581, 12000]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby2 (n, Rstop, Wn_s, "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev band-pass Typ II : matching stop band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fstop = [9875, 10126.5823]; fpass = [9000, 10437]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby2 (n, Rstop, Wn_p, "stop", "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev notch Typ II : matching pass band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = [9875, 10126.5823]; fpass = [9000, 10437]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby2 (n, Rstop, Wn_s, "stop", "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev notch Typ II : matching stop band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = [9875, 10126.5823]; fpass = [9581 12000]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby2 (n, Rstop, Wn_p, "stop", "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev notch Typ II : matching pass band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = [9875, 10126.5823]; fpass = [9581 12000]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb2ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby2 (n, Rstop, Wn_s, "stop", "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev notch Typ II : matching stop band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** test # Analog band-pass [n, Wn_p, Wn_s] = cheb2ord (2 * pi * [9875, 10126.5823], ... 2 * pi * [9000, 10437], 1, 26, "s"); assert (n, 3); assert (round (Wn_p), [61074, 64640]); assert (round (Wn_s), [60201, 65578]); ***** test # Analog band-pass [n, Wn_p, Wn_s] = cheb2ord (2 * pi * [9875, 10126.5823], ... 2 * pi * [9581 12000], 1, 26, "s"); assert (n, 3); assert (round (Wn_p), [61074, 64640]); assert (round (Wn_s), [60199, 65580]); ***** test # Analog high-pass [n, Wn_p, Wn_s] = cheb2ord (2 * pi * 13584, 2 * pi * 4000, 1, 26, "s"); assert (n, 3); assert (round (Wn_p), 37832); assert (round (Wn_s), 25133); ***** test # Analog low-pass [n, Wn_p, Wn_s] = cheb2ord (2 * pi * 4000, 2 * pi * 13584, 1, 26, "s"); assert (n, 3); assert (round (Wn_p), 56700); assert (round (Wn_s), 85351); ***** test # Analog notch (narrow band-stop) [n, Wn_p, Wn_s] = cheb2ord (2 * pi * [9000, 10437], ... 2 * pi * [9875, 10126.5823], 1, 26, "s"); assert (n, 3); assert (round (Wn_p), [61652, 64035]); assert (round (Wn_s), [62046, 63627]); ***** test # Analog notch (narrow band-stop) [n, Wn_p, Wn_s] = cheb2ord (2 * pi * [9581, 12000], ... 2 * pi * [9875, 10126.5823], 1, 26, "s"); assert (n, 3); assert (round (Wn_p), [61651, 64036]); assert (round (Wn_s), [62046, 63627]); ***** test # Digital band-pass fs = 44100; [n, Wn_p, Wn_s] = cheb2ord (2 / fs * [9500, 9750], ... 2 / fs * [8500, 10052], 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), [9344, 9908]); assert (round (Wn_s), [9203, 10052]); ***** test # Digital band-pass fs = 44100; [n, Wn_p, Wn_s] = cheb2ord (2 / fs * [9500, 9750], ... 2 / fs * [9182, 12000], 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), [9344, 9908]); assert (round (Wn_s), [9182, 10073]); ***** test # Digital high-pass fs = 44100; [n, Wn_p, Wn_s] = cheb2ord (2 / fs * 10988, 2 / fs * 4000, 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), 5829); assert (round (Wn_s), 4000); ***** test # Digital low-pass fs = 44100; [n, Wn_p, Wn_s] = cheb2ord (2 / fs * 4000, 2 / fs * 10988, 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), 8197); assert (round (Wn_s), 10988); ***** test # Digital notch (narrow band-stop) fs = 44100; [n, Wn_p, Wn_s] = cheb2ord (2 / fs * [8500, 10834], ... 2 / fs * [9875, 10126.5823], 0.5, 40); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), [9804, 10198]); assert (round (Wn_s), [9875, 10127]); ***** test # Digital notch (narrow band-stop) fs = 44100; [n, Wn_p, Wn_s] = cheb2ord (2 / fs * [9182 12000], ... 2 / fs * [9875, 10126.5823], 0.5, 40); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), [9804, 10198]); assert (round (Wn_s), [9875, 10127]); ***** error cheb2ord () ***** error cheb2ord (.1) ***** error cheb2ord (.1, .2) ***** error cheb2ord (.1, .2, 3) ***** error cheb2ord ([.1 .1], [.2 .2], 3, 4) ***** error cheb2ord ([.1 .2], [.5 .6], 3, 4) ***** error cheb2ord ([.1 .5], [.2 .6], 3, 4) 19 tests, 19 passed, 0 known failure, 0 skipped [inst/impinvar.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/impinvar.m ***** function err = stozerr(bs,as,fs) # number of time steps n=100; # impulse invariant transform to z-domain [bz az]=impinvar(bs,as,fs); # create sys object of transfer function s=tf(bs,as); # calculate impulse response of continuous time system # at discrete time intervals 1/fs ys=impulse(s,(n-1)/fs,1/fs)'; # impulse response of discrete time system yz=filter(bz,az,[1 zeros(1,n-1)]); # find rms error err=sqrt(sum((yz*fs.-ys).^2)/length(ys)); endfunction ***** assert(stozerr([1],[1 1],100),0,0.0001); ***** assert(stozerr([1],[1 2 1],100),0,0.0001); ***** assert(stozerr([1 1],[1 2 1],100),0,0.0002); ***** assert(stozerr([1],[1 3 3 1],100),0,0.0001); ***** assert(stozerr([1 1],[1 3 3 1],100),0,0.0001); ***** assert(stozerr([1 1 1],[1 3 3 1],100),0,0.0001); ***** assert(stozerr([1],[1 0 1],100),0,0.0001); ***** assert(stozerr([1 1],[1 0 1],100),0,0.0001); ***** assert(stozerr([1],[1 0 2 0 1],100),0,0.0001); ***** assert(stozerr([1 1],[1 0 2 0 1],100),0,0.0001); ***** assert(stozerr([1 1 1],[1 0 2 0 1],100),0,0.0001); ***** assert(stozerr([1 1 1 1],[1 0 2 0 1],100),0,0.0001); 12 tests, 12 passed, 0 known failure, 0 skipped [inst/residuez.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/residuez.m ***** test B=[1 -2 1]; A=[1 -1]; [r,p,f,m] = residuez(B,A); assert(r,0,100*eps); assert(p,1,100*eps); assert(f,[1 -1],100*eps); assert(m,1,100*eps); ***** test B=1; A=[1 -1j]; [r,p,f,m] = residuez(B,A); assert(r,1,100*eps); assert(p,1j,100*eps); assert(f,[],100*eps); assert(m,1,100*eps); ***** test B=1; A=[1 -1 .25]; [r,p,f,m] = residuez(B,A); [rs,is] = sort(r); assert(rs,[0;1],1e-7); assert(p(is),[0.5;0.5],1e-8); assert(f,[],100*eps); assert(m(is),[1;2],100*eps); ***** test B=1; A=[1 -0.75 .125]; [r,p,f,m] = residuez(B,A); [rs,is] = sort(r); assert(rs,[-1;2],100*eps); assert(p(is),[0.25;0.5],100*eps); assert(f,[],100*eps); assert(m(is),[1;1],100*eps); ***** test B=[1,6,2]; A=[1,-2,1]; [r,p,f,m] = residuez(B,A); [rs,is] = sort(r); assert(rs,[-10;9],1e-7); assert(p(is),[1;1],1e-8); assert(f,[2],100*eps); assert(m(is),[1;2],100*eps); ***** test B=[6,2]; A=[1,-2,1]; [r,p,f,m] = residuez(B,A); [rs,is] = sort(r); assert(rs,[-2;8],1e-7); assert(p(is),[1;1],1e-8); assert(f,[],100*eps); assert(m(is),[1;2],100*eps); ***** test B=[1,6,6,2]; A=[1,-2,1]; [r,p,f,m] = residuez(B,A); [rs,is] = sort(r); assert(rs,[-24;15],2e-7); assert(p(is),[1;1],1e-8); assert(f,[10,2],100*eps); assert(m(is),[1;2],100*eps); ***** test B=[1,6,6,2]; A=[1,-(2+j),(1+2j),-j]; [r,p,f,m] = residuez(B,A); [rs,is] = sort(r); assert(rs,[-2+2.5j;7.5+7.5j;-4.5-12j],1E-6); assert(p(is),[1j;1;1],1E-6); assert(f,-2j,1E-6); assert(m(is),[1;2;1],1E-6); ***** test B=[1,0,1]; A=[1,0,0,0,0,-1]; [r,p,f,m] = residuez(B,A); [as,is] = sort(angle(p)); rise = [ ... 0.26180339887499 - 0.19021130325903i; ... 0.03819660112501 + 0.11755705045849i; ... 0.4; ... 0.03819660112501 - 0.11755705045849i; ... 0.26180339887499 + 0.19021130325903i;]; pise = [ ... -0.80901699437495 - 0.58778525229247i; ... 0.30901699437495 - 0.95105651629515i; ... 1; ... 0.30901699437495 + 0.95105651629515i; ... -0.80901699437495 + 0.58778525229247i]; assert(r(is),rise,100*eps); assert(p(is),pise,100*eps); assert(f,[],100*eps); assert(m,[1;1;1;1;1],100*eps); 9 tests, 9 passed, 0 known failure, 0 skipped [inst/boxcar.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/boxcar.m ***** assert (boxcar (1), 1) ***** assert (boxcar (2), ones (2, 1)) ***** assert (boxcar (100), ones (100, 1)) ***** error boxcar () ***** error boxcar (0.5) ***** error boxcar (-1) ***** error boxcar (ones (1, 4)) ***** error boxcar (1, 2) 8 tests, 8 passed, 0 known failure, 0 skipped [inst/decimate.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/decimate.m ***** demo t=0:0.01:2; x=chirp(t,2,.5,10,'quadratic')+sin(2*pi*t*0.4); y = decimate(x,4); # factor of 4 decimation stem(t(1:121)*1000,x(1:121),"-g;Original;"); hold on; # plot original stem(t(1:4:121)*1000,y(1:31),"-r;Decimated;"); hold off; # decimated %------------------------------------------------------------------ % The signal to decimate starts away from zero, is slowly varying % at the start and quickly varying at the end, decimate and plot. % Since it starts away from zero, you will see the boundary % effects of the antialiasing filter clearly. You will also see % how it follows the curve nicely in the slowly varying early % part of the signal, but averages the curve in the quickly % varying late part of the signal. ***** error decimate () ***** error decimate (1) ***** error decimate (1, 2, 3, 4, 5) ***** error decimate (1, -1) 4 tests, 4 passed, 0 known failure, 0 skipped [inst/blackmanharris.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/blackmanharris.m ***** assert (blackmanharris (1), 1); ***** assert (blackmanharris (2), 0.00006 * ones (2, 1), eps); ***** assert (blackmanharris (15), flipud (blackmanharris (15)), 10*eps); ***** assert (blackmanharris (16), flipud (blackmanharris (16)), 10*eps); ***** assert (blackmanharris (15), blackmanharris (15, "symmetric")); ***** assert (blackmanharris (16)(1:15), blackmanharris (15, "periodic")); ***** error blackmanharris () ***** error blackmanharris (0.5) ***** error blackmanharris (-1) ***** error blackmanharris (ones (1, 4)) ***** error blackmanharris (1, 2) ***** error blackmanharris (1, "invalid") 12 tests, 12 passed, 0 known failure, 0 skipped [inst/sos2tf.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/sos2tf.m ***** test B = [1, 1]; A = [1, 0.5]; [sos, g] = tf2sos (B, A); [Bh, Ah] = sos2tf (sos, g); assert (g, 1); assert (Bh, B, 10*eps); assert (Ah, A, 10*eps); ***** test B = [1, 0, 0, 0, 0, 1]; A = [1, 0, 0, 0, 0, 0.9]; [sos, g] = tf2sos (B, A); [Bh, Ah] = sos2tf (sos, g); assert (g, 1); assert (Bh, B, 100*eps); assert (Ah, A, 100*eps); ***** test B = [1, 1]; A = [1, 0.5]; [sos, g] = tf2sos (B, A); [Bh, Ah] = sos2tf (sos, 2); assert (g, 1); assert (Bh, 2 * B, 10*eps); assert (Ah, A, 10*eps); ***** test B = [1, 1]; A = [1, 0.5]; [sos, g] = tf2sos (B, A); [Bh, Ah] = sos2tf (sos, [2, 2, 2]); assert (g, 1); assert (Bh, 8 * B, 10*eps); assert (Ah, A, 10*eps); 4 tests, 4 passed, 0 known failure, 0 skipped [inst/invimpinvar.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/invimpinvar.m ***** function err = ztoserr(bz,az,fs) # number of time steps n=100; # make sure system is realizable (no delays) bz=prepad(bz,length(az)-1,0,2); # inverse impulse invariant transform to s-domain [bs as]=invimpinvar(bz,az,fs); # create sys object of transfer function s=tf(bs,as); # calculate impulse response of continuous time system # at discrete time intervals 1/fs ys=impulse(s,(n-1)/fs,1/fs)'; # impulse response of discrete time system yz=filter(bz,az,[1 zeros(1,n-1)]); # find rms error err=sqrt(sum((yz*fs.-ys).^2)/length(ys)); endfunction ***** assert(ztoserr([1],[1 -0.5],0.01),0,0.0001); ***** assert(ztoserr([1],[1 -1 0.25],0.01),0,0.0001); ***** assert(ztoserr([1 1],[1 -1 0.25],0.01),0,0.0001); ***** assert(ztoserr([1],[1 -1.5 0.75 -0.125],0.01),0,0.0001); ***** assert(ztoserr([1 1],[1 -1.5 0.75 -0.125],0.01),0,0.0001); ***** assert(ztoserr([1 1 1],[1 -1.5 0.75 -0.125],0.01),0,0.0001); ***** assert(ztoserr([1],[1 0 0.25],0.01),0,0.0001); ***** assert(ztoserr([1 1],[1 0 0.25],0.01),0,0.0001); ***** assert(ztoserr([1],[1 0 0.5 0 0.0625],0.01),0,0.0001); ***** assert(ztoserr([1 1],[1 0 0.5 0 0.0625],0.01),0,0.0001); ***** assert(ztoserr([1 1 1],[1 0 0.5 0 0.0625],0.01),0,0.0001); ***** assert(ztoserr([1 1 1 1],[1 0 0.5 0 0.0625],0.01),0,0.0001); 12 tests, 12 passed, 0 known failure, 0 skipped [inst/gaussian.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/gaussian.m ***** assert (gaussian (1), 1) ***** error gaussian () ***** error gaussian (0.5) ***** error gaussian (-1) ***** error gaussian (ones (1, 4)) ***** error gaussian (1, 2, 3) 6 tests, 6 passed, 0 known failure, 0 skipped [inst/ellipord.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/ellipord.m ***** demo fs = 44100; Npts = fs; fpass = 4000; fstop = 13713; Rpass = 3; Rstop = 40; Wpass = 2/fs * fpass; Wstop = 2/fs * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop) [b, a] = ellip (n, Rpass, Rstop, Wn); f = 0:fs/2; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on plot (outline_lp_pass_x, outline_lp_pass_y, "m", outline_lp_stop_x, outline_lp_stop_y, "m"); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("2nd order digital elliptical low-pass (without margin)"); ***** demo fs = 44100; Npts = fs; fpass = 4000; fstop = 13712; Rpass = 3; Rstop = 40; Wpass = 2/fs * fpass; Wstop = 2/fs * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop) [b, a] = ellip (n, Rpass, Rstop, Wn); f = 0:fs/2; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on plot (outline_lp_pass_x, outline_lp_pass_y, "m", outline_lp_stop_x, outline_lp_stop_y, "m"); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("3rd order digital elliptical low-pass (just exceeds 2nd order i.e. large margin)"); ***** demo fs = 44100; Npts = fs; fstop = 4000; fpass = 13713; Rpass = 3; Rstop = 40; Wpass = 2/fs * fpass; Wstop = 2/fs * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop) [b, a] = ellip (n, Rpass, Rstop, Wn, "high"); f = 0:fs/2; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [min(f) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on plot (outline_hp_pass_x, outline_hp_pass_y, "m", outline_hp_stop_x, outline_hp_stop_y, "m"); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("2nd order digital elliptical high-pass (without margin)"); ***** demo fs = 44100; Npts = fs; fstop = 4000; fpass = 13712; Rpass = 3; Rstop = 40; Wpass = 2/fs * fpass; Wstop = 2/fs * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop) [b, a] = ellip (n, Rpass, Rstop, Wn, "high"); f = 0:fs/2; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [min(f) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on plot (outline_hp_pass_x, outline_hp_pass_y, "m", outline_hp_stop_x, outline_hp_stop_y, "m"); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("3rd order digital elliptical high-pass (just exceeds 2nd order i.e. large margin)"); ***** demo fs = 44100; Npts = fs; fpass = [9500 9750]; fstop = [8500 10261]; Rpass = 3; Rstop = 40; Wpass = 2/fs * fpass; Wstop = 2/fs * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop) [b, a] = ellip (n, Rpass, Rstop, Wn); f = 5000:15000; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))) outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m", outline_bp_stop_x, outline_bp_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("4th order digital elliptical band-pass (without margin) limitation on upper freq"); ***** demo fs = 44100; Npts = fs; fpass = [9500 9750]; fstop = [9000 10700]; Rpass = 3; Rstop = 40; Wpass = 2/fs * fpass; Wstop = 2/fs * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop) [b, a] = ellip (n, Rpass, Rstop, Wn); f = 5000:15000; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))) outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m", outline_bp_stop_x, outline_bp_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("4th order digital elliptical band-pass (without margin) limitation on lower freq"); ***** demo fs = 44100; Npts = fs; fpass = [9500 9750]; fstop = [8500 10260]; Rpass = 3; Rstop = 40; Wpass = 2/fs * fpass; Wstop = 2/fs * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop) [b, a] = ellip (n, Rpass, Rstop, Wn); f = 5000:15000; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))) outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m", outline_bp_stop_x, outline_bp_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("6th order digital elliptical band-pass (just exceeds 4th order i.e. large margin) limitation on upper freq"); ***** demo fs = 44100; Npts = fs; fpass = [9500 9750]; fstop = [9001 10700]; Rpass = 3; Rstop = 40; Wpass = 2/fs * fpass; Wstop = 2/fs * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop) [b, a] = ellip (n, Rpass, Rstop, Wn); f = 5000:15000; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))) outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m", outline_bp_stop_x, outline_bp_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("6th order digital elliptical band-pass (just exceeds 4th order i.e. large margin) limitation on lower freq"); ***** demo fs = 44100; Npts = fs; fstop = [9875 10126.5823]; fpass = [8500 11073]; Rpass = 0.5; Rstop = 40; Wpass = 2/fs * fpass; Wstop = 2/fs * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop) [b, a] = ellip (n, Rpass, Rstop, Wn, "stop"); f = 5000:15000; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))) outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0 , 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m", outline_notch_pass_x_b, outline_notch_pass_y_b, "m", outline_notch_stop_x, outline_notch_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("4th order digital elliptical notch (without margin) limit on upper freq"); ***** demo fs = 44100; Npts = fs; fstop = [9875 10126.5823]; fpass = [8952 12000]; Rpass = 0.5; Rstop = 40; Wpass = 2/fs * fpass; Wstop = 2/fs * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop) [b, a] = ellip (n, Rpass, Rstop, Wn, "stop"); f = 5000:15000; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))) outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0 , 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m", outline_notch_pass_x_b, outline_notch_pass_y_b, "m", outline_notch_stop_x, outline_notch_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("4th order digital elliptical notch (without margin) limit on lower freq"); ***** demo fs = 44100; Npts = fs; fstop = [9875 10126.5823]; fpass = [8500 11072]; Rpass = 0.5; Rstop = 40; Wpass = 2/fs * fpass; Wstop = 2/fs * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop) [b, a] = ellip (n, Rpass, Rstop, Wn, "stop"); f = 5000:15000; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))) outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0 , 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m", outline_notch_pass_x_b, outline_notch_pass_y_b, "m", outline_notch_stop_x, outline_notch_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("6th order digital elliptical notch (just exceeds 4th order) limit on upper freq"); ***** demo fs = 44100; Npts = fs; fstop = [9875 10126.5823]; fpass = [8953 12000]; Rpass = 0.5; Rstop = 40; Wpass = 2/fs * fpass; Wstop = 2/fs * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop) [b, a] = ellip (n, Rpass, Rstop, Wn, "stop"); f = 5000:15000; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))) outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0 , 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m", outline_notch_pass_x_b, outline_notch_pass_y_b, "m", outline_notch_stop_x, outline_notch_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("6th order digital elliptical notch (just exceeds 4th order) limit on lower freq"); ***** demo fpass = 4000; fstop = 20224; Rpass = 3; Rstop = 40; Wpass = 2*pi * fpass; Wstop = 2*pi * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = ellip (n, Rpass, Rstop, Wn, "s"); f = 1000:10:100000; W = 2*pi * f; H = freqs (b, a, W); semilogx(f, 20 * log10 (abs (H))) outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on plot (outline_lp_pass_x, outline_lp_pass_y, "m", outline_lp_stop_x, outline_lp_stop_y, "m") ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("2nd order analog elliptical low-pass (without margin)"); ***** demo fpass = 4000; fstop = 20223; Rpass = 3; Rstop = 40; Wpass = 2*pi * fpass; Wstop = 2*pi * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = ellip (n, Rpass, Rstop, Wn, "s"); f = 1000:10:100000; W = 2*pi * f; H = freqs (b, a, W); semilogx (f, 20 * log10 (abs (H))) outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on plot (outline_lp_pass_x, outline_lp_pass_y, "m", outline_lp_stop_x, outline_lp_stop_y, "m") ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("3rd order analog elliptical low-pass (just exceeds 2nd order i.e. large margin)"); ***** demo fstop = 4000; fpass = 20224; Rpass = 3; Rstop = 40; Wpass = 2*pi * fpass; Wstop = 2*pi * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = ellip (n, Rpass, Rstop, Wn, "high", "s"); f = 1000:10:100000; W = 2*pi * f; H = freqs (b, a, W); semilogx (f, 20 * log10 (abs (H))) outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on plot (outline_hp_pass_x, outline_hp_pass_y, "m", outline_hp_stop_x, outline_hp_stop_y, "m") ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("2nd order analog elliptical high-pass (without margin)"); ***** demo fstop = 4000; fpass = 20223; Rpass = 3; Rstop = 40; Wpass = 2*pi * fpass; Wstop = 2*pi * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = ellip (n, Rpass, Rstop, Wn, "high", "s"); f = 1000:10:100000; W = 2*pi * f; H = freqs (b, a, W); semilogx (f, 20 * log10 (abs (H))) outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on plot (outline_hp_pass_x, outline_hp_pass_y, "m", outline_hp_stop_x, outline_hp_stop_y, "m") ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("3rd order analog elliptical high-pass (just exceeds 2nd order i.e. large margin)"); ***** demo fpass = [9875 10126.5823]; fstop = [9000 10657]; Rpass = 3; Rstop = 40; fcenter = sqrt (fpass(1) * fpass(2)); Wpass = 2*pi * fpass; Wstop = 2*pi * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = ellip (n, Rpass, Rstop, Wn, "s"); f = 5000:15000; W = 2*pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))) outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m", outline_bp_stop_x, outline_bp_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("4th order analog elliptical band-pass (without margin) limitation on upper freq"); ***** demo fpass = [9875 10126.5823]; fstop = [9384 12000]; Rpass = 3; Rstop = 40; fcenter = sqrt (fpass(1) * fpass(2)); Wpass = 2*pi * fpass; Wstop = 2*pi * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = ellip (n, Rpass, Rstop, Wn, "s"); f = 5000:15000; W = 2*pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))) outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m", outline_bp_stop_x, outline_bp_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("4th order analog elliptical band-pass (without margin) limitation on lower freq"); ***** demo fpass = [9875 10126.5823]; fstop = [9000 10656]; Rpass = 3; Rstop = 40; fcenter = sqrt (fpass(1) * fpass(2)); Wpass = 2*pi * fpass; Wstop = 2*pi * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = ellip (n, Rpass, Rstop, Wn, "s"); f = 5000:15000; W = 2*pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))) outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m", outline_bp_stop_x, outline_bp_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("6th order analog elliptical band-pass (just exceeds 4th order i.e. large margin) limitation on upper freq"); ***** demo fpass = [9875 10126.5823]; fstop = [9385 12000]; Rpass = 3; Rstop = 40; fcenter = sqrt (fpass(1) * fpass(2)); Wpass = 2*pi * fpass; Wstop = 2*pi * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = ellip (n, Rpass, Rstop, Wn, "s"); f = 5000:15000; W = 2*pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))) outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m", outline_bp_stop_x, outline_bp_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("6th order analog elliptical band-pass (just exceeds 4th order i.e. large margin) limitation on lower freq"); ***** demo fstop = [9875 10126.5823]; fpass = [9000 10657]; Rpass = 3; Rstop = 40; fcenter = sqrt (fpass(1) * fpass(2)); Wpass = 2*pi * fpass; Wstop = 2*pi * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = ellip (n, Rpass, Rstop, Wn, "stop", "s"); f = 5000:15000; W = 2*pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))) outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0 , 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m", outline_notch_pass_x_b, outline_notch_pass_y_b, "m", outline_notch_stop_x, outline_notch_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("4th order analog elliptical notch (without margin) limit on upper freq"); ***** demo fstop = [9875 10126.5823]; fpass = [9384 12000]; Rpass = 3; Rstop = 40; fcenter = sqrt (fpass(1) * fpass(2)); Wpass = 2*pi * fpass; Wstop = 2*pi * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = ellip (n, Rpass, Rstop, Wn, "stop", "s"); f = 5000:15000; W = 2*pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))) outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0 , 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m", outline_notch_pass_x_b, outline_notch_pass_y_b, "m", outline_notch_stop_x, outline_notch_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("4th order analog elliptical notch (without margin) limit on lower freq"); ***** demo fstop = [9875 10126.5823]; fpass = [9000 10656]; Rpass = 3; Rstop = 40; fcenter = sqrt (fpass(1) * fpass(2)); Wpass = 2*pi * fpass; Wstop = 2*pi * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = ellip (n, Rpass, Rstop, Wn, "stop", "s"); f = 5000:15000; W = 2*pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))) outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0 , 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m", outline_notch_pass_x_b, outline_notch_pass_y_b, "m", outline_notch_stop_x, outline_notch_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("6th order analog elliptical notch (just exceeds 4th order) limit on upper freq"); ***** demo fstop = [9875 10126.5823]; fpass = [9385 12000]; Rpass = 3; Rstop = 40; fcenter = sqrt (fpass(1) * fpass(2)); Wpass = 2*pi * fpass; Wstop = 2*pi * fstop; [n, Wn] = ellipord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = ellip (n, Rpass, Rstop, Wn, "stop", "s"); f = 5000:15000; W = 2*pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))) outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0 , 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m", outline_notch_pass_x_b, outline_notch_pass_y_b, "m", outline_notch_stop_x, outline_notch_stop_y, "m") xlim ([f(1), f(end)]); ylim ([-80, 0]); grid on xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); title ("6th order analog elliptical notch (just exceeds 4th order) limit on lower freq"); ***** test # Analog band-pass [n, Wn] = ellipord (2 * pi * [9875, 10126.5823], ... 2 * pi * [9000, 10657], 3, 40, "s"); assert (n, 2); assert (round (Wn), [62046, 63627]); ***** test # Analog band-pass [n, Wn] = ellipord (2 * pi * [9875, 10126.5823], ... 2 * pi * [9384, 12000], 3, 40, "s"); assert (n, 2); assert (round (Wn), [62046, 63627]); ***** test # Analog band-pass [n, Wn] = ellipord (2 * pi * [9875, 10126.5823], ... 2 * pi * [9000, 10656], 3, 40, "s"); assert (n, 3); assert (round (Wn), [62046, 63627]); ***** test # Analog band-pass [n, Wn] = ellipord (2 * pi * [9875, 10126.5823], ... 2 * pi * [9385, 12000], 3, 40, "s"); assert (n, 3); assert (round (Wn), [62046, 63627]); ***** test # Analog high-pass [n, Wn] = ellipord (2 * pi * 20224, 2 * pi * 4000, 3, 40, "s"); assert (n, 2); assert (round (Wn), 127071); ***** test # Analog high-pass [n, Wn] = ellipord (2 * pi * 20223, 2 * pi * 4000, 3, 40, "s"); assert (n, 3); assert (round (Wn), 127065); ***** test # Analog low-pass [n, Wn] = ellipord (2 * pi * 4000, 2 * pi * 20224, 3, 40, "s"); assert (n, 2); assert (round (Wn), 25133); ***** test # Analog low-pass [n, Wn] = ellipord (2 * pi * 4000, 2 * pi * 20223, 3, 40, "s"); assert (n, 3); assert (round (Wn), 25133); ***** test # Analog notch (narrow band-stop) [n, Wn] = ellipord (2 * pi * [9000, 10657], ... 2 * pi * [9875, 10126.5823], 3, 40, "s"); assert (n, 2); assert (round (Wn), [58958, 66960]); ***** test # Analog notch (narrow band-stop) [n, Wn] = ellipord (2 * pi * [9384, 12000], ... 2 * pi * [9875, 10126.5823], 3, 40, "s"); assert (n, 2); assert (round (Wn), [58961 , 66956]); ***** test # Analog notch (narrow band-stop) [n, Wn] = ellipord (2 * pi * [9000, 10656], ... 2 * pi * [9875, 10126.5823], 3, 40, "s"); assert (n, 3); assert (round (Wn), [58964, 66954]); ***** test # Analog notch (narrow band-stop) [n, Wn] = ellipord (2 * pi * [9385, 12000], ... 2 * pi * [9875, 10126.5823], 3, 40, "s"); assert (n, 3); assert (round (Wn), [58968, 66949]); ***** test # Digital band-pass fs = 44100; [n, Wn] = ellipord (2 / fs * [9500, 9750], 2 / fs * [8500, 10261], 3, 40); Wn = Wn * fs / 2; assert (n, 2); assert (round (Wn), [9500, 9750]); ***** test # Digital band-pass fs = 44100; [n, Wn] = ellipord (2 / fs * [9500, 9750], 2 / fs * [9000, 10700], 3, 40); Wn = Wn * fs / 2; assert (n, 2); assert (round (Wn), [9500, 9750]); ***** test # Digital band-pass fs = 44100; [n, Wn] = ellipord (2 / fs * [9500, 9750], 2 / fs * [8500, 10260], 3, 40); Wn = Wn * fs / 2; assert (n, 3); assert (round (Wn), [9500, 9750]); ***** test # Digital band-pass fs = 44100; [n, Wn] = ellipord (2 / fs * [9500, 9750], 2 / fs * [9001, 10700], 3, 40); Wn = Wn * fs / 2; assert (n, 3); assert (round (Wn), [9500, 9750]); ***** test # Digital high-pass fs = 44100; [n, Wn] = ellipord (2 / fs * 13713, 2 / fs * 4000, 3, 40); Wn = Wn * fs / 2; assert (n, 2); assert (round (Wn), 13713); ***** test # Digital high-pass fs = 44100; [n, Wn] = ellipord (2 / fs * 13712, 2 / fs * 4000, 3, 40); Wn = Wn * fs / 2; assert (n, 3); assert (round (Wn), 13712); ***** test # Digital low-pass fs = 44100; [n, Wn] = ellipord (2 / fs * 4000, 2 / fs * 13713, 3, 40); Wn = Wn * fs / 2; assert (n, 2); assert (round (Wn), 4000); ***** test # Digital low-pass fs = 44100; [n, Wn] = ellipord (2 / fs * 4000, 2 / fs * 13712, 3, 40); Wn = Wn * fs / 2; assert (n, 3); assert (round (Wn), 4000); ***** test # Digital notch (narrow band-stop) fs = 44100; [n, Wn] = ellipord (2 / fs * [8500, 11073], 2 / fs * [9875, 10126.5823], 0.5, 40); Wn = Wn * fs / 2; assert (n, 2); assert (round (Wn), [8952, 11073]); ***** test # Digital notch (narrow band-stop) fs = 44100; [n, Wn] = ellipord (2 / fs * [8952, 12000], 2 / fs * [9875, 10126.5823], 0.5, 40); Wn = Wn * fs / 2; assert (n, 2); assert (round (Wn), [8952, 11073]); ***** test # Digital notch (narrow band-stop) fs = 44100; [n, Wn] = ellipord (2 / fs * [8500, 11072], 2 / fs * [9875, 10126.5823], 0.5, 40); Wn = Wn * fs / 2; assert (n, 3); assert (round (Wn), [8953, 11072]); ***** test # Digital notch (narrow band-stop) fs = 44100; [n, Wn] = ellipord (2 / fs * [8953, 12000], 2 / fs * [9875, 10126.5823], 0.5, 40); Wn = Wn * fs / 2; assert (n, 3); assert (round (Wn), [8953, 11072]); ***** error ellipord () ***** error ellipord (.1) ***** error ellipord (.1, .2) ***** error ellipord (.1, .2, 3) ***** error ellipord ([.1 .1], [.2 .2], 3, 4) ***** error ellipord ([.1 .2], [.5 .6], 3, 4) ***** error ellipord ([.1 .5], [.2 .6], 3, 4) 31 tests, 31 passed, 0 known failure, 0 skipped [inst/welchwin.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/welchwin.m ***** demo m = 32; t = [0:m-1]; printf ("Graph: single period of "); printf ("%d-point periodic (blue) and symmetric (red) windows\n", m); xp = welchwin (m, "periodic"); xs = welchwin (m, "symmetric"); plot (t, xp, "b", t, xs, "r") ***** demo m = 32; t = [0:4*m-1]; printf ("Graph: 4 periods of "); printf ("%d-point periodic (blue) and symmetric (red) windows\n", m); xp = welchwin (m, "periodic"); xs = welchwin (m, "symmetric"); xp2 = repmat (xp, 4, 1); xs2 = repmat (xs, 4, 1); plot (t, xp2, "b", t, xs2, "r") ***** demo m = 32; n = 512; xp = welchwin (m, "periodic"); s = fftshift (max (1e-2, abs (fft (postpad (xp, n))))); f = [-0.5:1/n:0.5-1/n]; printf ("%dx null-padded, power spectrum of %d-point window\n", n/m, m); semilogy (f, s) ***** assert (welchwin (3), [0; 1; 0]); ***** assert (welchwin (15), flipud (welchwin (15))); ***** assert (welchwin (16), flipud (welchwin (16))); ***** assert (welchwin (15), welchwin (15, "symmetric")); ***** assert (welchwin (16)(1:15), welchwin (15, "periodic")); ***** error welchwin () ***** error welchwin (0.5) ***** error welchwin (-1) ***** error welchwin (ones (1, 4)) ***** error welchwin (1, 2, 3) ***** error welchwin (1, "invalid") 11 tests, 11 passed, 0 known failure, 0 skipped [inst/shiftdata.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/shiftdata.m ***** test X = [1 2 3; 4 5 6; 7 8 9]; [Y, perm, shifts] = shiftdata (X, 2); assert (Y, [1 4 7; 2 5 8; 3 6 9]); assert (perm, [2 1]); ***** test X = [27 42 11; 63 48 5; 67 74 93]; X(:, :, 2) = [15 23 81; 34 60 28; 70 54 38]; [Y, perm, shifts] = shiftdata(X, 2); T = [27 63 67; 42 48 74; 11 5 93]; T(:, :, 2) = [15 34 70; 23 60 54; 81 28 38]; assert(Y, T); assert(perm, [2 1 3]); ***** test X = fix (rand (4, 4, 4, 4) * 100); [Y, perm, shifts] = shiftdata (X, 3); T = 0; for i = 1:3 for j = 1:3 for k = 1:2 for l = 1:2 T = [T Y(k, i, j, l) - X(i, j, k ,l)]; endfor endfor endfor endfor assert (T, zeros (size (T))); ***** error shiftdata () ***** error shiftdata (1, 2, 3) ***** error shiftdata (1, 2.5) 6 tests, 6 passed, 0 known failure, 0 skipped [inst/cplxreal.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/cplxreal.m ***** test [zc, zr] = cplxreal ([]); assert (isempty (zc)) assert (isempty (zr)) ***** test [zc, zr] = cplxreal (1); assert (isempty (zc)) assert (zr, 1) ***** test [zc, zr] = cplxreal ([1+1i, 1-1i]); assert (zc, 1+1i) assert (isempty (zr)) ***** test [zc, zr] = cplxreal (roots ([1, 0, 0, 1])); assert (zc, complex (0.5, sin (pi/3)), 10*eps) assert (zr, -1, 2*eps) ***** error cplxreal () ***** error cplxreal (1, 2, 3, 4) ***** error cplxreal (1, ones (2, 3)) ***** error cplxreal (1, -1) ***** error cplxreal (1, [], 3) 9 tests, 9 passed, 0 known failure, 0 skipped [inst/xcorr2.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/xcorr2.m ***** test # basic usage a = magic (5); b = [6 13 22; 10 18 23; 8 15 23]; c = [391 807 519 391 473 289 120 920 1318 1045 909 1133 702 278 995 1476 1338 1534 2040 1161 426 828 1045 1501 2047 2108 1101 340 571 1219 2074 2155 1896 821 234 473 1006 1643 1457 946 347 108 242 539 850 477 374 129 54]; assert (xcorr2 (a, b), c); ***** shared a, b, c, row_shift, col_shift row_shift = 18; col_shift = 20; a = randi (255, 30, 30); b = a(row_shift-10:row_shift, col_shift-7:col_shift); c = xcorr2 (a, b, "coeff"); ***** assert (nthargout ([1 2], @find, c == max (c(:))), {row_shift, col_shift}); # should return exact coordinates m = rand (size (b)) > 0.5; b(m) = b(m) * 0.95; b(!m) = b(!m) * 1.05; c = xcorr2 (a, b, "coeff"); ***** assert (nthargout ([1 2], @find, c == max (c(:))), {row_shift, col_shift}); # even with some small noise, should return exact coordinates ***** test # coeff of autocorrelation must be same as negative of correlation by additive inverse a = 10 * randn (100, 100); auto = xcorr2 (a, "coeff"); add_in = xcorr2 (a, -a, "coeff"); assert ([min(auto(:)), max(auto(:))], -[max(add_in(:)), min(add_in(:))]); 4 tests, 4 passed, 0 known failure, 0 skipped [inst/barthannwin.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/barthannwin.m ***** assert (barthannwin (1), 1) ***** assert (barthannwin (2), zeros (2, 1)) ***** error barthannwin () ***** error barthannwin (0.5) ***** error barthannwin (-1) ***** error barthannwin (ones (1, 4)) ***** error barthannwin (1, 2) 7 tests, 7 passed, 0 known failure, 0 skipped [inst/rssq.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/rssq.m ***** assert (rssq ([]), 0) ***** assert (rssq ([1 2 -1]), sqrt (6)) ***** assert (rssq ([1 2 -1]'), sqrt (6)) ***** assert (rssq ([1 2], 3), [1 2]) ***** error rssq () ***** error rssq (1, 2, 3) ***** error rssq (1, 1.5) ***** error rssq (1, -1) 8 tests, 8 passed, 0 known failure, 0 skipped [inst/data2fun.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/data2fun.m ***** shared t, y t = linspace (0, 1, 10); y = t.^2 - 2*t + 1; ***** test fhandle = data2fun (t, y); assert (y, fhandle (t)); ***** test unwind_protect [fhandle fname] = data2fun (t, y, "file", "testdata2fun"); yt = testdata2fun (t); assert (y, yt); assert (y, fhandle (t)); unwind_protect_cleanup unlink (fname); unlink ([fname(1:end-2) ".mat"]); end_unwind_protect ***** test unwind_protect [fhandle fname] = data2fun (t, y, "file", ""); yt = testdata2fun (t); assert (y, yt); assert (y, fhandle (t)); unwind_protect_cleanup unlink (fname); unlink ([fname(1:end-2) ".mat"]); end_unwind_protect ***** test unwind_protect [fhandle fname] = data2fun (t, y, "file", "testdata2fun", "interp", "linear"); yt = testdata2fun (t); assert (y, yt); assert (y, fhandle (t)); unwind_protect_cleanup unlink (fname); unlink ([fname(1:end-2) ".mat"]); end_unwind_protect ***** error data2fun () ***** error data2fun (1) ***** error data2fun (1, 2, "file") 7 tests, 7 passed, 0 known failure, 0 skipped [inst/digitrevorder.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/digitrevorder.m ***** assert (digitrevorder (0, 2), 0); ***** assert (digitrevorder (0, 36), 0); ***** assert (digitrevorder (0:3, 4), 0:3); ***** assert (digitrevorder ([0:3]', 4), [0:3]'); ***** assert (digitrevorder (0:7, 2), [0 4 2 6 1 5 3 7]); ***** assert (digitrevorder ([0:7]', 2), [0 4 2 6 1 5 3 7]'); ***** assert (digitrevorder ([0:7]*i, 2), [0 4 2 6 1 5 3 7]*i); ***** assert (digitrevorder ([0:7]'*i, 2), [0 4 2 6 1 5 3 7]'*i); ***** assert (digitrevorder (0:15, 2), [0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15]); ***** assert (digitrevorder (0:15, 4), [0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15]); ***** error digitrevorder (); ***** error digitrevorder (1); ***** error digitrevorder (1, 2, 3); ***** error digitrevorder ([], 1); ***** error digitrevorder ([], 37); ***** error digitrevorder (0:3, 8); 16 tests, 16 passed, 0 known failure, 0 skipped [inst/marcumq.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/marcumq.m ***** error marcumq (1) ***** error marcumq (-1, 1, 1, 1, 1) ***** error marcumq (-1, 1) ***** error marcumq (1, -1) ***** error marcumq (1, 1, 0) ***** error marcumq (1, 1, -1) ***** error marcumq (1, 1, 1.1) ***** test a = [0.00; 0.05; 1.00; 2.00; 3.00; 4.00; 5.00; 6.00; 7.00; 8.00; 9.00; 10.00; 11.00; 12.00; 13.00; 14.00; 15.00; 16.00; 17.00; 18.00; 19.00; 20.00; 21.00; 22.00; 23.00; 24.00]; b = [0.000000, 0.100000, 1.100000, 2.100000, 3.100000, 4.100000]; Q = [1.000000, 0.995012, 0.546074, 0.110251, 0.008189, 0.000224; 1.000000, 0.995019, 0.546487, 0.110554, 0.008238, 0.000226; 1.000000, 0.996971, 0.685377, 0.233113, 0.034727, 0.002092; 1.000000, 0.999322, 0.898073, 0.561704, 0.185328, 0.027068; 1.000000, 0.999944, 0.985457, 0.865241, 0.526735, 0.169515; 1.000000, 0.999998, 0.999136, 0.980933, 0.851679, 0.509876; 1.000000, 1.000000, 0.999979, 0.998864, 0.978683, 0.844038; 1.000000, 1.000000, 1.000000, 0.999973, 0.998715, 0.977300; 1.000000, 1.000000, 1.000000, 1.000000, 0.999969, 0.998618; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.999966; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000]; q = marcumq (a, b); assert (q, Q, 1e-6); ***** test a = [0.00; 0.05; 1.00; 2.00; 3.00; 4.00; 5.00; 6.00; 7.00; 8.00; 9.00; 10.00; 11.00; 12.00; 13.00; 14.00; 15.00; 16.00; 17.00; 18.00; 19.00; 20.00; 21.00; 22.00; 23.00; 24.00]; b = [5.100000, 6.100000, 7.100000, 8.100000, 9.100000, 10.10000]; Q = [0.000002, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; 0.000002, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; 0.000049, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; 0.001606, 0.000037, 0.000000, 0.000000, 0.000000, 0.000000; 0.024285, 0.001420, 0.000032, 0.000000, 0.000000, 0.000000; 0.161412, 0.022812, 0.001319, 0.000030, 0.000000, 0.000000; 0.499869, 0.156458, 0.021893, 0.001256, 0.000028, 0.000000; 0.839108, 0.493229, 0.153110, 0.021264, 0.001212, 0.000027; 0.976358, 0.835657, 0.488497, 0.150693, 0.020806, 0.001180; 0.998549, 0.975673, 0.833104, 0.484953, 0.148867, 0.020458; 0.999965, 0.998498, 0.975152, 0.831138, 0.482198, 0.147437; 1.000000, 0.999963, 0.998458, 0.974742, 0.829576, 0.479995; 1.000000, 1.000000, 0.999962, 0.998426, 0.974411, 0.828307; 1.000000, 1.000000, 1.000000, 0.999961, 0.998400, 0.974138; 1.000000, 1.000000, 1.000000, 1.000000, 0.999960, 0.998378; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.999960; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000]; q = marcumq (a, b); assert (q, Q, 1e-6); ***** test a = [0.00; 0.05; 1.00; 2.00; 3.00; 4.00; 5.00; 6.00; 7.00; 8.00; 9.00; 10.00; 11.00; 12.00; 13.00; 14.00; 15.00; 16.00; 17.00; 18.00; 19.00; 20.00; 21.00; 22.00; 23.00; 24.00]; b = [11.10000, 12.10000, 13.10000, 14.10000, 15.10000, 16.10000]; Q = [0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; 0.000026, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; 0.001155, 0.000026, 0.000000, 0.000000, 0.000000, 0.000000; 0.020183, 0.001136, 0.000025, 0.000000, 0.000000, 0.000000; 0.146287, 0.019961, 0.001120, 0.000025, 0.000000, 0.000000; 0.478193, 0.145342, 0.019778, 0.001107, 0.000024, 0.000000; 0.827253, 0.476692, 0.144551, 0.019625, 0.001096, 0.000024; 0.973909, 0.826366, 0.475422, 0.143881, 0.019494, 0.001087; 0.998359, 0.973714, 0.825607, 0.474333, 0.143304, 0.019381; 0.999959, 0.998343, 0.973546, 0.824952, 0.473389, 0.142803; 1.000000, 0.999959, 0.998330, 0.973400, 0.824380, 0.472564; 1.000000, 1.000000, 0.999958, 0.998318, 0.973271, 0.823876; 1.000000, 1.000000, 1.000000, 0.999958, 0.998307, 0.973158; 1.000000, 1.000000, 1.000000, 1.000000, 0.999957, 0.998297; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.999957; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000]; q = marcumq (a, b); assert (q, Q, 1e-6); ***** test a = [0.00; 0.05; 1.00; 2.00; 3.00; 4.00; 5.00; 6.00; 7.00; 8.00; 9.00; 10.00; 11.00; 12.00; 13.00; 14.00; 15.00; 16.00; 17.00; 18.00; 19.00; 20.00; 21.00; 22.00; 23.00; 24.00]; b = [17.10000, 18.10000, 19.10000]; Q = [0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000; 0.000000, 0.000000, 0.000000; 0.000024, 0.000000, 0.000000; 0.001078, 0.000024, 0.000000; 0.019283, 0.001071, 0.000023; 0.142364, 0.019197, 0.001065; 0.471835, 0.141976, 0.019121; 0.823429, 0.471188, 0.141630; 0.973056, 0.823030, 0.470608; 0.998289, 0.972965, 0.822671; 0.999957, 0.998281, 0.972883; 1.000000, 0.999957, 0.998274; 1.000000, 1.000000, 0.999956; 1.000000, 1.000000, 1.000000]; q = marcumq (a, b); assert (q, Q, 1e-6); ***** test M = 2; a = [0.00; 0.05; 1.00; 2.00; 3.00; 4.00; 5.00; 6.00; 7.00; 8.00; 9.00; 10.00; 11.00; 12.00; 13.00; 14.00; 15.00; 16.00; 17.00; 18.00; 19.00; 20.00; 21.00; 22.00; 23.00; 24.00]; b = [ 0.00, 0.10, 2.10, 7.10, 12.10, 17.10]; Q = [1.000000, 0.999987, 0.353353, 0.000000, 0.000000, 0.000000; 1.000000, 0.999988, 0.353687, 0.000000, 0.000000, 0.000000; 1.000000, 0.999992, 0.478229, 0.000000, 0.000000, 0.000000; 1.000000, 0.999999, 0.745094, 0.000001, 0.000000, 0.000000; 1.000000, 1.000000, 0.934771, 0.000077, 0.000000, 0.000000; 1.000000, 1.000000, 0.992266, 0.002393, 0.000000, 0.000000; 1.000000, 1.000000, 0.999607, 0.032264, 0.000000, 0.000000; 1.000000, 1.000000, 0.999992, 0.192257, 0.000000, 0.000000; 1.000000, 1.000000, 1.000000, 0.545174, 0.000000, 0.000000; 1.000000, 1.000000, 1.000000, 0.864230, 0.000040, 0.000000; 1.000000, 1.000000, 1.000000, 0.981589, 0.001555, 0.000000; 1.000000, 1.000000, 1.000000, 0.998957, 0.024784, 0.000000; 1.000000, 1.000000, 1.000000, 0.999976, 0.166055, 0.000000; 1.000000, 1.000000, 1.000000, 1.000000, 0.509823, 0.000000; 1.000000, 1.000000, 1.000000, 1.000000, 0.846066, 0.000032; 1.000000, 1.000000, 1.000000, 1.000000, 0.978062, 0.001335; 1.000000, 1.000000, 1.000000, 1.000000, 0.998699, 0.022409; 1.000000, 1.000000, 1.000000, 1.000000, 0.999970, 0.156421; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.495223; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.837820; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.976328; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.998564; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.999966; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000]; q = marcumq (a, b, M); assert (q, Q, 1e-6); ***** test M = 5; a = [0.00; 0.05; 1.00; 2.00; 3.00; 4.00; 5.00; 6.00; 7.00; 8.00; 9.00; 10.00; 11.00; 12.00; 13.00; 14.00; 15.00; 16.00; 17.00; 18.00; 19.00; 20.00; 21.00; 22.00; 23.00; 24.00]; b = [ 0.00, 0.10, 2.10, 7.10, 12.10, 17.10]; Q = [1.000000, 1.000000, 0.926962, 0.000000, 0.000000, 0.000000; 1.000000, 1.000000, 0.927021, 0.000000, 0.000000, 0.000000; 1.000000, 1.000000, 0.947475, 0.000001, 0.000000, 0.000000; 1.000000, 1.000000, 0.980857, 0.000033, 0.000000, 0.000000; 1.000000, 1.000000, 0.996633, 0.000800, 0.000000, 0.000000; 1.000000, 1.000000, 0.999729, 0.011720, 0.000000, 0.000000; 1.000000, 1.000000, 0.999990, 0.088999, 0.000000, 0.000000; 1.000000, 1.000000, 1.000000, 0.341096, 0.000000, 0.000000; 1.000000, 1.000000, 1.000000, 0.705475, 0.000002, 0.000000; 1.000000, 1.000000, 1.000000, 0.933009, 0.000134, 0.000000; 1.000000, 1.000000, 1.000000, 0.993118, 0.003793, 0.000000; 1.000000, 1.000000, 1.000000, 0.999702, 0.045408, 0.000000; 1.000000, 1.000000, 1.000000, 0.999995, 0.238953, 0.000000; 1.000000, 1.000000, 1.000000, 1.000000, 0.607903, 0.000001; 1.000000, 1.000000, 1.000000, 1.000000, 0.896007, 0.000073; 1.000000, 1.000000, 1.000000, 1.000000, 0.987642, 0.002480; 1.000000, 1.000000, 1.000000, 1.000000, 0.999389, 0.034450; 1.000000, 1.000000, 1.000000, 1.000000, 0.999988, 0.203879; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.565165; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.876284; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.984209; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.999165; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.999983; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000]; q = marcumq (a, b, M); assert (q, Q, 1e-6); ***** test M = 10; a = [0.00; 0.05; 1.00; 2.00; 3.00; 4.00; 5.00; 6.00; 7.00; 8.00; 9.00; 10.00; 11.00; 12.00; 13.00; 14.00; 15.00; 16.00; 17.00; 18.00; 19.00; 20.00; 21.00; 22.00; 23.00; 24.00]; b = [ 0.00, 0.10, 2.10, 7.10, 12.10, 17.10]; Q = [1.000000, 1.000000, 0.999898, 0.000193, 0.000000, 0.000000; 1.000000, 1.000000, 0.999897, 0.000194, 0.000000, 0.000000; 1.000000, 1.000000, 0.999931, 0.000416, 0.000000, 0.000000; 1.000000, 1.000000, 0.999980, 0.002377, 0.000000, 0.000000; 1.000000, 1.000000, 0.999997, 0.016409, 0.000000, 0.000000; 1.000000, 1.000000, 0.999999, 0.088005, 0.000000, 0.000000; 1.000000, 1.000000, 1.000000, 0.302521, 0.000000, 0.000000; 1.000000, 1.000000, 1.000000, 0.638401, 0.000000, 0.000000; 1.000000, 1.000000, 1.000000, 0.894322, 0.000022, 0.000000; 1.000000, 1.000000, 1.000000, 0.984732, 0.000840, 0.000000; 1.000000, 1.000000, 1.000000, 0.998997, 0.014160, 0.000000; 1.000000, 1.000000, 1.000000, 0.999972, 0.107999, 0.000000; 1.000000, 1.000000, 1.000000, 1.000000, 0.391181, 0.000000; 1.000000, 1.000000, 1.000000, 1.000000, 0.754631, 0.000004; 1.000000, 1.000000, 1.000000, 1.000000, 0.951354, 0.000266; 1.000000, 1.000000, 1.000000, 1.000000, 0.995732, 0.006444; 1.000000, 1.000000, 1.000000, 1.000000, 0.999843, 0.065902; 1.000000, 1.000000, 1.000000, 1.000000, 0.999998, 0.299616; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.676336; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.925312; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.992390; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.999679; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.999995; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000; 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000]; q = marcumq (a, b, M); assert (q, Q, 1e-6); 14 tests, 14 passed, 0 known failure, 0 skipped [inst/cceps.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/cceps.m ***** test x = randn (256, 1); c = cceps (x); assert (size (c), size (x)) ***** error cceps () ***** error cceps (1, 2, 3) ***** error cceps (ones (4)) ***** error cceps (0) ***** error cceps (zeros (10, 1)) 6 tests, 6 passed, 0 known failure, 0 skipped [inst/besself.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/besself.m ***** error [a, b] = besself () ***** error [a, b] = besself (1) ***** error [a, b] = besself (1, 2, 3, 4, 5) ***** error [a, b] = besself (.5, .2) ***** error [a, b] = besself (3, .2, "invalid") 5 tests, 5 passed, 0 known failure, 0 skipped [inst/uencode.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/uencode.m ***** test u = [-3:0.5:3]; y = uencode (u, 2); assert (y, [0 0 0 0 0 1 2 3 3 3 3 3 3]); ***** test u = [-4:0.5:4]; y = uencode (u, 3, 4); assert (y, [0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 7]); ***** test u = [-8:0.5:8]; y = uencode(u, 4, 8, "unsigned"); assert (y, [0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 15]); ***** test u = [-8:0.5:8]; y = uencode(u, 4, 8, "signed"); assert (y, [-8 -8 -7 -7 -6 -6 -5 -5 -4 -4 -3 -3 -2 -2 -1 -1 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 7]); ***** error uencode () ***** error uencode (1) ***** error uencode (1, 2, 3, 4, 5) ***** error uencode (1, 100) ***** error uencode (1, 4, 0) ***** error uencode (1, 4, -1) ***** error uencode (1, 4, 2, "invalid") 11 tests, 11 passed, 0 known failure, 0 skipped [inst/rms.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/rms.m ***** assert (rms (0), 0) ***** assert (rms (1), 1) ***** assert (rms ([1 2 -1]), sqrt (2)) ***** assert (rms ([1 2 -1]'), sqrt (2)) ***** assert (rms ([1 2], 3), [1 2]) ***** error rms () ***** error rms (1, 2, 3) ***** error rms (1, 1.5) ***** error rms (1, -1) 9 tests, 9 passed, 0 known failure, 0 skipped [inst/ultrwin.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/ultrwin.m ***** test assert(ultrwin(100, 1, 1), ones(100, 1), 1e-14); ***** test L = 201; xmu = 1.01; m = L-1; for mu = -1.35:.3:1.35 x = xmu*cos([0:m]*pi/L); C(2,:) = 2*mu*x; C(1,:) = 1; for k = 2:m; C(k+1,:) = 2*(k+mu-1)/k*x.*C(k,:) - (k+2*mu-2)/k*C(k-1,:); end b = real(ifft(C(m+1,:))); b = b(m/2+2:L)/b(1); assert(ultrwin(L, mu, xmu, "x")', [b 1 fliplr(b)], 1e-12); end ***** test b = [ 5.7962919401511820e-03 1.6086991349967078e-02 3.6019014684117417e-02 6.8897525451558125e-02 1.1802364384553447e-01 1.8566749737411145e-01 2.7234740630826737e-01 3.7625460141456091e-01 4.9297108901880221e-01 6.1558961695849457e-01 7.3527571856983598e-01 8.4222550739092694e-01 9.2688779484512085e-01 9.8125497127708561e-01]'; [w xmu] = ultrwin(29, 0, 3); assert(w', [b 1 fliplr(b)], 1e-14); assert(xmu, 1.053578297819277, 1e-14); ***** test b = [ 2.9953636903962466e-02 7.6096450051659603e-02 1.5207129867916891e-01 2.5906995366355179e-01 3.9341065451220536e-01 5.4533014012036929e-01 6.9975915071207051e-01 8.3851052636906720e-01 9.4345733548690369e-01]'; assert(ultrwin(20, .5, 50, "a")', [b 1 1 fliplr(b)], 1e-14); ***** test b = [ 1.0159906492322712e-01 1.4456358609406283e-01 2.4781689516201011e-01 3.7237015168857646e-01 5.1296973026690407e-01 6.5799041448113671e-01 7.9299087042967320e-01 9.0299778924260576e-01 9.7496213649820296e-01]'; assert(ultrwin(19, -.4, 40, "l")', [b 1 fliplr(b)], 1e-14); ***** demo w=ultrwin(120, -1, 40, "l"); [W,f]=freqz(w); clf subplot(2,1,1); plot(f/pi, 20*log10(W/abs(W(1)))); grid; axis([0 1 -90 0]) subplot(2,1,2); plot(0:length(w)-1, w); grid %----------------------------------------------------------- % Figure shows an Ultraspherical window with MU=-1, LATT=40: % frequency domain above, time domain below. ***** demo c="krbm"; clf; subplot(2, 1, 1) for beta=2:5 w=ultrwin(80, -.5, beta); [W,f]=freqz(w); plot(f/pi, 20*log10(W/abs(W(1))), c(1+mod(beta, length(c)))); hold on end; grid; axis([0 1 -140 0]); hold off subplot(2, 1, 2); for n=2:10 w=ultrwin(n*20, 1, 3); [W,f]=freqz(w,1,2^11); plot(f/pi, 20*log10(W/abs(W(1))), c(1+mod(n, length(c)))); hold on end; grid; axis([0 .2 -100 0]); hold off %-------------------------------------------------- % Figure shows transfers of Ultraspherical windows: % above: varying BETA with fixed N & MU, % below: varying N with fixed MU & BETA. ***** demo c="krbm"; clf; subplot(2, 1, 1) for j=0:4 w=ultrwin(80, j*.6-1.2, 50, "a"); [W,f]=freqz(w); plot(f/pi, 20*log10(W/abs(W(1))), c(1+mod(j, length(c)))); hold on end; grid; axis([0 1 -100 0]); hold off subplot(2, 1, 2); for j=4:-1:0 w=ultrwin(80, j*.75-1.5, 50, "l"); [W,f]=freqz(w); plot(f/pi, 20*log10(W/abs(W(1))), c(1+mod(j, length(c)))); hold on end; grid; axis([0 1 -100 0]); hold off %-------------------------------------------------- % Figure shows transfers of Ultraspherical windows: % above: varying MU with fixed N & ATT, % below: varying MU with fixed N & LATT. ***** demo clf; a=[.8 2 -115 5]; fc=1.1/pi; l="labelxy"; for k=1:3; switch (k); case 1; w=kaiser(L=159, 7.91); case 2; w=ultrwin(L=165, 0, 2.73); case 3; w=ultrwin(L=153, .5, 2.6); end subplot(3, 1, 4-k); f=[1:(L-1)/2]*pi;f=sin(fc*f)./f; f=[fliplr(f) fc f]'; [h,f]=freqz(w.*f,1,2^14); plot(f,20*log10(h)); grid; axis(a,l); l="labely"; end %----------------------------------------------------------- % Figure shows example lowpass filter design (Fp=1, Fs=1.2 % rad/s, att=80 dB) and comparison with other windows. From % top to bottom: Ultraspherical, Dolph-Chebyshev, and Kaiser % windows, with lengths 153, 165, and 159 respectively. 5 tests, 5 passed, 0 known failure, 0 skipped [inst/pei_tseng_notch.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/pei_tseng_notch.m ***** test ## 2Hz bandwidth sf = 800; sf2 = sf/2; data=[sinetone(49,sf,10,1),sinetone(50,sf,10,1),sinetone(51,sf,10,1)]; [b, a] = pei_tseng_notch ( 50 / sf2, 2 / sf2 ); filtered = filter ( b, a, data ); damp_db = 20 * log10 ( max ( filtered ( end - 1000 : end, : ) ) ); assert ( damp_db, [ -3 -251.9 -3 ], -0.1 ) ***** test ## 1Hz bandwidth sf = 800; sf2 = sf/2; data=[sinetone(49.5,sf,10,1),sinetone(50,sf,10,1),sinetone(50.5,sf,10,1)]; [b, a] = pei_tseng_notch ( 50 / sf2, 1 / sf2 ); filtered = filter ( b, a, data ); damp_db = 20 * log10 ( max ( filtered ( end - 1000 : end, : ) ) ); assert ( damp_db, [ -3 -240.4 -3 ], -0.1 ) ***** demo sf = 800; sf2 = sf/2; data=[[1;zeros(sf-1,1)],sinetone(49,sf,1,1),sinetone(50,sf,1,1),sinetone(51,sf,1,1)]; [b,a]=pei_tseng_notch ( 50 / sf2, 2/sf2 ); filtered = filter(b,a,data); clf subplot ( columns ( filtered ), 1, 1) plot(filtered(:,1),";Impulse response;") subplot ( columns ( filtered ), 1, 2 ) plot(filtered(:,2),";49Hz response;") subplot ( columns ( filtered ), 1, 3 ) plot(filtered(:,3),";50Hz response;") subplot ( columns ( filtered ), 1, 4 ) plot(filtered(:,4),";51Hz response;") 2 tests, 2 passed, 0 known failure, 0 skipped [inst/peak2peak.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/peak2peak.m ***** test X = [23 42 85; 62 46 65; 18 40 28]; Y = peak2peak (X); assert (Y, [44 6 57]); Y = peak2peak (X, 1); assert (Y, [44 6 57]); Y = peak2peak (X, 2); assert (Y, [62; 19; 22]); ***** test X = [71 62 33]; X(:, :, 2) = [88 36 21]; X(:, :, 3) = [83 46 85]; Y = peak2peak (X); T = [38]; T(:, :, 2) = [67]; T(:, :, 3) = [39]; assert (Y, T); ***** test X = [71 72 22; 16 22 50; 29 44 14]; X(:, :, 2) = [10 15 62; 1 94 30; 72 43 53]; X(:, :, 3) = [57 98 32; 84 95 51; 25 24 0]; Y = peak2peak (X); T = [55 50 36]; T(:, :, 2) = [71 79 32]; T(:, :, 3) = [59 74 51]; assert (Y, T); Y = peak2peak (X, 2); T = [50; 34; 30]; T(:, :, 2) = [52; 93; 29]; T(:, :, 3) = [66; 44; 25]; assert (Y, T); Y = peak2peak (X, 3); T = [61 83 40; 83 73 21; 47 20 53]; assert (Y, T); ***** test X = [60 61; 77 77]; X(:, :, 2) = [24 24; 22 74]; temp = [81 87; 88 62]; temp(:, :, 2) = [20 83; 81 18]; X(:, :, :, 2) = temp; Y = peak2peak (X); T = [17 16]; T(:, :, 2) = [2 50]; T2 = [7 25]; T2(:, :, 2) = [61 65]; T(:, :, :, 2) = T2; assert (Y, T); ***** error peak2peak () ***** error peak2peak (1, 2, 3) ***** error peak2peak (1, 1.5) ***** error peak2peak (1, 0) 8 tests, 8 passed, 0 known failure, 0 skipped [inst/hann.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/hann.m ***** assert (hann (1), 1); ***** assert (hann (2), zeros (2, 1)); ***** assert (hann (16), flipud (hann (16)), 10*eps); ***** assert (hann (15), flipud (hann (15)), 10*eps); ***** test N = 15; A = hann (N); assert (A(ceil (N/2)), 1); ***** assert (hann (15), hann (15, "symmetric")); ***** assert (hann (16)(1:15), hann (15, "periodic")); ***** test N = 16; A = hann (N, "periodic"); assert (A (N/2 + 1), 1); ***** error hann () ***** error hann (0.5) ***** error hann (-1) ***** error hann (1, "invalid") 12 tests, 12 passed, 0 known failure, 0 skipped [inst/db2pow.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/db2pow.m ***** shared db db = [-10, 0, 10, 20, 25]; ***** assert (db2pow (db), [0.10000, 1.00000, 10.00000, 100.00000, 316.22777], 0.00001) ***** assert (db2pow (db'), [0.10000; 1.00000; 10.00000; 100.00000; 316.22777], 0.00001) ***** error db2pow () ***** error db2pow (1, 2) 4 tests, 4 passed, 0 known failure, 0 skipped [inst/upsample.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/upsample.m ***** assert(upsample([1,3,5],2),[1,0,3,0,5,0]); ***** assert(upsample([1;3;5],2),[1;0;3;0;5;0]); ***** assert(upsample([1,2;5,6;9,10],2),[1,2;0,0;5,6;0,0;9,10;0,0]); ***** assert(upsample([2,4],2,1),[0,2,0,4]); ***** assert(upsample([3,4;7,8],2,1),[0,0;3,4;0,0;7,8]); 5 tests, 5 passed, 0 known failure, 0 skipped [inst/fht.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/fht.m ***** assert( fht([1 2 3 4]),[10 -4 -2 0] ) 1 test, 1 passed, 0 known failure, 0 skipped [inst/upsamplefill.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/upsamplefill.m ***** assert(upsamplefill([1,3,5],2),[1,2,3,2,5,2]); ***** assert(upsamplefill([1;3;5],2),[1;2;3;2;5;2]); ***** assert(upsamplefill([1,2,5],[2 -2]),[1,2,-2,2,2,-2,5,2,-2]); ***** assert(upsamplefill(eye(2),2,true),[1,0;1,0;1,0;0,1;0,1;0,1]); ***** assert(upsamplefill([1,3,5],2,true),[1,1,1,3,3,3,5,5,5]); ***** assert(upsamplefill([1;3;5],2,true),[1;1;1;3;3;3;;5;5;5]); 6 tests, 6 passed, 0 known failure, 0 skipped [inst/tf2sos.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/tf2sos.m ***** test B=[1 0 0 0 0 1]; A=[1 0 0 0 0 .9]; [sos,g] = tf2sos(B,A); [Bh,Ah] = sos2tf(sos,g); assert({Bh,Ah},{B,A},100*eps); 1 test, 1 passed, 0 known failure, 0 skipped [inst/rceps.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/rceps.m ***** test ## accepts matrices x = randn (32, 3); [y, xm] = rceps (x); ## check the mag-phase response of the reproduction hx = fft (x); hxm = fft (xm); assert (abs (hx), abs (hxm), 200*eps); # good magnitude response match ## FIXME: test for minimum phase? Stop using random datasets! #assert (arg (hx) != arg (hxm)); # phase mismatch ***** test ## accepts column and row vectors x = randn (256, 1); [y, xm] = rceps (x); [yt, xmt] = rceps (x.'); assert (yt.', y, 1e-14); assert (xmt.', xm, 1e-14); ***** test x = randn (33, 4); [y, xm] = rceps (x); assert (size (y), size (x)); assert (size (xm), size (x)); ***** error rceps ***** error rceps (1, 2) ***** error rceps (0) ***** error rceps (zeros (10, 1)) ***** demo f0 = 70; Fs = 10000; # 100 Hz fundamental, 10 kHz sampling rate a = real (poly (0.985 * exp (1i * pi * [0.1, -0.1, 0.3, -0.3]))); # two formants s = 0.05 * randn (1024, 1); # Noise excitation signal s(floor (1:Fs/f0:length (s))) = 1; # Impulse glottal wave x = filter (1, a, s); # Speech signal in x [y, xm] = rceps (x); # cepstrum and minimum phase x [hx, w] = freqz (x, 1, [], Fs); hxm = freqz (xm); figure (1); subplot (311); len = 1000 * fix (min (length (x), length (xm)) / 1000); plot ([0:len-1] * 1000 / Fs, x(1:len), "b;signal;", ... [0:len-1] * 1000 / Fs, xm(1:len), "g;reconstruction;"); ylabel ("Amplitude"); xlabel ("Time (ms)"); subplot (312); axis ("ticy"); plot (w, log (abs (hx)), ";magnitude;", ... w, log (abs (hxm)), ";reconstruction;"); xlabel ("Frequency (Hz)"); subplot (313); axis ("on"); plot (w, unwrap (arg (hx)) / (2 * pi), ";phase;", ... w, unwrap (arg (hxm)) / (2 * pi), ";reconstruction;"); xlabel ("Frequency (Hz)"); len = 1000 * fix (length (y) / 1000); figure (2); plot ([0:len-1] * 1000 / Fs, y(1:len), ";cepstrum;"); ylabel ("Amplitude"); xlabel ("Quefrency (ms)"); %------------------------------------------------------------- % confirm the magnitude spectrum is identical in the signal % and the reconstruction and that there are peaks in the % cepstrum at 14 ms intervals corresponding to an F0 of 70 Hz. 7 tests, 7 passed, 0 known failure, 0 skipped [inst/rectwin.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/rectwin.m ***** assert (rectwin (1), 1) ***** assert (rectwin (2), ones (2, 1)) ***** assert (rectwin (100), ones (100, 1)) ***** error rectwin () ***** error rectwin (0.5) ***** error rectwin (-1) ***** error rectwin (ones (1, 4)) ***** error rectwin (1, 2) 8 tests, 8 passed, 0 known failure, 0 skipped [inst/cheb1ord.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/cheb1ord.m ***** demo fs = 44100; fpass = 4000; fstop = 10988; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby1 (n, Rpass, Wn_p); SYS = tf (b, a, 1 / fs); f = (0:fs/2)'; W = f * (2 * pi / fs); [H, P] = bode (SYS, 2 * pi * f); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev low-pass Typ I : matching pass band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on; plot (outline_lp_pass_x, outline_lp_pass_y, "m"); plot (outline_lp_stop_x, outline_lp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fpass = 4000; fstop = 10988; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby1 (n, Rpass, Wn_s); SYS = tf (b, a, 1 / fs); f = (0:fs/2)'; W = f * (2 * pi / fs); [H, P] = bode (SYS, 2 * pi * f); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev low-pass Typ I : matching stop band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on; plot (outline_lp_pass_x, outline_lp_pass_y, "m"); plot (outline_lp_stop_x, outline_lp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fstop = 4000; fpass = 10988; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby1 (n, Rpass, Wn_p, "high"); f = (0:fs/2)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev high-pass Typ I : matching pass band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [min(f) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on; plot (outline_hp_pass_x, outline_hp_pass_y, "m"); plot (outline_hp_stop_x, outline_hp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fstop = 4000; fpass = 10988; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby1 (n, Rpass, Wn_s, "high"); f = (0:fs/2)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev high-pass Typ I : matching stop band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [min(f) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on; plot (outline_hp_pass_x, outline_hp_pass_y, "m"); plot (outline_hp_stop_x, outline_hp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fpass = [9500 9750]; fstop = [8500, 10052]; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby1 (n, Rpass, Wn_p); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev band-pass Typ I : matching pass band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fs = 44100; fpass = [9500 9750]; fstop = [8500, 10052]; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby1 (n, Rpass, Wn_s); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev band-pass Typ I : matching stop band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fs = 44100; fpass = [9500 9750]; fstop = [9182 12000]; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby1 (n, Rpass, Wn_p); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev band-pass Typ I : matching pass band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fs = 44100; fpass = [9500 9750]; fstop = [9182 12000]; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby1 (n, Rpass, Wn_s); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev band-pass Typ I : matching stop band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fs = 44100; fstop = [9875, 10126.5823]; fpass = [8500, 10834]; Rpass = 0.5; Rstop = 40; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby1 (n, Rpass, Wn_p, "stop"); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); Ampl = abs (H); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev notch Typ I : matching pass band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fstop = [9875, 10126.5823]; fpass = [8500, 10834]; Rpass = 0.5; Rstop = 40; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby1 (n, Rpass, Wn_s, "stop"); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); Ampl = abs (H); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev notch Typ I : matching stop band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fstop = [9875, 10126.5823]; fpass = [9182, 12000]; Rpass = 0.5; Rstop = 40; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby1 (n, Rpass, Wn_p, "stop"); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); Ampl = abs (H); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev notch Typ I : matching pass band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fstop = [9875, 10126.5823]; fpass = [9182, 12000]; Rpass = 0.5; Rstop = 40; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop) [b, a] = cheby1 (n, Rpass, Wn_s, "stop"); f = (6000:14000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); Ampl = abs (H); plot (f, 20 * log10 (abs (H))); title ("Digital Chebyshev notch Typ I : matching stop band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fpass = 4000; fstop = 13584; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby1 (n, Rpass, Wn_p, "s"); f = 1000:10:100000; W = 2 * pi * f; H = freqs (b, a, W); semilogx (f, 20 * log10 (abs (H))); title ("Analog Chebyshev low-pass Typ I : matching pass band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on; plot (outline_lp_pass_x, outline_lp_pass_y, "m"); plot (outline_lp_stop_x, outline_lp_stop_y, "m"); ylim ([-80, 0]); ***** demo fpass = 4000; fstop = 13584; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby1 (n, Rpass, Wn_s, "s"); f = 1000:10:100000; W = 2 * pi * f; H = freqs (b, a, W); semilogx (f, 20 * log10 (abs (H))); title ("Analog Chebyshev low-pass Typ I : matching stop band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on; plot (outline_lp_pass_x, outline_lp_pass_y, "m"); plot (outline_lp_stop_x, outline_lp_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = 4000; fpass = 13584; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby1 (n, Rpass, Wn_p, "high", "s"); f = 1000:10:100000; W = 2 * pi * f; H = freqs (b, a, W); semilogx (f, 20 * log10 (abs (H))); title ("Analog Chebyshev high-pass Typ I : matching pass band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on; plot (outline_hp_pass_x, outline_hp_pass_y, "m"); plot (outline_hp_stop_x, outline_hp_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = 4000; fpass = 13584; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby1 (n, Rpass, Wn_s, "high", "s"); f = 1000:10:100000; W = 2 * pi * f; H = freqs (b, a, W); semilogx (f, 20 * log10 (abs (H))); title ("Analog Chebyshev high-pass Typ I : matching stop band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on; plot (outline_hp_pass_x, outline_hp_pass_y, "m"); plot (outline_hp_stop_x, outline_hp_stop_y, "m"); ylim ([-80, 0]); ***** demo fpass = [9875, 10126.5823]; fstop = [9000, 10437]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby1 (n, Rpass, Wn_p, "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev band-pass Typ I : matching pass band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fpass = [9875, 10126.5823]; fstop = [9000, 10437]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby1 (n, Rpass, Wn_s, "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev band-pass Typ I : matching stop band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fpass = [9875, 10126.5823]; fstop = [9581, 12000]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby1 (n, Rpass, Wn_p, "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev band-pass Typ I : matching pass band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fpass = [9875, 10126.5823]; fstop = [9581, 12000]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby1 (n, Rpass, Wn_s, "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev band-pass Typ I : matching stop band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); grid on; ylim ([-80, 0]); ***** demo fstop = [9875, 10126.5823]; fpass = [9000, 10437]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby1 (n, Rpass, Wn_p, "stop", "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev notch Typ I : matching pass band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = [9875, 10126.5823]; fpass = [9000, 10437]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby1 (n, Rpass, Wn_s, "stop", "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev notch Typ I : matching stop band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = [9875, 10126.5823]; fpass = [9581 12000]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby1 (n, Rpass, Wn_p, "stop", "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev notch Typ I : matching pass band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = [9875, 10126.5823]; fpass = [9581 12000]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = cheb1ord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = cheby1 (n, Rpass, Wn_s, "stop", "s"); f = 6000:14000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Chebyshev notch Typ I : matching stop band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , 0, 0 ]; hold on plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** test # Analog band-pass [n, Wn_p, Wn_s] = cheb1ord (2 * pi * [9875, 10126.5823], ... 2 * pi * [9000, 10437], 1, 26, "s"); assert (n, 3); assert (round (Wn_p), [62046, 63627]); assert (round (Wn_s), [61652, 64035]); ***** test # Analog band-pass [n, Wn_p, Wn_s] = cheb1ord (2 * pi * [9875, 10126.5823], ... 2 * pi * [9581 12000], 1, 26, "s"); assert (n, 3); assert (round (Wn_p), [62046, 63627]); assert (round (Wn_s), [61651, 64036]); ***** test # Analog high-pass [n, Wn_p, Wn_s] = cheb1ord (2 * pi * 13584, 2 * pi * 4000, 1, 26, "s"); assert (n, 3); assert (round (Wn_p), 85351); assert (round (Wn_s), 56700); ***** test # Analog low-pass [n, Wn_p, Wn_s] = cheb1ord (2 * pi * 4000, 2 * pi * 13584, 1, 26, "s"); assert (n, 3); assert (round (Wn_p), 25133); assert (round (Wn_s), 37832); ***** test # Analog notch (narrow band-stop) [n, Wn_p, Wn_s] = cheb1ord (2 * pi * [9000, 10437], ... 2 * pi * [9875, 10126.5823], 1, 26, "s"); assert (n, 3); assert (round (Wn_p), [60201, 65578]); assert (round (Wn_s), [61074, 64640]); ***** test # Analog notch (narrow band-stop) [n, Wn_p, Wn_s] = cheb1ord (2 * pi * [9581, 12000], ... 2 * pi * [9875, 10126.5823], 1, 26, "s"); assert (n, 3); assert (round (Wn_p), [60199, 65580]); assert (round (Wn_s), [61074, 64640]); ***** test # Digital band-pass fs = 44100; [n, Wn_p, Wn_s] = cheb1ord (2 / fs * [9500, 9750], ... 2 / fs * [8500, 10052], 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), [9500, 9750]); assert (round (Wn_s), [9437, 9814]); ***** test # Digital band-pass fs = 44100; [n, Wn_p, Wn_s] = cheb1ord (2 / fs * [9500, 9750], ... 2 / fs * [9182, 12000], 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), [9500, 9750]); assert (round (Wn_s), [9428, 9823]); ***** test # Digital high-pass fs = 44100; [n, Wn_p, Wn_s] = cheb1ord (2 / fs * 10988, 2 / fs * 4000, 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), 10988); assert (round (Wn_s), 8197); ***** test # Digital low-pass fs = 44100; [n, Wn_p, Wn_s] = cheb1ord (2 / fs * 4000, 2 / fs * 10988, 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), 4000); assert (round (Wn_s), 5829); ***** test # Digital notch (narrow band-stop) fs = 44100; [n, Wn_p, Wn_s] = cheb1ord (2 / fs * [8500, 10834], ... 2 / fs * [9875, 10126.5823], 0.5, 40); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), [9182, 10834]); assert (round (Wn_s), [9475, 10532]); ***** test # Digital notch (narrow band-stop) fs = 44100; [n, Wn_p, Wn_s] = cheb1ord (2 / fs * [9182 12000], ... 2 / fs * [9875, 10126.5823], 0.5, 40); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), [9182, 10834]); assert (round (Wn_s), [9475, 10532]); ***** error cheb1ord () ***** error cheb1ord (.1) ***** error cheb1ord (.1, .2) ***** error cheb1ord (.1, .2, 3) ***** error cheb1ord ([.1 .1], [.2 .2], 3, 4) ***** error cheb1ord ([.1 .2], [.5 .6], 3, 4) ***** error cheb1ord ([.1 .5], [.2 .6], 3, 4) 19 tests, 19 passed, 0 known failure, 0 skipped [inst/czt.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/czt.m ***** shared x x = [1,2,4,1,2,3,5,2,3,5,6,7,8,4,3,6,3,2,5,1]; ***** assert(fft(x),czt(x),10000*eps); ***** assert(fft(x'),czt(x'),10000*eps); ***** assert(fft([x',x']),czt([x',x']),10000*eps); 3 tests, 3 passed, 0 known failure, 0 skipped [inst/findpeaks.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/findpeaks.m ***** demo t = 2*pi*linspace(0,1,1024)'; y = sin(3.14*t) + 0.5*cos(6.09*t) + 0.1*sin(10.11*t+1/6) + 0.1*sin(15.3*t+1/3); data1 = abs(y); # Positive values [pks idx] = findpeaks(data1); data2 = y; # Double-sided [pks2 idx2] = findpeaks(data2,"DoubleSided"); [pks3 idx3] = findpeaks(data2,"DoubleSided","MinPeakHeight",0.5); subplot(1,2,1) plot(t,data1,t(idx),data1(idx),'xm') axis tight subplot(1,2,2) plot(t,data2,t(idx2),data2(idx2),"xm;>2*std;",t(idx3),data2(idx3),"or;>0.1;") axis tight legend("Location","NorthOutside","Orientation","horizontal") #---------------------------------------------------------------------------- # Finding the peaks of smooth data is not a big deal! ***** demo t = 2*pi*linspace(0,1,1024)'; y = sin(3.14*t) + 0.5*cos(6.09*t) + 0.1*sin(10.11*t+1/6) + 0.1*sin(15.3*t+1/3); data = abs(y + 0.1*randn(length(y),1)); # Positive values + noise [pks idx] = findpeaks(data,"MinPeakHeight",1); dt = t(2)-t(1); [pks2 idx2] = findpeaks(data,"MinPeakHeight",1,... "MinPeakDistance",round(0.5/dt)); subplot(1,2,1) plot(t,data,t(idx),data(idx),'or') subplot(1,2,2) plot(t,data,t(idx2),data(idx2),'or') #---------------------------------------------------------------------------- # Noisy data may need tuning of the parameters. In the 2nd example, # MinPeakDistance is used as a smoother of the peaks. ***** assert (isempty (findpeaks ([1, 1, 1]))) ***** assert (isempty (findpeaks ([1; 1; 1]))) ***** test ## Test input vector is an oversampled sinusoid with clipped peaks x = min (3, cos (2*pi*[0:8000] ./ 600) + 2.01); assert (! isempty (findpeaks (x))) ***** error findpeaks () ***** error findpeaks (1) ***** error findpeaks ([1, 2]) ***** test assert (findpeaks ([34 134 353 64 134 14 56 67 234 143 64 575 8657]), [353 134 234]) 7 tests, 7 passed, 0 known failure, 0 skipped [inst/cconv.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/cconv.m ***** shared x x = [1, 2, 3, 4, 5]; ***** assert (cconv (x, 1), [1, 2, 3, 4, 5], 2*eps) ***** assert (cconv (x', 1), [1; 2; 3; 4; 5], 2*eps) ***** assert (real (cconv (x, [1 1])), [1, 3, 5, 7, 9, 5], 2*eps) ***** assert (cconv (x, [1 1], 3), [8, 12, 10]) ***** assert (cconv ([2 1 2 1], [1 2 3 4]), [2 5 10 16 12 11 4], 1e-14) ***** assert (cconv ([2 1 2 1], [1 2 3 4], 4), [14 16 14 16]) ***** assert (cconv ([2 1 2 1], [1 2 3 4], 3), [22 17 21]) ***** assert (cconv ([2 1 2 1], [1 2 3 4], 2), [28 32]) ***** assert (cconv ([2 1 2 1], [1 2 3 4], 1), 60) ***** assert (cconv (x*j, 1), [1j, 2j, 3j, 4j, 5j]) ***** assert (cconv (x'*j, 1), [1j; 2j; 3j; 4j; 5j]) ***** error cconv () ***** error cconv (1) ***** error cconv (1, 1, [1 1]) ***** error cconv (ones (2, 2), 1) ***** error cconv (1, ones (2, 2)) ***** error cconv (1, 1, 3.5) 17 tests, 17 passed, 0 known failure, 0 skipped [inst/buttord.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/buttord.m ***** demo fs = 44100; Npts = fs / 2; fpass = 4000; fstop = 10987; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop) [b, a] = butter (n, Wn_p); f = 8000:12000; W = 2 * pi * f; [H, f] = freqz (b, a, Npts, fs); plot (f, 20 * log10 (abs (H))); title ("Digital Butterworth low-pass : matching pass band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on; plot (outline_lp_pass_x, outline_lp_pass_y, "m"); plot (outline_lp_stop_x, outline_lp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; Npts = fs / 2; fpass = 4000; fstop = 10987; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop) [b, a] = butter (n, Wn_s); f = 8000:12000; W = 2 * pi * f; [H, f] = freqz (b, a, Npts, fs); plot (f, 20 * log10 (abs (H))); title ("Digital Butterworth low-pass : matching stop band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on; plot (outline_lp_pass_x, outline_lp_pass_y, "m"); plot (outline_lp_stop_x, outline_lp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; Npts = fs / 2; fstop = 4000; fpass = 10987; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop) [b, a] = butter (n, Wn_p, "high"); f = 8000:12000; W = 2 * pi * f; [H, f] = freqz (b, a, Npts, fs); plot (f, 20 * log10 (abs (H))); title ("Digital Butterworth high-pass : matching pass band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [min(f) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on; plot (outline_hp_pass_x, outline_hp_pass_y, "m"); plot (outline_hp_stop_x, outline_hp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; Npts = fs / 2; fstop = 4000; fpass = 10987; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop) [b, a] = butter (n, Wn_s, "high"); f = 8000:12000; W = 2 * pi * f; [H, f] = freqz (b, a, Npts, fs); plot (f, 20 * log10 (abs (H))) title ("Digital Butterworth high-pass : matching stop band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [min(f) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on; plot (outline_hp_pass_x, outline_hp_pass_y, "m"); plot (outline_hp_stop_x, outline_hp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fpass = [9500 9750]; fstop = [8500 10051]; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop) [b, a] = butter (n, Wn_p); f = (8000:12000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Butterworth band-pass : matching pass band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on; plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fpass = [9500 9750]; fstop = [8500 10051]; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop) [b, a] = butter (n, Wn_s); f = (8000:12000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Butterworth band-pass : matching stop band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on; plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fpass = [9500 9750]; fstop = [9204 10700]; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop) [b, a] = butter (n, Wn_p); f = (8000:12000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Butterworth band-pass : matching pass band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on; plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fpass = [9500 9750]; fstop = [9204 10700]; Rpass = 1; Rstop = 26; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop) [b, a] = butter (n, Wn_s); f = (8000:12000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Butterworth band-pass : matching stop band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on; plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fstop = [9875, 10126.5823]; fpass = [8500 10833]; Rpass = 0.5; Rstop = 40; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop) [b, a] = butter (n, Wn_p, "stop"); f = (8000:12000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Butterworth notch : matching pass band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , ... 0 , 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fstop = [9875, 10126.5823]; fpass = [8500 10833]; Rpass = 0.5; Rstop = 40; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop) [b, a] = butter (n, Wn_s, "stop"); f = (8000:12000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Butterworth notch : matching stop band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , ... 0 , 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fstop = [9875, 10126.5823]; fpass = [9183 11000]; Rpass = 0.5; Rstop = 40; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop) [b, a] = butter (n, Wn_p, "stop"); f = (8000:12000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Butterworth notch : matching pass band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , ... 0 , 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fs = 44100; fstop = [9875, 10126.5823]; fpass = [9183 11000]; Rpass = 0.5; Rstop = 40; Wpass = 2 / fs * fpass; Wstop = 2 / fs * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop) [b, a] = butter (n, Wn_s, "stop"); f = (8000:12000)'; W = f * (2 * pi / fs); H = freqz (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Digital Butterworth notch : matching stop band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [min(f) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [min(f) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , ... 0 , 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fpass = 4000; fstop = 13583; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = butter (n, Wn_p, "s"); f = 1000:10:100000; W = 2 * pi * f; H = freqs (b, a, W); semilogx (f, 20 * log10 (abs (H))) title ("Analog Butterworth low-pass : matching pass band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on; plot (outline_lp_pass_x, outline_lp_pass_y, "m"); plot (outline_lp_stop_x, outline_lp_stop_y, "m"); ylim ([-80, 0]); ***** demo fpass = 4000; fstop = 13583; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = butter (n, Wn_s, "s"); f = 1000:10:100000; W = 2 * pi * f; H = freqs (b, a, W); semilogx (f, 20 * log10 (abs (H))); title ("Analog Butterworth low-pass : matching stop band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_lp_pass_x = [f(2) , fpass(1), fpass(1)]; outline_lp_pass_y = [-Rpass, -Rpass , -80]; outline_lp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_lp_stop_y = [0 , 0 , -Rstop , -Rstop]; hold on; plot (outline_lp_pass_x, outline_lp_pass_y, "m"); plot (outline_lp_stop_x, outline_lp_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = 4000; fpass = 13583; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = butter (n, Wn_p, "high", "s"); f = 1000:10:100000; W = 2 * pi * f; H = freqs (b, a, W); semilogx (f, 20 * log10 (abs (H))); title ("Analog Butterworth high-pass : matching pass band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on; plot (outline_hp_pass_x, outline_hp_pass_y, "m"); plot (outline_hp_stop_x, outline_hp_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = 4000; fpass = 13583; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = butter (n, Wn_s, "high", "s"); f = 1000:10:100000; W = 2 * pi * f; H = freqs (b, a, W); semilogx (f, 20 * log10 (abs (H))); title ("Analog Butterworth high-pass : matching stop band"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_hp_pass_x = [fpass(1), fpass(1), max(f)]; outline_hp_pass_y = [-80 , -Rpass , -Rpass]; outline_hp_stop_x = [f(2) , fstop(1), fstop(1), max(f)]; outline_hp_stop_y = [-Rstop , -Rstop , 0 , 0 ]; hold on; plot (outline_hp_pass_x, outline_hp_pass_y, "m"); plot (outline_hp_stop_x, outline_hp_stop_y, "m"); ylim ([-80, 0]); ***** demo fpass = [9875, 10126.5823]; fstop = [9000, 10436]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = butter (n, Wn_p, "s"); f = 8000:12000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Butterworth band-pass : matching pass band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on; plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); ylim ([-80, 0]); ***** demo fpass = [9875, 10126.5823]; fstop = [9000, 10436]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = butter (n, Wn_s, "s"); f = 8000:12000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Butterworth band-pass : matching stop band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on; plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); ylim ([-80, 0]); ***** demo fpass = [9875, 10126.5823]; fstop = [9582, 11000]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = butter (n, Wn_p, "s"); f = 8000:12000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Butterworth band-pass : matching pass band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on; plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); ylim ([-80, 0]); ***** demo fpass = [9875, 10126.5823]; fstop = [9582, 11000]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = butter (n, Wn_s, "s"); f = 8000:12000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Butterworth band-pass : matching stop band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_bp_pass_x = [fpass(1), fpass(1), fpass(2), fpass(2)]; outline_bp_pass_y = [-80 , -Rpass , -Rpass , -80]; outline_bp_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_bp_stop_y = [-Rstop , -Rstop , 0 , 0 , ... -Rstop , -Rstop]; hold on; plot (outline_bp_pass_x, outline_bp_pass_y, "m"); plot (outline_bp_stop_x, outline_bp_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = [9875 10126.5823]; fpass = [9000 10436]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = butter (n, Wn_p, "stop", "s"); f = 8000:12000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Butterworth notch : matching pass band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , ... 0 , 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = [9875 10126.5823]; fpass = [9000 10436]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = butter (n, Wn_s, "stop", "s"); f = 8000:12000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Butterworth notch : matching stop band, limit on upper freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , ... 0 , 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = [9875 10126.5823]; fpass = [9582 11000]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = butter (n, Wn_p, "stop", "s"); f = 8000:12000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Butterworth notch : matching pass band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , ... 0 , 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** demo fstop = [9875 10126.5823]; fpass = [9582 11000]; Rpass = 1; Rstop = 26; Wpass = 2 * pi * fpass; Wstop = 2 * pi * fstop; [n, Wn_p, Wn_s] = buttord (Wpass, Wstop, Rpass, Rstop, "s") [b, a] = butter (n, Wn_s, "stop", "s"); f = 8000:12000; W = 2 * pi * f; H = freqs (b, a, W); plot (f, 20 * log10 (abs (H))); title ("Analog Butterworth notch : matching stop band, limit on lower freq"); xlabel ("Frequency (Hz)"); ylabel ("Attenuation (dB)"); grid on; outline_notch_pass_x_a = [f(2) , fpass(1), fpass(1)]; outline_notch_pass_x_b = [fpass(2), fpass(2), max(f)]; outline_notch_pass_y_a = [-Rpass , -Rpass , -80]; outline_notch_pass_y_b = [-80 , -Rpass , -Rpass]; outline_notch_stop_x = [f(2) , fstop(1), fstop(1), fstop(2), ... fstop(2), max(f)]; outline_notch_stop_y = [0 , 0 , -Rstop , -Rstop , ... 0 , 0 ]; hold on; plot (outline_notch_pass_x_a, outline_notch_pass_y_a, "m"); plot (outline_notch_pass_x_b, outline_notch_pass_y_b, "m"); plot (outline_notch_stop_x, outline_notch_stop_y, "m"); ylim ([-80, 0]); ***** test # Analog band-pass [n, Wn_p, Wn_s] = buttord (2 * pi * [9875, 10126.5823], ... 2 * pi * [9000, 10436], 1, 26, "s"); assert (n, 4); assert (round (Wn_p), [61903, 63775]); assert (round (Wn_s), [61575, 64114]); ***** test # Analog band-pass [n, Wn_p, Wn_s] = buttord (2 * pi * [9875, 10126.5823], ... 2 * pi * [9582, 11000], 1, 26, "s"); assert (n, 4); assert (round (Wn_p), [61903, 63775]); assert (round (Wn_s), [61575, 64115]); ***** test # Analog band-pass [n, Wn_p, Wn_s] = buttord (2 * pi * [9875, 10126.5823], ... 2 * pi * [9000, 10437], 1, 26, "s"); assert (n, 3); assert (round (Wn_p), [61850, 63830]); assert (round (Wn_s), [61848, 63831]); ***** test # Analog band-pass [n, Wn_p, Wn_s] = buttord (2 * pi * [9875, 10126.5823], ... 2 * pi * [9581, 11000], 1, 26, "s"); assert (n, 3); assert (round (Wn_p), [61850, 63830]); assert (round (Wn_s), [61847, 63832]); ***** test # Analog high-pass [n, Wn_p, Wn_s] = buttord (2 * pi * 13583, 2 * pi * 4000, 1, 26, "s"); assert (n, 4); assert (round (Wn_p), 72081); assert (round (Wn_s), 53101); ***** test # Analog high-pass [n, Wn_p, Wn_s] = buttord (2 * pi * 13584, 2 * pi * 4000, 1, 26, "s"); assert (n, 3); assert (round (Wn_p), 68140); assert (round (Wn_s), 68138); ***** test # Analog low-pass [n, Wn_p, Wn_s] = buttord (2 * pi * 4000, 2 * pi * 13583, 1, 26, "s"); assert (n, 4); assert (round (Wn_p), 29757); assert (round (Wn_s), 40394); ***** test # Analog low-pass [n, Wn_p, Wn_s] = buttord (2 * pi * 4000, 2 * pi * 13584, 1, 26, "s"); assert (n, 3); assert (round (Wn_p), 31481); assert (round (Wn_s), 31482); ***** test # Analog notch (narrow band-stop) [n, Wn_p, Wn_s] = buttord (2 * pi * [9000, 10436], ... 2 * pi * [9875, 10126.5823], 1, 26, "s"); assert (n, 4); assert (round (Wn_p), [60607, 65138]); assert (round (Wn_s), [61184, 64524]); ***** test # Analog notch (narrow band-stop) [n, Wn_p, Wn_s] = buttord (2 * pi * [9582, 11000], ... 2 * pi * [9875, 10126.5823], 1, 26, "s"); assert (n, 4); assert (round (Wn_p), [60606, 65139]); assert (round (Wn_s), [61184, 64524]); ***** test # Analog notch (narrow band-stop) [n, Wn_p, Wn_s] = buttord (2 * pi * [9000, 10437], ... 2 * pi * [9875, 10126.5823], 1, 26, "s"); assert (n, 3); assert (round (Wn_p), [60722, 65015]); assert (round (Wn_s), [60726, 65011]); ***** test # Analog notch (narrow band-stop) [n, Wn_p, Wn_s] = buttord (2 * pi * [9581, 11000], ... 2 * pi * [9875, 10126.5823], 1, 26, "s"); assert (n, 3); assert (round (Wn_p), [60721, 65016]); assert (round (Wn_s), [60726, 65011]); ***** test # Digital band-pass fs = 44100; [n, Wn_p, Wn_s] = buttord (2 / fs * [9500, 9750], ... 2 / fs * [8500, 10051], 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 4); assert (round (Wn_p), [9477, 9773]); assert (round (Wn_s), [9425, 9826]); ***** test # Digital band-pass fs = 44100; [n, Wn_p, Wn_s] = buttord (2 / fs * [9500, 9750], ... 2 / fs * [9204, 10700], 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 4); assert (round (Wn_p), [9477, 9773]); assert (round (Wn_s), [9425, 9826]); ***** test # Digital band-pass fs = 44100; [n, Wn_p, Wn_s] = buttord (2 / fs * [9500, 9750], ... 2 / fs * [8500, 10052], 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), [9469, 9782]); assert (round (Wn_s), [9468, 9782]); ***** test # Digital band-pass fs = 44100; [n, Wn_p, Wn_s] = buttord (2 / fs * [9500, 9750], ... 2 / fs * [9203, 10700], 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), [9469, 9782]); assert (round (Wn_s), [9468, 9782]); ***** test # Digital high-pass fs = 44100; [n, Wn_p, Wn_s] = buttord (2 / fs * 10987, 2 / fs * 4000, 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 4); assert (round (Wn_p), 9808); assert (round (Wn_s), 7780); ***** test # Digital high-pass fs = 44100; [n, Wn_p, Wn_s] = buttord (2 / fs * 10988, 2 / fs * 4000, 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), 9421); assert (round (Wn_s), 9421); ***** test # Digital low-pass fs = 44100; [n, Wn_p, Wn_s] = buttord (2 / fs * 4000, 2 / fs * 10987, 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 4); assert (round (Wn_p), 4686); assert (round (Wn_s), 6176); ***** test # Digital low-pass fs = 44100; [n, Wn_p, Wn_s] = buttord (2 / fs * 4000, 2 / fs * 10988, 1, 26); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), 4936); assert (round (Wn_s), 4936); ***** test # Digital notch (narrow band-stop) fs = 44100; [n, Wn_p, Wn_s] = buttord (2 / fs * [8500, 10833], ... 2 / fs * [9875, 10126.5823], 0.5, 40); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 4); assert (round (Wn_p), [9369, 10640]); assert (round (Wn_s), [9605, 10400]); ***** test # Digital notch (narrow band-stop) fs = 44100; [n, Wn_p, Wn_s] = buttord (2 / fs * [9183, 11000], ... 2 / fs * [9875, 10126.5823], 0.5, 40); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 4); assert (round (Wn_p), [9370, 10640]); assert (round (Wn_s), [9605, 10400]); ***** test # Digital notch (narrow band-stop) fs = 44100; [n, Wn_p, Wn_s] = buttord (2 / fs * [8500, 10834], ... 2 / fs * [9875, 10126.5823], 0.5, 40); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), [9421, 10587]); assert (round (Wn_s), [9422, 10587]); ***** test # Digital notch (narrow band-stop) fs = 44100; [n, Wn_p, Wn_s] = buttord (2 / fs * [9182, 11000], ... 2 / fs * [9875, 10126.5823], 0.5, 40); Wn_p = Wn_p * fs / 2; Wn_s = Wn_s * fs / 2; assert (n, 3); assert (round (Wn_p), [9421, 10587]); assert (round (Wn_s), [9422, 10587]); ***** error buttord () ***** error buttord (.1) ***** error buttord (.1, .2) ***** error buttord (.1, .2, 3) ***** error buttord ([.1 .1], [.2 .2], 3, 4) ***** error buttord ([.1 .2], [.5 .6], 3, 4) ***** error buttord ([.1 .5], [.2 .6], 3, 4) 31 tests, 31 passed, 0 known failure, 0 skipped [inst/ifwht.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/ifwht.m ***** assert (isempty (ifwht ([]))); ***** assert (ifwht (zeros (16)), zeros (16)); ***** assert (ifwht ([1; (zeros (15, 1))]), ones (16, 1)); ***** assert (ifwht (zeros (17, 1)), zeros (32, 1)); ***** assert (ifwht ([0 0 0 0 0 0 0 1]), [1 -1 1 -1 1 -1 1 -1]); ***** error ifwht (); ***** error ifwht (1, 2, 3, 4); ***** error ifwht (0, 0); ***** error ifwht (0, 5); ***** error ifwht (0, [], "invalid"); 10 tests, 10 passed, 0 known failure, 0 skipped [inst/sgolay.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/sgolay.m ***** test N=2^12; t=[0:N-1]'/N; dt=t(2)-t(1); w = 2*pi*50; offset = 0.5; # 50 Hz carrier # exponential modulation and its derivatives d = 1+exp(-3*(t-offset)); dd = -3*exp(-3*(t-offset)); d2d = 9*exp(-3*(t-offset)); d3d = -27*exp(-3*(t-offset)); # modulated carrier and its derivatives x = d.*sin(w*t); dx = dd.*sin(w*t) + w*d.*cos(w*t); d2x = (d2d-w^2*d).*sin(w*t) + 2*w*dd.*cos(w*t); d3x = (d3d-3*w^2*dd).*sin(w*t) + (3*w*d2d-w^3*d).*cos(w*t); y = sgolayfilt(x,sgolay(8,41,0,dt)); assert(norm(y-x)/norm(x),0,5e-6); y = sgolayfilt(x,sgolay(8,41,1,dt)); assert(norm(y-dx)/norm(dx),0,5e-6); y = sgolayfilt(x,sgolay(8,41,2,dt)); assert(norm(y-d2x)/norm(d2x),0,1e-5); y = sgolayfilt(x,sgolay(8,41,3,dt)); assert(norm(y-d3x)/norm(d3x),0,1e-4); 1 test, 1 passed, 0 known failure, 0 skipped [inst/tukeywin.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/tukeywin.m ***** demo m = 100; r = 1/3; w = tukeywin (m, r); title(sprintf("%d-point Tukey window, R = %d/%d", m, [p, q] = rat(r), q)); plot(w); ***** assert (tukeywin (1), 1) ***** assert (tukeywin (2), zeros (2, 1)) ***** assert (tukeywin (3), [0; 1; 0]) ***** assert (tukeywin (16, 0), rectwin (16)) ***** assert (tukeywin (16, 1), hanning (16)) ***** error tukeywin () ***** error tukeywin (0.5) ***** error tukeywin (-1) ***** error tukeywin (ones (1, 4)) ***** error tukeywin (1, 2, 3) 10 tests, 10 passed, 0 known failure, 0 skipped [inst/specgram.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/specgram.m ***** shared S,f,t,x Fs=1000; x = chirp([0:1/Fs:2],0,2,500); # freq. sweep from 0-500 over 2 sec. step=ceil(20*Fs/1000); # one spectral slice every 20 ms window=ceil(100*Fs/1000); # 100 ms data window [S, f, t] = specgram(x); ## test of returned shape ***** assert (rows(S), 128) ***** assert (columns(f), rows(S)) ***** assert (columns(t), columns(S)) ***** test [S, f, t] = specgram(x'); ***** assert (rows(S), 128) ***** assert (columns(f), rows(S)); ***** assert (columns(t), columns(S)); ***** error (isempty(specgram([]))); ***** error (isempty(specgram([1, 2 ; 3, 4]))); ***** error (specgram) ***** demo Fs=1000; x = chirp([0:1/Fs:2],0,2,500); # freq. sweep from 0-500 over 2 sec. step=ceil(20*Fs/1000); # one spectral slice every 20 ms window=ceil(100*Fs/1000); # 100 ms data window ## test of automatic plot [S, f, t] = specgram(x); specgram(x, 2^nextpow2(window), Fs, window, window-step); ***** #demo # FIXME: Enable once we have an audio file to demo ## Speech spectrogram [x, Fs] = auload(file_in_loadpath("sample.wav")); # audio file step = fix(5*Fs/1000); # one spectral slice every 5 ms window = fix(40*Fs/1000); # 40 ms data window fftn = 2^nextpow2(window); # next highest power of 2 [S, f, t] = specgram(x, fftn, Fs, window, window-step); S = abs(S(2:fftn*4000/Fs,:)); # magnitude in range 0>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/residued.m ***** test B=1; A=[1 -1]; [r,p,f,m] = residued(B,A); assert({r,p,f,m},{1,1,[],1},100*eps); [r2,p2,f2,m2] = residuez(B,A); assert({r,p,f,m},{r2,p2,f2,m2},100*eps); ***** test B=[1 -2 1]; A=[1 -1]; [r,p,f,m] = residued(B,A); assert({r,p,f,m},{0,1,[1 -1],1},100*eps); ***** test B=[1 -2 1]; A=[1 -0.5]; [r,p,f,m] = residued(B,A); assert({r,p,f,m},{0.25,0.5,[1 -1.5],1},100*eps); ***** test B=1; A=[1 -0.75 0.125]; [r,p,f,m] = residued(B,A); [r2,p2,f2,m2] = residuez(B,A); assert({r,p,f,m},{r2,p2,f2,m2},100*eps); ***** test B=1; A=[1 -2 1]; [r,p,f,m] = residued(B,A); [r2,p2,f2,m2] = residuez(B,A); assert({r,p,f,m},{r2,p2,f2,m2},100*eps); ***** test B=[6,2]; A=[1 -2 1]; [r,p,f,m] = residued(B,A); [r2,p2,f2,m2] = residuez(B,A); assert({r,p,f,m},{r2,p2,f2,m2},100*eps); ***** test B=[1 1 1]; A=[1 -2 1]; [r,p,f,m] = residued(B,A); assert(r,[0;3],1e-7); assert(p,[1;1],1e-8); assert(f,1,100*eps); assert(m,[1;2],100*eps); ***** test B=[2 6 6 2]; A=[1 -2 1]; [r,p,f,m] = residued(B,A); assert(r,[8;16],3e-7); assert(p,[1;1],1e-8); assert(f,[2,10],100*eps); assert(m,[1;2],100*eps); ***** test B=[1,6,2]; A=[1 -2 1]; [r,p,f,m] = residued(B,A); assert(r,[-1;9],3e-7); assert(p,[1;1],1e-8); assert(f,1,100*eps); assert(m,[1;2],100*eps); ***** test B=[1 0 0 0 1]; A=[1 0 0 0 -1]; [r,p,f,m] = residued(B,A); [~,is] = sort(angle(p)); assert(r(is),[-1/2;-j/2;1/2;j/2],100*eps); assert(p(is),[-1;-j;1;j],100*eps); assert(f,1,100*eps); assert(m,[1;1;1;1],100*eps); 10 tests, 10 passed, 0 known failure, 0 skipped [inst/butter.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/butter.m ***** shared sf, sf2, off_db off_db = 0.5; ## Sampling frequency must be that high to make the low pass filters pass. sf = 6000; sf2 = sf/2; data=[sinetone(5,sf,10,1),sinetone(10,sf,10,1),sinetone(50,sf,10,1),sinetone(200,sf,10,1),sinetone(400,sf,10,1)]; ***** test ## Test low pass order 1 with 3dB @ 50Hz data=[sinetone(5,sf,10,1),sinetone(10,sf,10,1),sinetone(50,sf,10,1),sinetone(200,sf,10,1),sinetone(400,sf,10,1)]; [b, a] = butter ( 1, 50 / sf2 ); filtered = filter ( b, a, data ); damp_db = 20 * log10 ( max ( filtered ( end - sf : end, : ) ) ); assert ( [ damp_db( 4 ) - damp_db( 5 ), damp_db( 1 : 3 ) ], [ 6 0 0 -3 ], off_db ) ***** test ## Test low pass order 4 with 3dB @ 50Hz data=[sinetone(5,sf,10,1),sinetone(10,sf,10,1),sinetone(50,sf,10,1),sinetone(200,sf,10,1),sinetone(400,sf,10,1)]; [b, a] = butter ( 4, 50 / sf2 ); filtered = filter ( b, a, data ); damp_db = 20 * log10 ( max ( filtered ( end - sf : end, : ) ) ); assert ( [ damp_db( 4 ) - damp_db( 5 ), damp_db( 1 : 3 ) ], [ 24 0 0 -3 ], off_db ) ***** test ## Test high pass order 1 with 3dB @ 50Hz data=[sinetone(5,sf,10,1),sinetone(10,sf,10,1),sinetone(50,sf,10,1),sinetone(200,sf,10,1),sinetone(400,sf,10,1)]; [b, a] = butter ( 1, 50 / sf2, "high" ); filtered = filter ( b, a, data ); damp_db = 20 * log10 ( max ( filtered ( end - sf : end, : ) ) ); assert ( [ damp_db( 2 ) - damp_db( 1 ), damp_db( 3 : end ) ], [ 6 -3 0 0 ], off_db ) ***** test ## Test high pass order 4 with 3dB @ 50Hz data=[sinetone(5,sf,10,1),sinetone(10,sf,10,1),sinetone(50,sf,10,1),sinetone(200,sf,10,1),sinetone(400,sf,10,1)]; [b, a] = butter ( 4, 50 / sf2, "high" ); filtered = filter ( b, a, data ); damp_db = 20 * log10 ( max ( filtered ( end - sf : end, : ) ) ); assert ( [ damp_db( 2 ) - damp_db( 1 ), damp_db( 3 : end ) ], [ 24 -3 0 0 ], off_db ) ***** error [a, b] = butter () ***** error [a, b] = butter (1) ***** error [a, b] = butter (1, 2, 3, 4, 5) ***** error [a, b] = butter (.5, .2) ***** error [a, b] = butter (3, .2, "invalid") ***** error [a, b] = butter (9, .6, "stop") ***** error [a, b] = butter (9, .6, "bandpass") ***** error [a, b] = butter (9, .6, "s", "high") ***** test butter (9, .6); assert (isrow (ans)); ***** test A = butter (9, .6); assert (isrow (A)); ***** test [A, B] = butter (9, .6); assert (isrow (A)); assert (isrow (B)); ***** test [z, p, g] = butter (9, .6); assert (iscolumn (z)); assert (iscolumn (p)); assert (isscalar (g)); ***** test [a, b, c, d] = butter (9, .6); assert (ismatrix (a)); assert (iscolumn (b)); assert (isrow (c)); assert (isscalar (d)); ***** demo sf = 800; sf2 = sf/2; data=[[1;zeros(sf-1,1)],sinetone(25,sf,1,1),sinetone(50,sf,1,1),sinetone(100,sf,1,1)]; [b,a]=butter ( 1, 50 / sf2 ); filtered = filter(b,a,data); clf subplot ( columns ( filtered ), 1, 1) plot(filtered(:,1),";Impulse response;") subplot ( columns ( filtered ), 1, 2 ) plot(filtered(:,2),";25Hz response;") subplot ( columns ( filtered ), 1, 3 ) plot(filtered(:,3),";50Hz response;") subplot ( columns ( filtered ), 1, 4 ) plot(filtered(:,4),";100Hz response;") 17 tests, 17 passed, 0 known failure, 0 skipped [inst/peak2rms.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/peak2rms.m ***** assert (peak2rms (1), 1) ***** assert (peak2rms (-5), 1) ***** assert (peak2rms ([-2 3; 4 -2]), [4/sqrt(10), 3/sqrt((9+4)/2)]) ***** assert (peak2rms ([-2 3; 4 -2], 2), [3/sqrt((9+4)/2); 4/sqrt(10)]) ***** assert (peak2rms ([1 2 3], 3), [1 1 1]) ***** error peak2rms () ***** error peak2rms (1, 2, 3) ***** error peak2rms (1, 1.5) ***** error peak2rms (1, -1) 9 tests, 9 passed, 0 known failure, 0 skipped [inst/chebwin.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/chebwin.m ***** assert (chebwin (1), 1) ***** assert (chebwin (2), ones (2, 1)) ***** error chebwin () ***** error chebwin (0.5) ***** error chebwin (-1) ***** error chebwin (ones (1, 4)) ***** error chebwin (1, 2, 3) 7 tests, 7 passed, 0 known failure, 0 skipped [inst/blackmannuttall.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/blackmannuttall.m ***** assert (blackmannuttall (1), 1) ***** assert (blackmannuttall (2), 0.0003628 * ones (2, 1), eps) ***** assert (blackmannuttall (15), flipud (blackmannuttall (15)), 10*eps); ***** assert (blackmannuttall (16), flipud (blackmannuttall (16)), 10*eps); ***** assert (blackmannuttall (15), blackmannuttall (15, "symmetric")); ***** assert (blackmannuttall (16)(1:15), blackmannuttall (15, "periodic")); ***** error blackmannuttall () ***** error blackmannuttall (0.5) ***** error blackmannuttall (-1) ***** error blackmannuttall (ones (1, 4)) ***** error blackmannuttall (1, 2) ***** error blackmannuttall (1, "invalid") 12 tests, 12 passed, 0 known failure, 0 skipped [inst/filtic.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/filtic.m ***** test ## Simple low pass filter b=[0.25 0.25]; a=[1.0 -0.5]; zf_ref=0.75; zf=filtic(b,a,[1.0],[1.0]); assert(zf,zf_ref,8*eps); ***** test ## Simple high pass filter b=[0.25 -0.25]; a=[1.0 0.5]; zf_ref = [-0.25]; zf=filtic(b,a,[0.0],[1.0]); assert(zf,zf_ref,8*eps); ***** test ## Second order cases [b,a]=butter(2,0.4); N=1000; ## Long enough for filter to settle xx=ones(1,N); [yy,zf_ref] = filter(b,a,xx); x=xx(N:-1:N-1); y=yy(N:-1:N-1); zf = filtic(b,a,y,x); assert(zf,zf_ref,8*eps); xx = cos(2*pi*linspace(0,N-1,N)/8); [yy,zf_ref] = filter(b,a,xx); x=xx(N:-1:N-1); y=yy(N:-1:N-1); zf = filtic(b,a,y,x); assert(zf,zf_ref,8*eps); ***** test ## Third order filter - takes longer to settle N=10000; [b,a]=cheby1(3,10,0.5); xx=ones(1,N); [yy,zf_ref] = filter(b,a,xx); x=xx(N:-1:N-2); y=yy(N:-1:N-2); zf = filtic(b,a,y,x); assert(zf,zf_ref,8*eps); ***** test ## Eight order high pass filter N=10000; [b,a]=butter(8,0.2); xx = cos(2*pi*linspace(0,N-1,N)/8); [yy,zf_ref] = filter(b,a,xx); x=xx(N:-1:N-7); y=yy(N:-1:N-7); zf = filtic(b,a,y,x); assert(zf,zf_ref,8*eps); ***** test ## Case with 3 args [b,a]=butter(2,0.4); N=100; xx=[ones(1,N) zeros(1,2)]; [yy,zf_ref] = filter(b,a,xx); y=[yy(N+2) yy(N+1)]; zf=filtic(b,a,y); assert(zf,zf_ref,8*eps); ***** test a = [2, -3, 1]; b = [4, -3]; y = [0; 1]; z = filtic (b, a, y); assert (z, [-0.5; 0]); 7 tests, 7 passed, 0 known failure, 0 skipped [inst/primitive.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/primitive.m ***** demo f = @(t) sin (2*pi*3*t); t = [0; sort(rand (100, 1))]; F = primitive (f, t, 0); t_true = linspace (0, 1, 1e3).'; F_true = (1 - cos (2 * pi * 3 * t_true)) / (2 * pi * 3); h = plot (t, F, "o;Numerical primitive;", t_true, F_true, "-;True primitive;"); set (h, "linewidth", 2); title ("Numerical primitive evaluated at random time points"); ***** error primitive () ***** error primitive (1) ***** error primitive (1, 2, 3, 4) 3 tests, 3 passed, 0 known failure, 0 skipped [inst/filtfilt.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/filtfilt.m ***** error filtfilt (); ***** error filtfilt (1, 2, 3, 4); ***** error filtfilt ([0.28, 0.71, 0.28], 1, rand ()) ***** error filtfilt ([0.28, 0.71, 0.28], 1, rand (6, 1)) ***** test randn('state',0); r = randn(1,200); [b,a] = butter(10, [.2, .25]); yfb = filtfilt(b, a, r); assert (size(r), size(yfb)); assert (mean(abs(yfb)) < 1e3); assert (mean(abs(yfb)) < mean(abs(r))); ybf = fliplr(filtfilt(b, a, fliplr(r))); assert (mean(abs(ybf)) < 1e3); assert (mean(abs(ybf)) < mean(abs(r))); ***** test randn('state',0); r = randn(1,1000); s = 10 * sin(pi * 4e-2 * (1:length(r))); [b,a] = cheby1(2, .5, [4e-4 8e-2]); y = filtfilt(b, a, r+s); assert (size(r), size(y)); assert (mean(abs(y)) < 1e3); assert (corr(s(250:750), y(250:750)) > .95) [b,a] = butter(2, [4e-4 8e-2]); yb = filtfilt(b, a, r+s); assert (mean(abs(yb)) < 1e3); assert (corr(y, yb) > .99) ***** test randn('state',0); r = randn(1,1000); s = 10 * sin(pi * 4e-2 * (1:length(r))); [b,a] = butter(2, [4e-4 8e-2]); y = filtfilt(b, a, [r.' s.']); yr = filtfilt(b, a, r); ys = filtfilt(b, a, s); assert (y, [yr.' ys.']); y2 = filtfilt(b.', a.', [r.' s.']); assert (y, y2); 7 tests, 7 passed, 0 known failure, 0 skipped [inst/fracshift.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/fracshift.m ***** test d = [1.5 7/6]; N = 1024; t = ((0:N-1)-N/2).'; tt = bsxfun (@minus, t, d); err1= err2 = zeros(N/2,1); for n = 0:N/2-1, phi0 = 2*pi*rand; f0 = n/N; sigma = N/4; x = exp(-t.^2/(2*sigma)).*sin(2*pi*f0*t + phi0); xx = exp(-tt.^2/(2*sigma)).*sin(2*pi*f0*tt + phi0); [y,h] = fracshift(x, d(1)); err1(n+1) = max (abs (y - xx(:,1))); [y,h] = fracshift(x, d(2)); err2(n+1) = max (abs (y - xx(:,2))); endfor rolloff = .1; rejection = 10^-3; idx_inband = 1:ceil((1-rolloff)*N/2)-1; assert (max (err1(idx_inband)) < rejection); assert (max (err2(idx_inband)) < rejection); ***** test N = 1024; p = 6; q = 7; d1 = 64; d2 = d1*p/q; t = 128; [b a] = butter (10,.25); n = zeros (N, 1); n(N/2+(-t:t)) = randn(2*t+1,1); n = filter(b,a,n); n1 = fracshift(n,d1); n1 = resample(n1,p,q); n2 = resample(n,p,q); n2 = fracshift(n2,d2); err = abs (n2 - n1); rejection = 10^-3; assert(max (err) < rejection); ***** test #integer shift similar similar to non-integer N = 1024; t = linspace(0, 1, N).'; x = exp(-t.^2/2/0.25^2).*sin(2*pi*10*t); d = 10; y = fracshift(x, d); yh = fracshift(x, d+1e-8); assert(y, yh, 1e-8) ***** warning fracshift([1 2 3 2 1], 3, h=0.5); #integer shift and filter provided ***** test #bug 52758 x = [0 1 0 0 0 0 0 0]; y = fracshift(x, 1); assert (size(x) == size(y)) ***** test #bug 47387 N = 1024; t = linspace(0, 1, N).'; x = exp(-t.^2/2/0.25^2).*sin(2*pi*10*t); dt = 0.25; d = dt / (t(2) - t(1)); y = fracshift(x, d); L = 37; _t = (-L:L).'; ideal_filter = sinc (_t - (d - fix (d))); m = 2 * L; _t = (0:m).' - (d - fix (d)); beta = 5.6533; _t = 2 * beta / m * sqrt (_t .* (m - _t)); w = besseli (0, _t) / besseli (0, beta); h = w .* ideal_filter; yh = fracshift(x, d, h); assert(y, yh, 1e-8) ***** demo N = 1024; t = linspace (0, 1, N).'; x = exp(-t.^2/2/0.25^2).*sin(2*pi*10*t); dt = 0.25; d = dt / (t(2) - t(1)); y = fracshift(x, d); plot(t,y,'r-;shifted;', t, x, 'k-;original;') axis tight xlabel ('time') ylabel ('signal') 6 tests, 6 passed, 0 known failure, 0 skipped [inst/convmtx.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/convmtx.m ***** assert(convmtx([3,4,5],3),[3,4,5,0,0;0,3,4,5,0;0,0,3,4,5]) ***** assert(convmtx([3;4;5],3),[3,0,0;4,3,0;5,4,3;0,5,4;0,0,5]) 2 tests, 2 passed, 0 known failure, 0 skipped [inst/sos2zp.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/sos2zp.m ***** test b1t=[1 2 3]; a1t=[1 .2 .3]; b2t=[4 5 6]; a2t=[1 .4 .5]; sos=[b1t a1t; b2t a2t]; z = [-1-1.41421356237310i;-1+1.41421356237310i;... -0.625-1.05326872164704i;-0.625+1.05326872164704i]; p = [-0.2-0.678232998312527i;-0.2+0.678232998312527i;... -0.1-0.538516480713450i;-0.1+0.538516480713450i]; k = 4; [z2,p2,k2] = sos2zp(sos,1); assert({cplxpair(z2),cplxpair(p2),k2},{z,p,k},100*eps); 1 test, 1 passed, 0 known failure, 0 skipped [inst/downsample.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/downsample.m ***** assert(downsample([1,2,3,4,5],2),[1,3,5]); ***** assert(downsample([1;2;3;4;5],2),[1;3;5]); ***** assert(downsample([1,2;3,4;5,6;7,8;9,10],2),[1,2;5,6;9,10]); ***** assert(downsample([1,2,3,4,5],2,1),[2,4]); ***** assert(downsample([1,2;3,4;5,6;7,8;9,10],2,1),[3,4;7,8]); 5 tests, 5 passed, 0 known failure, 0 skipped [inst/dst.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/dst.m ***** test x = log(linspace(0.1,1,32)); y = dst(x); assert(y(3), sum(x.*sin(3*pi*[1:32]/33)), 100*eps) 1 test, 1 passed, 0 known failure, 0 skipped [inst/fwht.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/fwht.m ***** assert (isempty (fwht ([]))); ***** assert (fwht (zeros (16)), zeros (16)); ***** assert (fwht (ones (16, 1)), [1; (zeros (15, 1))]); ***** assert (fwht (zeros (17, 1)), zeros (32, 1)); ***** assert (fwht ([1 -1 1 -1 1 -1 1 -1]), [0 0 0 0 0 0 0 1]); ***** test x = randi (16, 16); assert (ifwht (fwht (x)), x); ***** test x = randi (16, 16); assert (ifwht (fwht (x, [], "sequency"), [], "sequency"), x); ***** test x = randi (16, 16); assert (ifwht (fwht (x, [], "hadamard"), [], "hadamard"), x); ***** test x = randi (16, 16); assert (ifwht (fwht (x, [], "dyadic"), [], "dyadic"), x); ***** error fwht (); ***** error fwht (1, 2, 3, 4); ***** error fwht (0, 0); ***** error fwht (0, 5); ***** error fwht (0, [], "invalid"); 14 tests, 14 passed, 0 known failure, 0 skipped [inst/zerocrossing.m] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/inst/zerocrossing.m ***** test x = linspace(0,1,100); y = rand(1,100)-0.5; x0= zerocrossing(x,y); y0 = interp1(x,y,x0); assert(norm(y0,inf), 0, 100*eps) ***** test x = linspace(0,1,100); y = rand(1,100)-0.5; y(10:20) = 0; x0= zerocrossing(x,y); y0 = interp1(x,y,x0); assert(norm(y0,inf), 0, 100*eps) ***** demo x = linspace(0,1,100); y = rand(1,100)-0.5; x0= zerocrossing(x,y); y0 = interp1(x,y,x0); plot(x,y,x0,y0,'x') ***** demo x = linspace(0,1,100); y = rand(1,100)-0.5; y(10:20) = 0; x0= zerocrossing(x,y); y0 = interp1(x,y,x0); plot(x,y,x0,y0,'x') 2 tests, 2 passed, 0 known failure, 0 skipped Checking C++ files ... [src/__ultrwin__.cc] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/src/__ultrwin__.cc ***** assert (1) 1 test, 1 passed, 0 known failure, 0 skipped [src/__fwht__.cc] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/src/__fwht__.cc ***** assert (1) 1 test, 1 passed, 0 known failure, 0 skipped [src/cl2bp.cc] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/src/cl2bp.cc ***** test b = [ 0.0000000000000000 0.0563980420304213 -0.0000000000000000 -0.0119990278695041 -0.0000000000000001 -0.3016146759510104 0.0000000000000001 0.5244313235801866 0.0000000000000001 -0.3016146759510104 -0.0000000000000001 -0.0119990278695041 -0.0000000000000000 0.0563980420304213 0.0000000000000000]; assert(cl2bp(7, 0.25*pi, 0.75*pi, [0.01, 1.04, 0.01], [-0.01, 0.96, -0.01], 2^11), b, 1e-14); 1 test, 1 passed, 0 known failure, 0 skipped [src/remez.cc] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/src/remez.cc ***** test b = [ 0.0415131831103279 0.0581639884202646 -0.0281579212691008 -0.0535575358002337 -0.0617245915143180 0.0507753178978075 0.2079018331396460 0.3327160895375440 0.3327160895375440 0.2079018331396460 0.0507753178978075 -0.0617245915143180 -0.0535575358002337 -0.0281579212691008 0.0581639884202646 0.0415131831103279]; assert(remez(15,[0,0.3,0.4,1],[1,1,0,0]),b,1e-14); 1 test, 1 passed, 0 known failure, 0 skipped [src/upfirdn.cc] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/src/upfirdn.cc ***** assert (isequal (upfirdn (1:100, 1, 1, 1), 1:100)) ***** assert (isequal (upfirdn (1:100, 1, 1, 2), 1:2:100)) ***** error upfirdn () ***** error upfirdn (1,2) ***** error upfirdn (1,2,3) ***** error upfirdn (1,2,3,4,5) 6 tests, 6 passed, 0 known failure, 0 skipped [src/medfilt1.cc] >>>>> /build/octave-signal-Uu6nV8/octave-signal-1.4.1/src/medfilt1.cc ***** assert (medfilt1 ([1 2 3 4 3 2 1]), [1 2 3 3 3 2 1]); ***** assert (medfilt1 ([1 2 3 4 3 2 1]'), [1 2 3 3 3 2 1]'); ***** assert (medfilt1 ([1 2 3 4 3 2 1], "truncate"), [1.5 2 3 3 3 2 1.5]); ***** assert (medfilt1 ([-1 2 3 4 3 -2 1], "truncate"), [0.5 2 3 3 3 1 -0.5]); ***** assert (medfilt1 ([-1 2 3 4 3 -2 1], "zeropad"), [0 2 3 3 3 1 0]); ***** assert (medfilt1 ([]), []); ***** test A = [1 2 3 ; 6 5 4 ; 6 5 2 ]; assert (medfilt1 (A,4,[],2), [0.5 1.5 1.5; 2.5 4.5 4.5; 2.5 3.5 3.5]); assert (medfilt1 (A,4,[],1), [0.5 3.5 3.5; 1 3.5 3.5; 1.5 2.5 2.5]'); assert (medfilt1 (A,3,[],1), [1 2 3; 6 5 3; 6 5 2]); ***** test A = [ Inf 4 -4 NaN -1 -1 -3 -2 1 -Inf]; B = medfilt1 (A, 7, [], 1, 'includenan', 'zeropad'); assert (B, [0, 0, 0, NaN, 0, 0, 0, 0, 0, 0]); B = medfilt1 (A, 7, [], 2, 'includenan', 'zeropad'); assert (B, [NaN, NaN, NaN, NaN, NaN, NaN, NaN, -1, -1, 0]); B = medfilt1 (A, 7, [], 2, 'includenan', 'truncate'); assert (B, [NaN, NaN, NaN, NaN, NaN, NaN, NaN, -1.5, -2, -2.5]); B = medfilt1 (A, 7, [], 2, 'omitnan', 'zeropad'); assert (B, [0, 0, -0.5, -1, -1.5, -1.5, -1.5, -1, -1, 0]); B = medfilt1 (A, 7, [], 2, 'omitnan', 'truncate'); assert (B, [4, 1.5, -1, -1, -1.5, -1.5, -1.5, -1.5, -2, -2.5]); ***** test A = medfilt1 ([ NaN NaN -Inf], 4, [], 2, 'omitnan', 'truncate'); assert (A, [NaN, -Inf, -Inf]); ***** test A = medfilt1 ([-2 Inf -2; 1 3 -Inf; 1 0 -Inf], 1, [], 2); assert (A, [-2 Inf -2; 1 3 -Inf; 1 0 -Inf]); ***** test A = medfilt1 ([-Inf 0 -3; Inf 1 NaN], 9, [], 1); assert (A, [0, 0, NaN; 0, 0, NaN]); A = medfilt1 ([-Inf 0 -3; Inf 1 NaN], 9, [], 1, 'omitnan', 'truncate'); assert (A, [NaN, 0.5, -3; NaN, 0.5, -3]); ***** test A = medfilt1 ([Inf -3 Inf Inf 0 -2; Inf 1 NaN 5 5 -3], 3, [], 1); assert (A, [Inf, 0, NaN, 5, 0, -2; Inf, 0, NaN, 5, 0, -2]); ***** test A = medfilt1 ([3 3 7 5 6]', 5, [], 1, 'omitnan', 'truncate'); assert (A, [3, 4, 5, 5.5, 6]'); A = medfilt1 ([3 3 7 5 6]', 5, [], 2, 'omitnan', 'truncate'); assert (A, [3, 3, 7, 5, 6]'); ***** test A = medfilt1 ([3 1 4 1 3], 3, 'omitnan', 'truncate'); assert (A, [2, 3, 1, 3, 2]); ***** test A = medfilt1 ([3 1 4 1 3], 6, 'omitnan', 'truncate'); assert (A, [3, 2, 3, 3, 2]); ***** test A = medfilt1 ([1 2 3 4 4 3 2 1; 6 5 4 3 3 4 5 6; 6 5 4 3 2 1 0 -1; 6 5 4 3 2 1 0 -1]); assert (A, [1 2 3 3 3 3 2 1; 6 5 4 3 3 3 2 1; 6 5 4 3 2 1 0 -1; 6 5 4 3 2 1 0 -1]); ***** error (medfilt1 ([1 2 3], -1)); ***** error (medfilt1 ([1 2 3], 1, [], "hello")); ***** error (medfilt1 ([1 2 3], 1, [], "omitnan", false)); ***** error (medfilt1 ({1 2 3})); 20 tests, 20 passed, 0 known failure, 0 skipped Summary: 799 tests, 798 passed, 1 known failures, 0 skipped dh_installdocs -a -O--buildsystem=octave dh_installchangelogs -a -O--buildsystem=octave dh_octave_changelogs -a -O--buildsystem=octave dh_octave_examples -a -O--buildsystem=octave dh_installsystemduser -a -O--buildsystem=octave dh_perl -a -O--buildsystem=octave dh_link -a -O--buildsystem=octave dh_strip_nondeterminism -a -O--buildsystem=octave dh_compress -a -O--buildsystem=octave dh_fixperms -a -O--buildsystem=octave dh_missing -a -O--buildsystem=octave dh_dwz -a -a -O--buildsystem=octave dh_strip -a -a -O--buildsystem=octave dh_makeshlibs -a -a -O--buildsystem=octave dh_shlibdeps -a -a -O--buildsystem=octave dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/octave-signal/usr/lib/x86_64-linux-gnu/octave/packages/signal-1.4.1/x86_64-pc-linux-gnu-api-v55/remez.oct debian/octave-signal/usr/lib/x86_64-linux-gnu/octave/packages/signal-1.4.1/x86_64-pc-linux-gnu-api-v55/__ultrwin__.oct debian/octave-signal/usr/lib/x86_64-linux-gnu/octave/packages/signal-1.4.1/x86_64-pc-linux-gnu-api-v55/upfirdn.oct debian/octave-signal/usr/lib/x86_64-linux-gnu/octave/packages/signal-1.4.1/x86_64-pc-linux-gnu-api-v55/sosfilt.oct debian/octave-signal/usr/lib/x86_64-linux-gnu/octave/packages/signal-1.4.1/x86_64-pc-linux-gnu-api-v55/medfilt1.oct debian/octave-signal/usr/lib/x86_64-linux-gnu/octave/packages/signal-1.4.1/x86_64-pc-linux-gnu-api-v55/cl2bp.oct debian/octave-signal/usr/lib/x86_64-linux-gnu/octave/packages/signal-1.4.1/x86_64-pc-linux-gnu-api-v55/__fwht__.oct were not linked against libpthread.so.0 (they use none of the library's symbols) dh_octave_substvar -a -O--buildsystem=octave dh_installdeb -a -O--buildsystem=octave dh_gencontrol -a -O--buildsystem=octave dpkg-gencontrol: warning: package octave-signal: substitution variable ${octave:Upstream-Description} unused, but is defined dpkg-gencontrol: warning: package octave-signal: substitution variable ${octave:Upstream-Description} unused, but is defined dh_md5sums -a -O--buildsystem=octave dh_builddeb -a -O--buildsystem=octave dpkg-deb: building package 'octave-signal-dbgsym' in '../octave-signal-dbgsym_1.4.1-4+b1_amd64.deb'. dpkg-deb: building package 'octave-signal' in '../octave-signal_1.4.1-4+b1_amd64.deb'. dpkg-genbuildinfo --build=any dpkg-genchanges --build=any >../octave-signal_1.4.1-4+b1_amd64.changes dpkg-genchanges: info: binary-only arch-specific upload (source code and arch-indep packages not included) dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) I: running special hook: sync-out /build/octave-signal-Uu6nV8 /tmp/octave-signal-1.4.1-4+b124fbx06b I: cleaning package lists and apt cache... I: creating tarball... I: done I: removing tempdir /tmp/mmdebstrap.GUeTYoLzWj... I: success in 1144.0168 seconds md5: octave-signal-dbgsym_1.4.1-4+b1_amd64.deb: OK md5: octave-signal_1.4.1-4+b1_amd64.deb: OK sha1: octave-signal-dbgsym_1.4.1-4+b1_amd64.deb: OK sha1: octave-signal_1.4.1-4+b1_amd64.deb: OK sha256: octave-signal-dbgsym_1.4.1-4+b1_amd64.deb: OK sha256: octave-signal_1.4.1-4+b1_amd64.deb: OK Checksums: OK