taper.c 2.3 KB
Newer Older
tilman.metz's avatar
tilman.metz committed
1
/*-----------------------------------------------------------------------------------------
2
 * Copyright (C) 2016  For the list of authors, see file AUTHORS.
tilman.metz's avatar
tilman.metz committed
3
 *
Florian Wittkamp's avatar
Florian Wittkamp committed
4
 * This file is part of IFOS.
tilman.metz's avatar
tilman.metz committed
5
 * 
Florian Wittkamp's avatar
Florian Wittkamp committed
6
 * IFOS is free software: you can redistribute it and/or modify
tilman.metz's avatar
tilman.metz committed
7 8 9
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, version 2.0 of the License only.
 * 
Florian Wittkamp's avatar
Florian Wittkamp committed
10
 * IFOS is distributed in the hope that it will be useful,
tilman.metz's avatar
tilman.metz committed
11 12 13 14 15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
Florian Wittkamp's avatar
Florian Wittkamp committed
16
 * along with IFOS. See file COPYING and/or <http://www.gnu.org/licenses/gpl-2.0.html>.
tilman.metz's avatar
tilman.metz committed
17 18 19
-----------------------------------------------------------------------------------------*/

/*------------------------------------------------------------------------
Florian Wittkamp's avatar
Florian Wittkamp committed
20
 *   Taper function now adapted for use in stf.c, only for single traces!
tilman.metz's avatar
tilman.metz committed
21 22 23 24
 *  ----------------------------------------------------------------------*/
#include "fd.h"
#include "segy.h"

Florian Wittkamp's avatar
Florian Wittkamp committed
25
void  taper(float *section, int ns, float fc){
tilman.metz's avatar
tilman.metz committed
26 27

	/* declaration of extern variables */
Florian Wittkamp's avatar
Florian Wittkamp committed
28 29
	extern int MYID;
	extern float DT;
tilman.metz's avatar
tilman.metz committed
30 31 32
	extern FILE *FP;
	
	/* declaration of local variables */
Florian Wittkamp's avatar
Florian Wittkamp committed
33
	int i,j, h, taperlength, taperduration;
tilman.metz's avatar
tilman.metz committed
34 35 36 37 38 39 40 41
	int tracl1;
	float a;
	float damping, amp;
	float *window=NULL, *amp1=NULL;
	
	window = vector(1,ns);
        amp1 = vector(1,ns);
	
Florian Wittkamp's avatar
Florian Wittkamp committed
42 43 44
	taperlength=(int)(ceil(2.0/fc/DT));
	taperduration=2*taperlength;
	
tilman.metz's avatar
tilman.metz committed
45
	/* "Cerjan"-Window */
Florian Wittkamp's avatar
Florian Wittkamp committed
46
        damping=99.9;
tilman.metz's avatar
tilman.metz committed
47
        amp=1.0-damping/100.0;
Florian Wittkamp's avatar
Florian Wittkamp committed
48 49 50
	        a=sqrt(-log(amp)/((taperlength-1)*(taperlength-1)));
        
	for (i=1;i<=ns;i++){
tilman.metz's avatar
tilman.metz committed
51 52 53
		window[i]=1.0;
		amp1[i]=0.0;
	}
Florian Wittkamp's avatar
Florian Wittkamp committed
54
	
tilman.metz's avatar
tilman.metz committed
55
	if (MYID==0){
Florian Wittkamp's avatar
Florian Wittkamp committed
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
		fprintf(FP,"\n fc: %f\n",fc);
		fprintf(FP,"\n taperlength: %d\n",taperlength);
	}
	
	for (i=1;i<=taperlength;i++){
		amp1[i]=exp(-(a*a*(taperlength-i)*(taperlength-i)));
	}
	
// 	/* Taper at the beginning of the window*/
// 	for (i=1;i<=taperlength;i++){
// 		window[i]=amp1[i];
// 	}
	
	h=1;
	for (i=taperduration;i>=(taperduration-taperlength+3);i--){
		window[i]=amp1[h];
		h++;
tilman.metz's avatar
tilman.metz committed
73 74
	}
	
Florian Wittkamp's avatar
Florian Wittkamp committed
75 76
	for (i=taperduration;i<=ns;i++){
		window[i]=amp1[i];
tilman.metz's avatar
tilman.metz committed
77
	}
Florian Wittkamp's avatar
Florian Wittkamp committed
78 79 80 81 82
	
	for(j=1;j<=ns;j++){
		section[j]*=window[j];
	}
	
tilman.metz's avatar
tilman.metz committed
83 84 85
	free_vector(window,1,ns);
	free_vector(amp1,1,ns);
}