[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
## WaveLab error & fix!

**From**: |
Robert Leach |

**Subject**: |
WaveLab error & fix! |

**Date**: |
Thu, 14 Aug 2003 16:59:16 -0600 |

`I'm trying to do a daubechies wavelet transform. This is my first
``attempt at using the WaveLab802 package (and for that matter doing a
``wavelet analysis), but I suspect (and correct me if I'm wrong) that
``this problem had to do with compatibility between octave and this
``MATLAB package:
`
octave:4> FWT_PO(signal,4,qmf)
error: octave_base_value::list_value(): wrong type argument `matrix'
error: evaluating assignment expression near line 31, column 8

`error: called from `aconv' in file
```/sw/share/octave/2.1.46/m/WaveLab802/Orthogonal/aconv.m'
`error: evaluating assignment expression near line 14, column 3

`error: called from `DownDyadLo' in file
```/sw/share/octave/2.1.46/m/WaveLab802/Orthogonal/DownDyadLo.m'
`error: evaluating assignment expression near line 26, column 13
error: evaluating for command near line 23, column 3

`error: called from `FWT_PO' in file
```/sw/share/octave/2.1.46/m/WaveLab802/Orthogonal/FWT_PO.m'
`
Here's the relevant lines in aconv:
function y = aconv(f,x)
...
fflip = reverse(f);
...
in DownDyadLo:
function d = DownDyadLo(x,qmf)
...
d = aconv(qmf,x);
...
and in FWT_PO:
function wcoef = FWT_PO(x,L,qmf)
...
beta = ShapeAsRow(x); %take samples at finest scale as
beta-coeffts
for j=J-1:-1:L
alfa = DownDyadHi(beta,qmf);
wcoef(dyad(j)) = alfa;
beta = DownDyadLo(beta,qmf);
end

`signal is a 1D matrix (1 row & many columns) and qmf is the return from
``MakeONFilter in the WaveLab package.
`

`Now, I'm not a good octave coder. I can count the number of functions
``I've written on my digits. I don't know how to utilize all the
``efficient methods when dealing with arrays and stuff, but I coded up a
``solution to this problem that *appears* to have fixed it. I could be
``wrong because I don't know what the correct behavior of the output of
``FWT_PO is supposed to be (and likewise the MATLAB handling of various
``data structures in the call to reverse), so please let me know if I've
``done something wrong. I wrote a new reverse function called MATreverse
``(for MATLAB reverse). if I were really ambitious, I would write a
``little datatype check in octave's reverse and call MATreverse if the
``type is a matrix, but for expediency, I simply changed the call in
``FWT_PO. Here's the function:
`
function y = aconv(x)

`%I'm writing this because MATLAB's reverse isn't compatible with
``octave's
`

`s1 = size(x,1); %I'm assuming here that MATLAB will reverse any 1D
``matrix
`s2 = size(x,2);
if s1 == 1,
if s2 == 1,
s = s1;
else
s = s2;
end
else
s = s1;
end
for i=1:s
y(i) = x(s-i+1);
end
if s == s2
y = y';
end

`After incorporating this code, FWT_PO runs without error and my gut is
``telling me from the look of the output that it's right. If you confirm
``that this is a good thing or improve it (as I'm sure most of you
``could), where should this be reported?
`
Rob
=====================================================================
= Robert W. Leach =
= Los Alamos National Lab =
= Bioscience Division: Bioinformatics & Computational Biology Group =
= MS M888 =
= Los Alamos, NM 87545 =
= address@hidden =
= 505-667-2307 =
=====================================================================

`Work Calendar & To-Do
``List: http://66.93.220.190/phpicalendar/week.php?cal=Work
`
-------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.
Octave's home on the web: http://www.octave.org
How to fund new projects: http://www.octave.org/funding.html
Subscription information: http://www.octave.org/archive.html
-------------------------------------------------------------

**WaveLab error & fix!**,
*Robert Leach* **<=**