/* MCL Copyright (c) 2012-18, Enzo De Sena All rights reserved. Authors: Enzo De Sena, enzodesena@gmail.com */ #include "pointwiseop.h" #include "mcltypes.h" #include "vectorop.h" #include #ifdef MCL_APPLE_ACCELERATE #include #endif namespace mcl { void Multiply(const Real* input_data_a, const Real* input_data_b, Int num_samples, Real* output_data) noexcept { #ifdef MCL_APPLE_ACCELERATE #if MCL_DATA_TYPE_DOUBLE vDSP_vmulD(input_data_a, 1, input_data_b, 1, output_data, 1, num_samples); #else vDSP_vmul(input_data_a, 1, input_data_b, 1, output_data, 1, num_samples); #endif #else for (Int i=0; i ComplexVector(const std::vector& input) noexcept { std::vector output(input.size()); for (Int i=0; i<(Int)input.size(); ++i) { output[i] = Complex(input[i], 0.0); } return output; } std::vector RealPart(const std::vector& input) noexcept { std::vector output(input.size()); for (Int i=0; i<(Int)input.size(); ++i) { output[i] = input[i].real(); } return output; } std::vector Imag(const std::vector& input) noexcept { std::vector output(input.size()); for (Int i=0; i<(Int)input.size(); ++i) { output[i] = input[i].imag(); } return output; } std::vector Inverse(const std::vector& vector) noexcept { std::vector output(vector.size()); for (Int i=0; i<(Int)vector.size(); ++i) { output[i] = 1.0/vector[i]; } return output; } std::vector Conj(const std::vector& vector) noexcept { std::vector output(vector.size()); for (Int i=0; i<(Int)vector.size(); ++i) { output[i] = Conj(vector[i]); } return output; } std::vector Pow(const std::vector& vector, Real exponent) noexcept { std::vector output(vector.size()); for (Int i=0; i<(Int)vector.size(); ++i) { output[i] = Pow(vector[i], exponent); } return output; } std::vector HalfWave(const std::vector& input) noexcept { std::vector output = Zeros(input.size()); for (Int i=0; i<(Int)input.size(); ++i) { if (input[i] > 0.0) output[i] = input[i]; } return output; } std::vector Abs(const std::vector& input) noexcept { std::vector output(input.size()); for (Int i=0; i<(Int)input.size(); ++i) { output[i] = std::fabs(input[i]); } return output; } std::vector Abs(const std::vector& input) noexcept { std::vector output(input.size()); for (Int i=0; i<(Int)input.size(); ++i) { output[i] = std::abs(input[i]); } return output; } std::vector Log(const std::vector& vector) noexcept { Int n(vector.size()); std::vector output(vector.size()); for (Int i=0; i Log10(const std::vector& vector) noexcept { Int n(vector.size()); std::vector output(vector.size()); for (Int i=0; i Cos(const std::vector& vector) noexcept { Int n(vector.size()); std::vector output(vector.size()); for (Int i=0; i Sin(const std::vector& vector) noexcept { Int n(vector.size()); std::vector output(vector.size()); for (Int i=0; i ConvertToInt(const std::vector& vector) noexcept { const Int length = vector.size(); std::vector output(length); for (Int i=0; i