#include <stdio.h>
#include "invpacktree_int.h"
#include "packtree_int.h"
#include "support.h"
#include "delta.h"
#include "haar_int.h"
#include "ts_trans_int.h"
#include "line_int.h"
#include "costwidth.h"
#include "yahooTS.h"
Go to the source code of this file.
Functions | |
int* | copy (int *intVec, const size_t N) |
Make a copy of an integer array. More... | |
bool | compare (const int *v1, const int *v2, const size_t N) |
Compare two integer arrays of size N. More... | |
size_t | calcPacketWidth (packdata_list< int > &bestBasisList) |
Calculate the number of bits needed to represent the result of the wavelet packet transform. More... | |
size_t | packet_calc (const int *intVec, const int *copyVec, const int N) |
Wavelet packet calculation. More... | |
size_t | delta_calc (int *intVec, const int *copyVec, const int N) |
Calculate the number of bits needed to represent the data after "delta" compression. More... | |
size_t | wave_calc (int *intVec, const int *copyVec, const int N, liftbase< int *, int > *w) |
Calculate the number of bits needed to represent the data after wavelet compression wavelet compression. More... | |
int | main () |
Read in a set of equity time series file. More... |
The documentation in this file is formatted for doxygen (see www.doxyeng.org).
You may use this source code without limitation and without fee as long as you include: This software was written and is copyrighted by Ian Kaplan, Bear Products International, www.bearcave.com, 2002.
This software is provided "as is", without any warranty or claim as to its usefulness. Anyone who uses this source code uses it at their own risk. Nor is any support provided by Ian Kaplan and Bear Products International.
Please send any bug fixes or suggested source changes to:
iank@bearcave.com
Definition in file compresstest.cpp.
|
Calculate the number of bits needed to represent the result of the wavelet packet transform. The result of this version of the wavelet packet transform is a list of vectors, where each vector represents a best basis fit for a particular region of the signal. The result returned here is an obvious lower bound, since in practice a vector would consist of a fixed set of values. Also the length of the vector would have to be included, along with the width the the length values. Definition at line 104 of file compresstest.cpp. 00105 { 00106 packdata_list<int>::handle h; 00107 size_t totalWidth = 0; 00108 00109 for (h = bestBasisList.first(); h != 0; h = bestBasisList.next( h )) { 00110 packdata<int> *node = bestBasisList.get_item( h ); 00111 const size_t len = node->length(); 00112 const int *vec = node->getData(); 00113 int nodeWidth = support::vecWidth( vec, len ); 00114 totalWidth += nodeWidth; 00115 } 00116 00117 return totalWidth; 00118 } // calcPacketWidth |
|
Compare two integer arrays of size N. Return true if they are equal, false otherwise. Definition at line 73 of file compresstest.cpp. Referenced by delta_calc(), main(), packet_calc(), and wave_calc().
00074 { 00075 bool rslt = true; 00076 00077 for (size_t i = 0; i < N; i++) 00078 { 00079 if (v1[i] != v2[i]) 00080 { 00081 rslt = false; 00082 break; 00083 } 00084 } 00085 00086 return rslt; 00087 } // compare |
|
Make a copy of an integer array. Note that the function allocates memory, but does not deallocate it. Definition at line 56 of file compresstest.cpp. 00057 { 00058 int *newVec = new int[ N ]; 00059 00060 for (size_t i = 0; i < N; i++) 00061 { 00062 newVec[i] = intVec[i]; 00063 } 00064 00065 return newVec; 00066 } // copy |
|
Calculate the number of bits needed to represent the data after "delta" compression. Delta compression stores the difference between value si-1 and si. Definition at line 186 of file compresstest.cpp. Referenced by main().
00189 { 00190 delta_trans<int> delta; 00191 00192 delta.forward( intVec, N ); 00193 00194 const size_t deltaWidth = support::vecWidth( intVec, N ); 00195 00196 delta.inverse( intVec, N); 00197 00198 bool isEqual = compare( intVec, copyVec, N); 00199 if (! isEqual) 00200 printf("Delta compression inverse failed\n"); 00201 00202 return deltaWidth; 00203 } // delta_calc |
|
Read in a set of equity time series file. Calculate the number of bits needed to represent the data without compression and after wavelet and wavelet packet compression. Definition at line 247 of file compresstest.cpp. 00248 { 00249 const char *files[] = { "aa", // Alcoa Aluminium 00250 "amat", // Applied Materials 00251 "ba", // Boeing 00252 "cof", // Capital One 00253 "ge", // General Electric 00254 "ibm", // IBM Corp. 00255 "intc", // Intel 00256 "mmm", // 3M 00257 "mrk", // Merck 00258 "wmt", // Wal-Mart 00259 0 // The null pointer 00260 }; 00261 00262 const size_t N = 512; 00263 double realVec[ N ]; 00264 int intVec[ N ]; 00265 00266 // an instance of yahooTS with the path to the data directory 00267 const char *dataDirPath = "..\\data\\equities\\"; 00268 yahooTS ts( dataDirPath ); 00269 00270 printf("Equity Uncompressed delta Haar line TS wavelet packet (line)\n"); 00271 00272 00273 for (size_t i = 0; files[i] != 0; i++) { 00274 00275 size_t n = N; 00276 if (! ts.getTS( files[i], realVec, n, yahooTS::Close )) { 00277 break; 00278 } 00279 00280 if (n != N) { 00281 printf("Error: %d out of %d data elements read\n", n, N ); 00282 break; 00283 } 00284 00285 support::decimalToInt( intVec, realVec, N ); 00286 00287 int *copyVec = copy( intVec, N ); 00288 00289 const size_t beforeWidth = support::vecWidth( intVec, N ); 00290 00291 const size_t deltaWidth = delta_calc( intVec, copyVec, N ); 00292 00293 haar_int haar; 00294 const size_t haarWidth = wave_calc( intVec, copyVec, N, &haar ); 00295 00296 line_int<int *> line; 00297 const size_t lineWidth = wave_calc( intVec, copyVec, N, &line ); 00298 00299 ts_trans_int ts_trans; 00300 const size_t tsTransWidth = wave_calc( intVec, 00301 copyVec, 00302 N, 00303 &ts_trans); 00304 00305 const size_t packetWidth = packet_calc( intVec, copyVec, N ); 00306 00307 printf(" %4s %4d %4d %4d %4d %d %4d\n", 00308 files[i], beforeWidth, deltaWidth, haarWidth, lineWidth, tsTransWidth, packetWidth ); 00309 00310 } 00311 return 0; 00312 } |
|
Wavelet packet calculation. The function returns the minimal total number of bits needed to represent the data when compressed using the wavelet packet algorithm. Definition at line 130 of file compresstest.cpp. 00133 { 00134 // The "line" wavelet transform (e.g., line with slope) 00135 line_int<packcontainer_int> line; 00136 00137 // calculate the wavelet packet tree, using the line wavelet transform 00138 packtree_int tree( intVec, N, &line ); 00139 00140 // get the root of the wavelet packet transform tree 00141 packnode<int> *treeRoot = tree.getRoot(); 00142 00143 // Assign a cost on the basis of bit width 00144 costwidth cost( treeRoot ); 00145 00146 // Calculate the "best basis" function from the tree 00147 tree.bestBasis(); 00148 00149 // Check that the best basis function succeeded. That is, 00150 // that the best basis function does not include the 00151 // original data. 00152 00153 if (! tree.bestBasisOK()) { 00154 printf("Best basis calculation failed\n"); 00155 } 00156 00157 // Get the best basis list. This will be a list of 00158 // nodes consisting of the best basis set. This set is 00159 // obtained by traversing the tree, top down, left to 00160 // right. 00161 packdata_list<int> bestBasis = tree.getBestBasisList(); 00162 00163 // Sum the cost values (width for each node in the best basis 00164 // list 00165 size_t width = calcPacketWidth( bestBasis ); 00166 00167 invpacktree_int invtree( bestBasis, &line ); 00168 00169 const int *invRslt = invtree.getData(); 00170 00171 bool isEqual = compare( invRslt, copyVec, N ); 00172 if (! isEqual) 00173 printf("Wavelet packet inverse is wrong\n"); 00174 00175 return width; 00176 } // packet_calc |
|
Calculate the number of bits needed to represent the data after wavelet compression wavelet compression.
Definition at line 221 of file compresstest.cpp. Referenced by main().
00225 { 00226 w->forwardTrans( intVec, N ); 00227 00228 const size_t waveWidth = support::vecWidth( intVec, N ); 00229 00230 w->inverseTrans( intVec, N ); 00231 00232 bool isEqual = compare( intVec, copyVec, N); 00233 if (! isEqual) 00234 printf("Line wavelet inverse is wrong\n"); 00235 00236 return waveWidth; 00237 } // wave_calc |