📄 getfilter.c
字号:
/* Copyright (c) Colorado School of Mines, 2003.*//* All rights reserved. *//*********************** self documentation **********************//****************************************************************************GETFILTER - GET wavelet FILTER typewaveGetfilter - Select the filter for wavelet transformwaveFreefilter - free the filter****************************************************************************Function Prototypes:waveFilter *waveGetfilter(int id);void waveFreefilter(waveFilter *filter);****************************************************************************waveGetfilter:Input:int id filter to use 0-9 for Daubechies' wavelet 10-12 for CoifletwaveFreefilter:Input:waveFilter *filter the wavelet filter****************************************************************************Author: Tong Chen, 05/18/94***************************************************************************//**************** end self doc ********************************/#include "comp.h"#ifndef NWAVETYPE#define NWAVETYPE 15#endifstatic int waveLen[NWAVETYPE]={2,4,6,8,10,12,14,16,18,20,6,12,18,24,30};static int waveIshift[NWAVETYPE]={0,0,0,0,0,0,0,0,0,0,-2,-4,-6, -8, -10};static float /* Daubechies' wavelets */ waveTab1[2] = {.707106781f,.707106781f}, waveTab2[4] = {0.4829629131445341f, 0.8365163037378077f, 0.2241438680420134f, -0.1294095225512603f}, waveTab3[6] = {0.3326705529500825f, 0.8068915093110924f, 0.4598775021184914f, -0.1350110200102546f, -0.0854412738820267f, 0.0352262918857095f}, waveTab4[8] = {0.2303778133088964f, 0.7148465705529154f, 0.6308807679298587f, -0.0279837694168599f, -0.1870348117190931f, 0.0308413818355607f, 0.0328830116668852f, -0.0105974017850690f}, waveTab5[10] = {0.1601023979741929f, 0.6038292697971895f, 0.7243085284377726f, 0.1384281459013203f, -0.2422948870663823f, -0.0322448695846381f, 0.0775714938400459f, -0.0062414902127983f, -0.0125807519990820f, 0.0033357252854738f}, waveTab6[12] = {0.1115407433501095f, 0.4946238903984533f, 0.7511339080210959f, 0.3152503517091982f, -0.2262646939654400f, -0.1297668675672625f, 0.0975016055873225f, 0.0275228655303053f, -0.0315820393174862f, 0.0005538422011614f, 0.0047772575109455f, -0.0010773010853085f}, waveTab7[14] = {0.0778520540850037f, 0.3965393194818912f, 0.7291320908461957f, 0.4697822874051889f, -0.1439060039285212f, -0.2240361849938412f, 0.0713092192668272f, 0.0806126091510774f, -0.0380299369350104f, -0.0165745416306655f, 0.0125509985560986f, 0.0004295779729214f, -0.0018016407040473f, 0.0003537137999745f}, waveTab8[16] = {0.0544158422431072f, 0.3128715909143166f, 0.6756307362973195f, 0.5853546836542159f, -0.0158291052563823f, -0.2840155429615824f, 0.0004724845739124f, 0.1287474266204893f, -0.017369301001809f, -0.0440882539307971f, 0.0139810279174001f, 0.0087460940474065f, -0.0048703529934520f, -0.0003917403733770f, 0.0006754494064506f, -0.0001174767841248f}, waveTab9[18] = {0.0380779473638778f, 0.2438346746125858f, 0.6048231236900955f, 0.6572880780512736f, 0.1331973858249883f, -0.2932737832791663f, -0.0968407832229492f, 0.1485407493381256f, 0.0307256814793385f, -0.0676328290613279f, 0.0002509471148340f, 0.0223616621236798f, -0.0047232047577518f, -0.0042815036824635f, 0.0018476468830563f, 0.0002303857635232f, -0.0002519631889427f, 0.0000393473203163f}, waveTab10[20] = {0.0266700579005473f, 0.1881768000776347f, 0.5272011889315757f, 0.6884590394534363f, 0.2811723436605715f, -0.2498464243271598f, -0.1959462743772862f, 0.1273693403357541f, 0.0930573646035547f, -0.0713941471663501f, -0.0294575368218399f, 0.0332126740593612f, 0.0036065535669870f, -0.0107331754833007f, 0.0013953517470688f, 0.0019924052951925f, -0.0006858566949564f, -0.0001164668551285f, 0.0000935886703202f, -0.0000132642028945f}, /* Coiflets */ waveTab11[6] = {0.038580777747887f, -0.12696912539621f, -0.077161555495774f, 0.60749164138568f, 0.74568755893443f, 0.22658426519707f}, waveTab12[12] = { 0.016387336464f, -0.041464936782f, -0.067372554722f, 0.386110066823f, 0.812723635450f, 0.416998396426f, -0.076488599079f, -0.059434418647f, 0.023680171946f, 0.005611434819f, -0.001823208871f, -0.000720549445f}, waveTab13[18] = {-.0037935128643778759f, .0077825964256797869f, .023452696142119103f, -.065771911281431228f, -.061123390002955698f, .40517690240961679f, .79377722262562034f, .42848347637761869f, -.071799821619170590f, -.082301927106320283f, .034555027573344464f, .015880544863615901f, -.0090079761367322896f, -.0025745176881279692f, .0011175187708269618f, .00046621695982014403f, -.000070983302505704928f, -.000034599773197402695f}, waveTab14[24] = {.00089231366822027571f, -.001629492013110849f, -.0073461663276562349f, .016068943964069236f, .026682300155628804f, -.081266699680313054f, -.05607731331647195f, .41530840703043015f, .78223893092049879f, .43438605649146839f, -.066627474263000752f, -.096220442033563697f, .039334427122913219f, .025082261845146933f, -.015211731527239149f, -.005658286685946038f, .0037514361569249027f, .0012665619286795187f, -.00058902075681143784f, -.00025997455231942175f, .000062339033865764618f, .000031229876078043358f, -.0000032596804448576129f, .0000017849845586999338f}, waveTab15[30] = {-.00021208086333630681f, .0003585896772556986f, .0021782363048412847f, -.0041593587816039935f, -.010131117538045594f, .023408156761592795f, .028168029062141497f, -.091920010548806413f, -.05204316321623739f, .42156620672876544f, .77428960374028455f, .43799162622836413f, -.062035963905608969f, -.10557420870583534f, .041289208740734169f, .032683574283249535f, -.019761779011723959f, -.0091642311530462268f, .00676418541866332f, .0024333732092240538f, -.0016628637690858134f, -.00063813129615137752f, .00030225951979184068f, .00014054114890107723f, -.000041340484491956856f, -.000021315014062244917f, .0000037345967496715605f, .0000020638063902331633f, -.00000016740829374930063f, -.000000095157917046829356f};static float *waveTab[NWAVETYPE] = {waveTab1, waveTab2, waveTab3, waveTab4, waveTab5, waveTab6, waveTab7, waveTab8, waveTab9, waveTab10, waveTab11, waveTab12, waveTab13, waveTab14, waveTab15};waveFilter *waveGetfilter(int id)/***************************************************************************Select the filter for wavelet transform****************************************************************************id filter to use 0-9 for Daubechies' wavelet 10-12 for Coiflet****************************************************************************Author: Tong Chen, 05/18/94***************************************************************************/{ waveFilter *filter; int len, i, j; if(id >= NWAVETYPE) return NULL; /* allocate space for the filter */ filter = (waveFilter *) malloc(sizeof(waveFilter)); /* assign the parameters */ filter->id = id; len = waveLen[id]; filter->len = len; filter->ishift = waveIshift[id]; /* allocate space for the filter coefficients */ filter->filterh = alloc1float(len); filter->filterg = alloc1float(len); /* get the filter coefficients */ for(i=0;i<len;i++) filter->filterh[i] = waveTab[id][i]; for(i=0,j=len-1;i<len;i++,j--) filter->filterg[i] = waveTab[id][j]; for(i=1;i<len;i+=2) filter->filterg[i] = -filter->filterg[i]; return filter;}void waveFreefilter(waveFilter *filter){ free1float(((waveFilter *)filter)->filterh); free1float(((waveFilter *)filter)->filterg); free(filter);}/* Test *//*main(){ int i,j; waveFilter *filter; for(i=0;i<10;i++){ filter = waveGetfilter(i); fprintf(stderr,"length[%d]=%d\n",i,filter->len); for(j=0;j<filter->len;j++){ fprintf(stderr,"coeff[%d]=%f\n",j,filter->filterh[j]); fprintf(stderr,"coeff[%d]=%f\n",j,filter->filterg[j]); } waveFreefilter(filter); }}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -