⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makeonfilter.sci

📁 小波分解源代码
💻 SCI
字号:
function f = MakeONFilter(Typ,Par)
// MakeONFilter -- Generate Orthonormal QMF Filter for Wavelet Transform
//  Usage
//    qmf = MakeONFilter(Typ,Par)
//  Inputs
//    Typ   string, 'Haar', 'Beylkin', 'Coiflet', 'Daubechies',
//           'Symmlet', 'Vaidyanathan','Battle'
//    Par    integer, it is a parameter related to the support and vanishing
//           moments of the wavelets, explained below for each wavelet.
//
// Outputs
//    qmf    quadrature mirror filter
//
//  Description
//    The Haar filter (which could be considered a Daubechies-2) was the
//    first wavelet, though not called as such, and is discontinuous.
//
//    The Beylkin filter places roots for the frequency response function
//    close to the Nyquist frequency on the real axis.
//
//    The Coiflet filters are designed to give both the mother and father
//    wavelets 2*Par vanishing moments; here Par may be one of 1,2,3,4 or 5.
//
//    The Daubechies filters are minimal phase filters that generate wavelets
//    which have a minimal support for a given number of vanishing moments.
//    They are indexed by their length, Par, which may be one of
//    4,6,8,10,12,14,16,18 or 20. The number of vanishing moments is par/2.
//
//    Symmlets are also wavelets within a minimum size support for a given 
//    number of vanishing moments, but they are as symmetrical as possible,
//    as opposed to the Daubechies filters which are highly asymmetrical.
//    They are indexed by Par, which specifies the number of vanishing
//    moments and is equal to half the size of the support. It ranges 
//    from 4 to 10.
//
//    The Vaidyanathan filter gives an exact reconstruction, but does not
//    satisfy any moment condition.  The filter has been optimized for
//    speech coding.
//
//    The Battle-Lemarie filter generate spline orthogonal wavelet basis.
//    The parameter Par gives the degree of the spline. The number of 
//    vanishing moments is Par+1.
//
//  See Also
//    FWT_PO, IWT_PO, FWT2_PO, IWT2_PO, WPAnalysis//?
//
//  References
//    The books by Daubechies and Wickerhauser.
//
//  Copyright Aldo I Maalouf

if string(Typ)=='Haar',
	f = [1 1] ./ sqrt(2);
end

if string(Typ)=='Beylkin', 
	f = [	.099305765374,	.424215360813,	.699825214057,	...
			.449718251149,	-.110927598348,	-.264497231446,	...
			.026900308804,	.155538731877,	-.017520746267,	...
			-.088543630623,	.019679866044,	.042916387274,	...
			-.017460408696,	-.014365807969,	.010040411845,	...
			.001484234782,	-.002736031626,	.000640485329	];
end

if string(Typ)=='Coiflet',
	if Par==1,
		f = [	.038580777748,	-.126969125396,	-.077161555496,	...
				.607491641386,	.745687558934,	.226584265197	];
	end
	if Par==2,
		f = [	.016387336463,	-.041464936782,	-.067372554722,	...
				.386110066823,	.812723635450,	.417005184424,	...
				-.076488599078,	-.059434418646,	.023680171947,	...
				.005611434819,	-.001823208871,	-.000720549445	];
	end
	if Par==3,
		f = [	-.003793512864,	.007782596426,	.023452696142,	...
				-.065771911281,	-.061123390003,	.405176902410,	...
				.793777222626,	.428483476378,	-.071799821619,	...
				-.082301927106,	.034555027573,	.015880544864,	...
				-.009007976137,	-.002574517688,	.001117518771,	...
				.000466216960,	-.000070983303,	-.000034599773	];
	end
	if Par==4,
		f = [	.000892313668,	-.001629492013,	-.007346166328,	...
				.016068943964,	.026682300156,	-.081266699680,	...
				-.056077313316,	.415308407030,	.782238930920,	...
				.434386056491,	-.066627474263,	-.096220442034,	...
				.039334427123,	.025082261845,	-.015211731527,	...
				-.005658286686,	.003751436157,	.001266561929,	...
				-.000589020757,	-.000259974552,	.000062339034,	...
				.000031229876,	-.000003259680,	-.000001784985	];
	end
	if Par==5,
		f = [	-.000212080863,	.000358589677,	.002178236305,	...
				-.004159358782,	-.010131117538,	.023408156762,	...
				.028168029062,	-.091920010549,	-.052043163216,	...
				.421566206729,	.774289603740,	.437991626228,	...
				-.062035963906,	-.105574208706,	.041289208741,	...
				.032683574283,	-.019761779012,	-.009164231153,	...
				.006764185419,	.002433373209,	-.001662863769,	...
				-.000638131296,	.000302259520,	.000140541149,	...
				-.000041340484,	-.000021315014,	.000003734597,	...
				.000002063806,	-.000000167408,	-.000000095158	];
	end
end

if string(Typ)=='Daubechies',
	if Par==4,  
		f = [	.482962913145,	.836516303738,	...
				.224143868042,	-.129409522551	];
	end
	if Par==6, 
		f = [	.332670552950,	.806891509311,	...
				.459877502118,	-.135011020010,	...
				-.085441273882,	.035226291882	];
	end
	if Par==8,
		f = [ 	.230377813309,	.714846570553,	...
				.630880767930,	-.027983769417,	...
				-.187034811719,	.030841381836,	...
				.032883011667,	-.010597401785	];
	end
	if Par==10,
		f = [	.160102397974,	.603829269797,	.724308528438,	...
				.138428145901,	-.242294887066,	-.032244869585,	...
				.077571493840,	-.006241490213,	-.012580751999,	...
				.003335725285									];
	end
	if Par==12,
		f = [	.111540743350,	.494623890398,	.751133908021,	...
				.315250351709,	-.226264693965,	-.129766867567,	...
				.097501605587,	.027522865530,	-.031582039317,	...
				.000553842201,	.004777257511,	-.001077301085	];
	end
	if Par==14,
		f = [	.077852054085,	.396539319482,	.729132090846,	...
				.469782287405,	-.143906003929,	-.224036184994,	...
				.071309219267,	.080612609151,	-.038029936935,	...
				-.016574541631,	.012550998556,	.000429577973,	...
				-.001801640704,	.000353713800					];
	end
	if Par==16,
		f = [	.054415842243,	.312871590914,	.675630736297,	...
				.585354683654,	-.015829105256,	-.284015542962,	...
				.000472484574,	.128747426620,	-.017369301002,	...
				-.044088253931,	.013981027917,	.008746094047,	...
				-.004870352993,	-.000391740373,	.000675449406,	...
				-.000117476784								];
	end
	if Par==18,
		f = [	.038077947364,	.243834674613,	.604823123690,	...
				.657288078051,	.133197385825,	-.293273783279,	...
				-.096840783223,	.148540749338,	.030725681479,	...
				-.067632829061,	.000250947115,	.022361662124,	...
				-.004723204758,	-.004281503682,	.001847646883,	...
				.000230385764,	-.000251963189,	.000039347320	];
	end
	if Par==20,
		f = [	.026670057901,	.188176800078,	.527201188932,	...
				.688459039454,	.281172343661,	-.249846424327,	...
				-.195946274377,	.127369340336,	.093057364604,	...
				-.071394147166,	-.029457536822,	.033212674059,	...
				.003606553567,	-.010733175483,	.001395351747,	...
				.001992405295,	-.000685856695,	-.000116466855,	...
				.000093588670,	-.000013264203					];
	end
end

