Mercurial > forge
changeset 11543:57dfca79c58a octave-forge
signal: handle length argument of 1 correctly in window functions
author | mtmiller |
---|---|
date | Wed, 13 Mar 2013 04:31:54 +0000 |
parents | 5fa97735f2ff |
children | 51db7d0c81ce |
files | main/signal/NEWS main/signal/inst/barthannwin.m main/signal/inst/blackmanharris.m main/signal/inst/blackmannuttall.m main/signal/inst/flattopwin.m main/signal/inst/nuttallwin.m |
diffstat | 6 files changed, 62 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/main/signal/NEWS Wed Mar 13 04:19:57 2013 +0000 +++ b/main/signal/NEWS Wed Mar 13 04:31:54 2013 +0000 @@ -10,7 +10,18 @@ fwht ifwht - ** The function `blackmanharris' was fixed to return a column vector. + ** Improved Matlab compatibility for the following window functions: + + barthannwin + blackmanharris + blackmannuttall + chebwin + flattopwin + nuttallwin + + The changes include always returning a column vector, returning a valid + window for a length argument of 1, and making all arguments after the + length optional. ** signal is no longer dependent on the optim package.
--- a/main/signal/inst/barthannwin.m Wed Mar 13 04:19:57 2013 +0000 +++ b/main/signal/inst/barthannwin.m Wed Mar 13 04:31:54 2013 +0000 @@ -26,9 +26,14 @@ error("L must be a positive integer"); endif L = round(L); - N = L-1; - n = 0:N; - w = 0.62 -0.48.*abs(n./(L-1) - 0.5)+0.38*cos(2.*pi*(n./(L-1)-0.5)); - w = w'; + if (L == 1) + w = 1; + else + N = L-1; + n = 0:N; + + w = 0.62 -0.48.*abs(n./(L-1) - 0.5)+0.38*cos(2.*pi*(n./(L-1)-0.5)); + w = w'; + endif endfunction
--- a/main/signal/inst/blackmanharris.m Wed Mar 13 04:19:57 2013 +0000 +++ b/main/signal/inst/blackmanharris.m Wed Mar 13 04:31:54 2013 +0000 @@ -26,11 +26,15 @@ error("L must be a number"); endif - N = L-1; - a0 = 0.35875; - a1 = 0.48829; - a2 = 0.14128; - a3 = 0.01168; - n = (0 : N)'; - w = a0 - a1.*cos(2.*pi.*n./N) + a2.*cos(4.*pi.*n./N) - a3.*cos(6.*pi.*n./N); + if (L == 1) + w = 1; + else + N = L-1; + a0 = 0.35875; + a1 = 0.48829; + a2 = 0.14128; + a3 = 0.01168; + n = (0 : N)'; + w = a0 - a1.*cos(2.*pi.*n./N) + a2.*cos(4.*pi.*n./N) - a3.*cos(6.*pi.*n./N); + endif endfunction
--- a/main/signal/inst/blackmannuttall.m Wed Mar 13 04:19:57 2013 +0000 +++ b/main/signal/inst/blackmannuttall.m Wed Mar 13 04:31:54 2013 +0000 @@ -26,12 +26,16 @@ error("L must be a number"); endif - N = L-1; - a0 = 0.3635819; - a1 = 0.4891775; - a2 = 0.1365995; - a3 = 0.0106411; - n = 0:N; - w = a0 - a1.*cos(2.*pi.*n./N) + a2.*cos(4.*pi.*n./N) - a3.*cos(6.*pi.*n./N); - w = w.'; + if (L == 1) + w = 1; + else + N = L-1; + a0 = 0.3635819; + a1 = 0.4891775; + a2 = 0.1365995; + a3 = 0.0106411; + n = 0:N; + w = a0 - a1.*cos(2.*pi.*n./N) + a2.*cos(4.*pi.*n./N) - a3.*cos(6.*pi.*n./N); + w = w.'; + endif endfunction
--- a/main/signal/inst/flattopwin.m Wed Mar 13 04:19:57 2013 +0000 +++ b/main/signal/inst/flattopwin.m Wed Mar 13 04:31:54 2013 +0000 @@ -40,6 +40,10 @@ endif endif - x = 2*pi*[0:L-1]'/divisor; - w = (1-1.93*cos(x)+1.29*cos(2*x)-0.388*cos(3*x)+0.0322*cos(4*x))/4.6402; + if (L == 1) + w = 1; + else + x = 2*pi*[0:L-1]'/divisor; + w = (1-1.93*cos(x)+1.29*cos(2*x)-0.388*cos(3*x)+0.0322*cos(4*x))/4.6402; + endif endfunction
--- a/main/signal/inst/nuttallwin.m Wed Mar 13 04:19:57 2013 +0000 +++ b/main/signal/inst/nuttallwin.m Wed Mar 13 04:31:54 2013 +0000 @@ -31,12 +31,16 @@ warning('L rounded to the nearest integer.'); end - N = L-1; - a0 = 0.355768; - a1 = 0.487396; - a2 = 0.144232; - a3 = 0.012604; - n = -N/2:N/2; - w = a0 + a1.*cos(2.*pi.*n./N) + a2.*cos(4.*pi.*n./N) + a3.*cos(6.*pi.*n./N); - w = w'; + if (L == 1) + w = 1; + else + N = L-1; + a0 = 0.355768; + a1 = 0.487396; + a2 = 0.144232; + a3 = 0.012604; + n = -N/2:N/2; + w = a0 + a1.*cos(2.*pi.*n./N) + a2.*cos(4.*pi.*n./N) + a3.*cos(6.*pi.*n./N); + w = w'; + endif endfunction