kzrc2: Reconstruct 2D Wave Signals For Given Directions with KZFT

Description Usage Arguments Details See Also Examples

Description

Once you have identified the waves' directions and frequencies, you can reconstruct the spatial wave signals with kz.rc2. Directional information is utilized to suppressive the noise.

Usage

1
kz.rc2(ds, f = 0.25, m = round(min(dim(ds)/2)), ...)

Arguments

ds

Matrix for data of wave field. Missing values are allowed.

f

Vector. Identified wave frequency.

m

The window size for a regular Fourier transform

...

Other arguments.

  • angle : Vector. Identified wave direction value in degree.

  • k : Integer, defaulting to 2. The iterations number of KZFT.

  • n : The sampling frequency rate as a multiplication of the Fourier frequencies

  • p : The distance between two successive intervals as a percentage of the total length of the data series

  • avg : Logic. If average along orthogonal direction. Default is TRUE if angle is available.

  • plot : Logic. Flag for outputing figures. Default is FALSE.

  • compare : Logic. Flag for drawing input image. Default is FALSE.

  • edge : Logic. Flag for keeping the edge data in the returned reconstructed signal. Default is FALSE.

  • rlvl : Integer. Coefficient to control the averaging level when avg is TRUE. Default value is 2.

Details

Averaging along the orthogonal direction of a wave signal will significantly reduce the noise effects and increase the accuracy of reconstruction.

When the direction information is not available, the 2D signal will be reconstructed along x-axis, but the result usually has a phase-shift even for the dominant wave pattern.

If choose to average reconstructed signal along its orthogonal direction, rlvl should be set to control the averaging level. If the input data has comparable size on x- or y-dimension, an experiential formula is to use the integer value around sqrt(dx)*1.5, where dx is the array size.

See Also

kzft, kz.smpg, kzp2

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
dx <- 100			# The x and y scale of the wave field
dy <- 100			# Enlarge them to 300 to get better result.

b <- expand.grid(x=1:dx, y=dy:1)
q1 <- pi/6; f1 <- 0.1;
b$v1 <- sin(f1*2*pi*(b$x*cos(q1)+b$y*sin(q1))+runif(1))
a1 <- array(0,c(dx,dy))
a1[as.matrix(b[,1:2])] <- b$v1
q2 <- -pi/3; f2 <- 0.15;
b$v2 <- sin(f2*2*pi*(b$x*cos(q2)+b$y*sin(q2))+runif(1))
a2 <- array(0,c(dx,dy))
a2[as.matrix(b[,1:2])] <- b$v2
a <- array(0,c(dx,dy))
a[as.matrix(b[,1:2])] <- b$v1 + 2.5*b$v2
noise <- matrix(rnorm(dx*dy,0,1),ncol=dy)

persp(1:(dx/2), 1:(dy/2), a1[1:(dx/2), 1:(dy/2)], zlab="",
	main="wave #1", theta=0, phi=45, ticktype="detailed", col="lightblue")
persp(1:(dx/2), 1:(dy/2), a2[1:(dx/2), 1:(dy/2)], 
	main="wave #2", theta=90, phi=-110, ticktype="detailed", col="lightblue")
persp(1:(dx/2), 1:(dy/2), a[1:(dx/2), 1:(dy/2)], 
	main="wave #1 + #2 ", theta=90, phi=-110, ticktype="detailed", col="lightblue")
persp(1:(dx/2), 1:(dy/2), a[1:(dx/2), 1:(dy/2)] + 5*noise[1:(dx/2), 1:(dy/2)], 
	main="wave #1 + #2 + 5*noise", theta=90, phi=-110, ticktype="detailed", col="lightblue")

image(x=1:dim(a1)[1] , y=1:dim(a1)[2], z=a1)
	box(); mtext("wave #1")
image(x=1:dim(a2)[1] , y=1:dim(a2)[2], z=a2) 
	box(); mtext("wave #2")
image(x=1:dim(a)[1] , y=1:dim(a)[2], z=a+0*noise)
	box(); mtext("wave #1 + #2 ")
image(x=1:dim(a)[1] , y=1:dim(a)[2], z=a+7*noise)
	box(); mtext("wave #1 + #2 + 7*noise")

rc0 <- kz.rc2(a+0*noise, angle=c(q1,q2)*180/pi,f=c(f1,f2), m = 50, avg=FALSE)
cor(as.vector(a[1:dim(rc0)[1],1:dim(rc0)[2]]), as.vector(rc0), use="pairwise.complete.obs")

rc0 <- kz.rc2(a+0*noise, angle=c(q1,q2)*180/pi,f=c(f1,f2), m = 50, avg=TRUE, rlvl=15)
cor(as.vector(a[1:dim(rc0)[1],1:dim(rc0)[2]]), as.vector(rc0), use="pairwise.complete.obs")

rc <- kz.rc2(a+7*noise, angle=c(q1,q2)*180/pi,f=c(f1,f2), m = 50, avg=TRUE, rlvl=15, plot=TRUE)
cor(as.vector(a[1:dim(rc)[1],1:dim(rc)[2]]), as.vector(rc), use="pairwise.complete.obs")
dev.new();image(x=1:dim(rc)[1] , y=1:dim(rc)[2], z=a[1:dim(rc)[1],1:dim(rc)[2]])
box();title("Signal without noise")

rc <- kz.rc2(a+7*noise, angle=q2*180/pi, f=f2, m = 50, avg=TRUE, rlvl=21, plot=TRUE)
cor(as.vector(a2[1:dim(rc)[1],1:dim(rc)[2]]), as.vector(rc), use="pairwise.complete.obs")
dev.new();image(x=1:dim(rc)[1] , y=1:dim(rc)[2], z=a2[1:dim(rc)[1],1:dim(rc)[2]])
box();title("Signal without noise")

kzfs documentation built on June 2, 2019, 5:04 p.m.

Related to kzrc2 in kzfs...