if string(Typ)=='Symmlet',
	if Par==4,
		f = [	-.107148901418,	-.041910965125,	.703739068656,	...
				1.136658243408,	.421234534204,	-.140317624179,	...
				-.017824701442,	.045570345896					];
	end
	if Par==5,
		f = [	.038654795955,	.041746864422,	-.055344186117,	...
				.281990696854,	1.023052966894,	.896581648380,	...
				.023478923136,	-.247951362613,	-.029842499869,	...
				.027632152958									];
	end
	if Par==6,  
		f = [	.021784700327,	.004936612372,	-.166863215412,	...
				-.068323121587,	.694457972958,	1.113892783926,	...
				.477904371333,	-.102724969862,	-.029783751299,	...
				.063250562660,	.002499922093,	-.011031867509	];
	end
	if Par==7,
		f = [	.003792658534,	-.001481225915,	-.017870431651,	...
				.043155452582,	.096014767936,	-.070078291222,	...
				.024665659489,	.758162601964,	1.085782709814,	...
				.408183939725,	-.198056706807,	-.152463871896,	...
				.005671342686,	.014521394762					];
	end
	if Par==8, 
		f = [	.002672793393,	-.000428394300,	-.021145686528,	...
				.005386388754,	.069490465911,	-.038493521263,	...
				-.073462508761,	.515398670374,	1.099106630537,	...
				.680745347190,	-.086653615406,	-.202648655286,	...
				.010758611751,	.044823623042,	-.000766690896,	... 
				-.004783458512									];
	end
	if Par==9,
		f = [	.001512487309,	-.000669141509,	-.014515578553,	...
				.012528896242,	.087791251554,	-.025786445930,	...
				-.270893783503,	.049882830959,	.873048407349,	...
				1.015259790832,	.337658923602,	-.077172161097,	...
				.000825140929,	.042744433602,	-.016303351226,	...
				-.018769396836,	.000876502539,	.001981193736	];
	end
	if Par==10,
		f = [	.001089170447,	.000135245020,	-.012220642630,	...
				-.002072363923,	.064950924579,	.016418869426,	...
				-.225558972234,	-.100240215031,	.667071338154,	...
				1.088251530500,	.542813011213,	-.050256540092,	...
				-.045240772218,	.070703567550,	.008152816799,	...
				-.028786231926,	-.001137535314,	.006495728375,	...
				.000080661204,	-.000649589896					];
	end
end
	
if string(Typ)=='Vaidyanathan',
	f = [	-.000062906118,	.000343631905,	-.000453956620,	...
			-.000944897136,	.002843834547,	.000708137504,	...
			-.008839103409,	.003153847056,	.019687215010,	...
			-.014853448005,	-.035470398607,	.038742619293,	...
			.055892523691,	-.077709750902,	-.083928884366,	...
			.131971661417,	.135084227129,	-.194450471766,	...
			-.263494802488,	.201612161775,	.635601059872,	...
			.572797793211,	.250184129505,	.045799334111		];
end

if string(Typ)=='Battle',
	if Par == 1,
           g = [0.578163,   0.280931,   -0.0488618,   -0.0367309, ...
                0.012003,    0.00706442, -0.00274588, -0.00155701, ...
                0.000652922, 0.000361781, -0.000158601,-0.0000867523
	    ];
	end

	if Par == 3,
        
	g = [0.541736,    0.30683,    -0.035498,    -0.0778079, ...
             0.0226846,   0.0297468,     -0.0121455, -0.0127154, ...
             0.00614143, 0.00579932,    -0.00307863, -0.00274529, ...
             0.00154624, 0.00133086, -0.000780468, -0.00065562, ...
	     0.000395946, 0.000326749, -0.000201818, -0.000164264, ...
             0.000103307
	    ];
	end

	if Par == 5,
 	g = [0.528374,    0.312869,    -0.0261771,   -0.0914068, ...
             0.0208414,    0.0433544, -0.0148537, -0.0229951,  ...
             0.00990635, 0.0128754,    -0.00639886, -0.00746848, ...
             0.00407882, 0.00444002, -0.00258816,    -0.00268646, ...
             0.00164132, 0.00164659, -0.00104207, -0.00101912, ...
	    0.000662836, 0.000635563, -0.000422485, -0.000398759, ...
	    0.000269842, 0.000251419, -0.000172685, -0.000159168, ...
	    0.000110709, 0.000101113];
	end
        l = length2(g);
        f = zeros(1,2*l-1);
        f(l:2*l-1) = g;
        f(1:l-1) = reverse(waverow(g(2:l)));
end

f = f ./ norm(f);
endfunction

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -