From: drowe67 Date: Tue, 13 Jun 2017 04:15:22 +0000 (+0000) Subject: added functions for zig-zag mapping of 2D dct coeffs X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=20c58d7f3f17944deaa3362f1c86136054f6b595;p=freetel-svn-tracking.git added functions for zig-zag mapping of 2D dct coeffs git-svn-id: https://svn.code.sf.net/p/freetel/code@3187 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/codec2-dev/octave/newamp.m b/codec2-dev/octave/newamp.m index 5b672778..b6024723 100644 --- a/codec2-dev/octave/newamp.m +++ b/codec2-dev/octave/newamp.m @@ -200,13 +200,68 @@ function value = bits_to_index(bits, numbits) endfunction +% generate a zig-zag linear to square mapping matrix + +function map = zigzag(nr,nc) + map = zeros(nr, nc); + + state = 'zig'; + r = c = 1; + + for i=1:nr*nc + + printf("%s r: %d c: %d i %d\n", state, r, c, i); + map(r,c) = i; + + next_state = state; + if state == 'zig' + % move SE + c -= 1; r += 1; + if r > nr + r = nr; c+=2; + next_state = 'zag'; + end + if c < 1 + c = 1; + next_state = 'zag'; + end + end + + if state == 'zag' + % move SE + r -= 1; c +=1; + if c > nc + c = nc; r+=2; + next_state = 'zig'; + end + if r < 1 + r = 1; + next_state = 'zig'; + end + end + state = next_state; + end +endfunction + + +function v = mtov_zigzag(m) + [nr nc] = size(m); + map = zigzag(nr,nc) + v = zeros(1,nr*nc); + for r=1:nr + for c=1:nc + v(map(r,c)) = m(r,c); + end + end +endfunction + + % Determine a phase spectra from a magnitude spectra % from http://www.dsprelated.com/showcode/20.php % Haven't _quite_ figured out how this works but have to start somewhere .... % % TODO: we may be able to sample at a lower rate, like mWo % but start with something that works - function [phase Gdbfk s Aw] = determine_phase(model, f, Nfft=512, ak) Fs = 8000; max_amp = 80;