xue@11: /* xue@11: Harmonic sinusoidal modelling and tools xue@11: xue@11: C++ code package for harmonic sinusoidal modelling and relevant signal processing. xue@11: Centre for Digital Music, Queen Mary, University of London. xue@11: This file copyright 2011 Wen Xue. xue@11: xue@11: This program is free software; you can redistribute it and/or xue@11: modify it under the terms of the GNU General Public License as xue@11: published by the Free Software Foundation; either version 2 of the xue@11: License, or (at your option) any later version. xue@11: */ xue@1: #ifndef multiresH xue@1: #define multiresH xue@1: Chris@5: /** Chris@5: \file multires.h - composite spectrogram routines xue@1: xue@1: This unit deals with basis selection from multiresolution Fourier bases set. xue@1: xue@1: A tiling of an area of the T-F plane is represented as a sequence of 0's and 1's, each 0 represents xue@1: a horizontal split-in-half, each 1 represents a vertical split-in-half. The sequence is made up of xue@1: three pieces: 1) the first entry giving the direction of primary split; 2) the tiling of the upper xue@1: or left half after the primary split; and 3) the tiling of the lower or right half. xue@1: xue@1: A composite spectrogram is represented as a tiling and a vector of amplitude (or square amplitude) xue@1: values, each representing the energy within a tile. If the primary split is horizontal, then the xue@1: first/second half of the amplitude or power vector represents the the upper/lower half of the xue@1: composite spectrogram; if the primary splits is vertical, then the first/second half of the amplitude xue@1: or power vector represents the left/right half of the composite spectrogram. xue@1: xue@1: Further reading: Wen X. and M. Sandler, "Composite spectrogram using multiple fourier transforms," xue@1: IET Signal Processing, 3(1):51-63, 2009. xue@1: */ xue@1: xue@1: //--memory re-indexing routines for internal use----------------------------- xue@1: void HSplitSpec(int X, int Y, double** Spec, double**& lSpec, double**& uSpec); xue@1: void HSplitSpecs(int N, double*** Specs, double***& lSpecs, double***& uSpecs); xue@1: void VSplitSpec(int X, int Y, double** Spec, double**& lSpec, double**& rSpec); xue@1: void VSplitSpecs(int N, double*** Specs, double***& lSpecs, double***& rSpecs); xue@1: xue@1: //--composite spectrogram algorithms----------------------------------------- xue@1: double MixSpectrogram(double** Spec, double*** Specs, int Fr, int WID, int wid, bool norm=true, bool normmix=true, int*** cuts=0); xue@1: double MixSpectrogram(int** spl, double** Spec, double*** Specs, int Fr, int WID, int wid, bool norm=true, bool normmix=true); xue@1: #endif