public static void multiplyComplex( InterleavedF32 complexA , InterleavedF32 complexB , InterleavedF32 complexC ) {

		InputSanityCheck.checkSameShape(complexA, complexB,complexC);

		for( int y = 0; y < complexA.height; y++ ) {

			int indexA = complexA.startIndex + y*complexA.stride;
			int indexB = complexB.startIndex + y*complexB.stride;
			int indexC = complexC.startIndex + y*complexC.stride;

			for( int x = 0; x < complexA.width; x++, indexA += 2 , indexB += 2  ,indexC += 2 ) {

				float realA = complexA.data[indexA];
				float imgA = complexA.data[indexA+1];
				float realB = complexB.data[indexB];
				float imgB = complexB.data[indexB+1];

				complexC.data[indexC] = realA*realB - imgA*imgB;
				complexC.data[indexC+1] = realA*imgB + imgA*realB;
			}
		}
	}
public static void multiplyComplex ( InterleavedF32 complexA , InterleavedF32 complexB , InterleavedF32 complexC ) { InputSanityCheck . checkSameShape ( complexA , complexB , complexC ) ; for ( int y = 0 ; y < complexA . height ; y ++ ) { int indexA = complexA . startIndex + y * complexA . stride ; int indexB = complexB . startIndex + y * complexB . stride ; int indexC = complexC . startIndex + y * complexC . stride ; for ( int x = 0 ; x < complexA . width ; x ++ , indexA += 2 , indexB += 2 , indexC += 2 ) { float realA = complexA . data [ indexA ] ; float imgA = complexA . data [ indexA + 1 ] ; float realB = complexB . data [ indexB ] ; float imgB = complexB . data [ indexB + 1 ] ; complexC . data [ indexC ] = realA * realB - imgA * imgB ; complexC . data [ indexC + 1 ] = realA * imgB + imgA * realB ; } } }
Performs element-wise complex multiplication between two complex images.

@param complexA (Input) Complex image
@param complexB (Input) Complex image
@param complexC (Output) Complex image