Interpolate whole arrays of complex numbers

前端 未结 2 1974
孤街浪徒
孤街浪徒 2021-01-14 10:04

I have a number of 2-dimensional np.arrays (all of equal size) containing complex numbers. Each of them belongs to one position in a 4-dimensional space. Those positions are

2条回答
  •  野的像风
    2021-01-14 11:07

    There are two ways of looking at complex numbers:

    1. Cartesian Form ( a + bi ) and
    2. Polar/Euler Form ( A * exp(i * phi) )

    When you say you want to interpolate between two polar coordinates, do you want to interpolate with respect to the real/imaginary components (1), or with respect to the number's magnitude and phase (2)?

    You CAN break things down into real and imaginary components,

    X = 2 * 5j
    X_real = np.real(X)
    X_imag = np.imag(X)
    
    # Interpolate the X_real and X_imag
    
    # Reconstruct X
    X2 = X_real + 1j * X_imag
    

    However, With real-life applications that involve complex numbers, such as digital filter design, you quite often want to work with numbers in Polar/exponential form.

    Therefore instead of interpolating the np.real() and np.imag() components, you may want to break it down into magnitude & phase using np.abs() and Angle or Arctan2, and interpolate separately. You might do this, for example, when trying to interpolate the Fourier Transform of a digital filter.

    Y = 1+2j
    mag = np.abs(Y)
    phase = np.angle(Y)
    

    The interpolated values can be converted back into complex (Cartesian) numbers using the Eulers formula

    # Complex number
    y = mag * np.exp( 1j * phase)
    
    # Or if you want the real and imaginary complex components separately,
    realPart, imagPart = mag * np.cos(phase) , mag * np.sin(phase)
    

    Depending on what you're doing, this gives you some real flexibility with the interpolation methods you use.

提交回复
热议问题