git-svn-id: http://moon:8086/svn/software/trunk/libsrc/radio@1 b431acfa-c32f-4a4a-93f1-934dc6c82436
1028 lines
22 KiB
C++
Executable File
1028 lines
22 KiB
C++
Executable File
#include <windows.h>
|
|
#include <stdarg.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include "Complex.hpp"
|
|
|
|
void ComplexDebug(char *fmtstr, ...)
|
|
{
|
|
char buf[1024];
|
|
va_list args;
|
|
|
|
va_start(args, fmtstr);
|
|
vsprintf(buf, fmtstr, args);
|
|
va_end(args);
|
|
OutputDebugString(buf);
|
|
|
|
}
|
|
|
|
// = src
|
|
ComplexVector& ComplexVector::operator=(const ComplexVector &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(m_size, src.m_size);
|
|
|
|
j = 0;
|
|
dj = src.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = src.m_pPtrReal[j];
|
|
m_pPtrImag[i] = src.m_pPtrImag[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// = src
|
|
ComplexVector& ComplexVector::operator=(const radio_float_t &b)
|
|
{
|
|
*this = ComplexVector (b, 0);
|
|
return *this;
|
|
}
|
|
|
|
// *= src
|
|
ComplexVector& ComplexVector::operator*=(const radio_float_t &b)
|
|
{
|
|
*this = *this * ComplexVector (b, 0);
|
|
return *this;
|
|
}
|
|
|
|
// += src
|
|
ComplexVector& ComplexVector::operator+=(const radio_float_t &b)
|
|
{
|
|
*this = *this + ComplexVector (b, 0);
|
|
return *this;
|
|
}
|
|
|
|
ComplexVector& ComplexVector::operator-=(const radio_float_t &b)
|
|
{
|
|
*this = *this - ComplexVector (b, 0);
|
|
return *this;
|
|
}
|
|
|
|
// *= src
|
|
ComplexVector& ComplexVector::operator*=(const ComplexVector &src)
|
|
{
|
|
*this = *this * src;
|
|
return *this;
|
|
}
|
|
|
|
// += src
|
|
ComplexVector& ComplexVector::operator+=(const ComplexVector &src)
|
|
{
|
|
*this = *this + src;
|
|
return *this;
|
|
}
|
|
|
|
// -= src
|
|
ComplexVector& ComplexVector::operator-=(const ComplexVector &src)
|
|
{
|
|
*this = *this - src;
|
|
return *this;
|
|
}
|
|
|
|
// = -src
|
|
ComplexVector& ComplexVector::operator=(const Negate &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(m_size, src.src.m_size);
|
|
|
|
j = 0;
|
|
dj = src.src.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = -src.src.m_pPtrReal[j];
|
|
m_pPtrImag[i] = -src.src.m_pPtrImag[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// *= -src
|
|
ComplexVector& ComplexVector::operator*=(const Negate &src)
|
|
{
|
|
*this = *this * src;
|
|
return *this;
|
|
}
|
|
|
|
// += -src
|
|
ComplexVector& ComplexVector::operator+=(const Negate &src)
|
|
{
|
|
*this = *this + src;
|
|
return *this;
|
|
}
|
|
|
|
// -= -src
|
|
ComplexVector& ComplexVector::operator-=(const Negate &src)
|
|
{
|
|
*this = *this + src;
|
|
return *this;
|
|
}
|
|
|
|
// = src*
|
|
ComplexVector& ComplexVector::operator=(const Conjugate &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(m_size, src.src.m_size);
|
|
|
|
j = 0;
|
|
dj = src.src.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = + src.src.m_pPtrReal[j];
|
|
m_pPtrImag[i] = - src.src.m_pPtrImag[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// *= src*
|
|
ComplexVector& ComplexVector::operator*=(const Conjugate &src)
|
|
{
|
|
*this = *this * src;
|
|
return *this;
|
|
}
|
|
|
|
// += src*
|
|
ComplexVector& ComplexVector::operator+=(const Conjugate &src)
|
|
{
|
|
*this = *this + src;
|
|
return *this;
|
|
}
|
|
|
|
// += src*
|
|
ComplexVector& ComplexVector::operator-=(const Conjugate &src)
|
|
{
|
|
*this = *this - src;
|
|
return *this;
|
|
}
|
|
|
|
// *= -src*
|
|
ComplexVector& ComplexVector::operator=(const ConjugateNegate &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(m_size, src.src.m_size);
|
|
|
|
j = 0;
|
|
dj = src.src.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = - src.src.m_pPtrReal[j];
|
|
m_pPtrImag[i] = + src.src.m_pPtrImag[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// *= -src*
|
|
ComplexVector& ComplexVector::operator*=(const ConjugateNegate &src)
|
|
{
|
|
*this = *this * src;
|
|
return *this;
|
|
}
|
|
|
|
// += -src*
|
|
ComplexVector& ComplexVector::operator+=(const ConjugateNegate &src)
|
|
{
|
|
*this = *this + src;
|
|
return *this;
|
|
}
|
|
|
|
// -= -src*
|
|
ComplexVector& ComplexVector::operator-=(const ConjugateNegate &src)
|
|
{
|
|
*this = *this - src;
|
|
return *this;
|
|
}
|
|
|
|
// 1.
|
|
// = a * b
|
|
ComplexVector& ComplexVector::operator=(const Mul_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] = + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 1.
|
|
// += a * b
|
|
ComplexVector& ComplexVector::operator+=(const Mul_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] += + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] += + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 1.
|
|
// -= a * b
|
|
ComplexVector& ComplexVector::operator-=(const Mul_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] -= + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] -= + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 2.
|
|
// = (-a) * b
|
|
// = a * (-b)
|
|
// = -(a * b)
|
|
ComplexVector& ComplexVector::operator=(const NegMul_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] = - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 2.
|
|
// += (-a) * b
|
|
// += a * (-b)
|
|
// += -(a * b)
|
|
ComplexVector& ComplexVector::operator+=(const NegMul_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] += - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] += - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 2.
|
|
// -= (-a) * b
|
|
// -= a * (-b)
|
|
// -= -(a * b)
|
|
ComplexVector& ComplexVector::operator-=(const NegMul_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] -= - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] -= - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 3.
|
|
// = a* * b
|
|
// = a * b*
|
|
ComplexVector& ComplexVector::operator=(const Mul_A_ConjB &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] = - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 3.
|
|
// += a* * b
|
|
// += a * b*
|
|
ComplexVector& ComplexVector::operator+=(const Mul_A_ConjB &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] += + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] += - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 3.
|
|
// -= a* * b
|
|
// -= a * b*
|
|
ComplexVector& ComplexVector::operator-=(const Mul_A_ConjB &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] -= + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] -= - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 4.
|
|
// = (a * b)*
|
|
// = a* * b*
|
|
ComplexVector& ComplexVector::operator=(const ConjMul_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] = - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 4.
|
|
// += (a * b)*
|
|
// += a* * b*
|
|
ComplexVector& ComplexVector::operator+=(const ConjMul_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] += + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] += - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 4.
|
|
// -= (a * b)*
|
|
// -= a* * b*
|
|
ComplexVector& ComplexVector::operator-=(const ConjMul_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] -= + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] -= - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 5.
|
|
// = -(a * b)*
|
|
// = (-a)* * (-b)*
|
|
ComplexVector& ComplexVector::operator=(const ConjNegMul_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] = + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 5.
|
|
// += -(a * b)*
|
|
// += (-a)* * (-b)*
|
|
ComplexVector& ComplexVector::operator+=(const ConjNegMul_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] += - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] += + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 5.
|
|
// -= -(a * b)*
|
|
// -= (-a)* * (-b)*
|
|
ComplexVector& ComplexVector::operator-=(const ConjNegMul_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] -= - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] -= + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 6.
|
|
// = (-a) * b*
|
|
// = a * (-b)*
|
|
// = (-a)* * b
|
|
// = a* * (-b)
|
|
ComplexVector& ComplexVector::operator=(const NegMul_A_ConjB &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] = + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 6.
|
|
// += (-a) * b*
|
|
// += a * (-b)*
|
|
// += (-a)* * b
|
|
// += a* * (-b)
|
|
ComplexVector& ComplexVector::operator+=(const NegMul_A_ConjB &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] += - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] += + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 6.
|
|
// -= (-a) * b*
|
|
// -= a * (-b)*
|
|
// -= (-a)* * b
|
|
// -= a* * (-b)
|
|
ComplexVector& ComplexVector::operator-=(const NegMul_A_ConjB &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] -= - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j];
|
|
m_pPtrImag[i] -= + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 1.
|
|
// a + b
|
|
ComplexVector& ComplexVector::operator=(const Add_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = + src.a.m_pPtrReal[i] + src.b.m_pPtrReal[j];
|
|
m_pPtrImag[i] = + src.a.m_pPtrImag[i] + src.b.m_pPtrImag[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 2.
|
|
// - (a + b)
|
|
// -a - b
|
|
ComplexVector& ComplexVector::operator=(const NegAdd_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = - src.a.m_pPtrReal[i] - src.b.m_pPtrReal[j];
|
|
m_pPtrImag[i] = - src.a.m_pPtrImag[i] - src.b.m_pPtrImag[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 3.
|
|
// (a + b)*
|
|
ComplexVector& ComplexVector::operator=(const ConjAdd_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = + src.a.m_pPtrReal[i] + src.b.m_pPtrReal[j];
|
|
m_pPtrImag[i] = + src.a.m_pPtrImag[i] - src.b.m_pPtrImag[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 4.
|
|
// -(a + b)*
|
|
// (-a)* + (-b)*
|
|
ComplexVector& ComplexVector::operator=(const ConjNegAdd_A_B &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = + src.a.m_pPtrReal[i] - src.b.m_pPtrReal[j];
|
|
m_pPtrImag[i] = + src.a.m_pPtrImag[i] + src.b.m_pPtrImag[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 5.
|
|
// a - b
|
|
// a + (b-)
|
|
// (-a) + b
|
|
ComplexVector& ComplexVector::operator=(const Add_A_NegB &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = + src.a.m_pPtrReal[i] - src.b.m_pPtrReal[j];
|
|
m_pPtrImag[i] = + src.a.m_pPtrImag[i] - src.b.m_pPtrImag[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 6.
|
|
// a + b*
|
|
// a* + b
|
|
ComplexVector& ComplexVector::operator=(const Add_A_ConjB &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = + src.a.m_pPtrReal[i] + src.b.m_pPtrReal[j];
|
|
m_pPtrImag[i] = + src.a.m_pPtrImag[i] - src.b.m_pPtrImag[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 7.
|
|
// - (a + b*)
|
|
// - (a* + b)
|
|
// -a* - b
|
|
ComplexVector& ComplexVector::operator=(const NegAdd_A_ConjB &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = - src.a.m_pPtrReal[i] - src.b.m_pPtrReal[j];
|
|
m_pPtrImag[i] = - src.a.m_pPtrImag[i] + src.b.m_pPtrImag[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// 8.
|
|
// a - b*
|
|
// (-a)* + b
|
|
ComplexVector& ComplexVector::operator=(const Add_A_ConjNegB &src)
|
|
{
|
|
uint32_t i;
|
|
uint32_t j;
|
|
uint32_t dj;
|
|
|
|
checkSize(src.a.m_size, src.b.m_size);
|
|
|
|
j = 0;
|
|
dj = src.b.m_size > 1;
|
|
for (i=0; i < m_size; i++)
|
|
{
|
|
m_pPtrReal[i] = + src.a.m_pPtrReal[i] - src.b.m_pPtrReal[j];
|
|
m_pPtrImag[i] = + src.a.m_pPtrImag[i] + src.b.m_pPtrImag[j];
|
|
j += dj;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
ComplexVector::Mul_A_B operator*(const ComplexVector &a, radio_float_t b)
|
|
{
|
|
const ComplexVector bb = ComplexVector(b, 0);
|
|
const ComplexVector::Mul_A_B ab(a, bb);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Mul_A_B operator*(const ComplexVector &a, const ComplexVector &b)
|
|
{
|
|
const ComplexVector::Mul_A_B ab(a, b);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Mul_A_B operator*(const ComplexVector::Negate &a, const ComplexVector::Negate &b)
|
|
{
|
|
const ComplexVector::Mul_A_B ab(a.src, b.src);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::NegMul_A_B operator*(const ComplexVector::Negate &a, const ComplexVector &b)
|
|
{
|
|
const ComplexVector::NegMul_A_B ab(a.src, b);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::NegMul_A_B operator*(const ComplexVector &a, const ComplexVector::Negate &b)
|
|
{
|
|
const ComplexVector::NegMul_A_B ab(a, b.src);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::ConjMul_A_B operator*(const ComplexVector::Conjugate &a, const ComplexVector::Conjugate &b)
|
|
{
|
|
const ComplexVector::ConjMul_A_B ab(a.src, b.src);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Mul_A_ConjB operator*(const ComplexVector::Conjugate &a, const ComplexVector &b)
|
|
{
|
|
const ComplexVector::Mul_A_ConjB ab(b, a);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Mul_A_ConjB operator*(const ComplexVector &a, const ComplexVector::Conjugate &b)
|
|
{
|
|
const ComplexVector::Mul_A_ConjB ab(a, b);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::ConjMul_A_B operator*(const ComplexVector::ConjugateNegate &a, const ComplexVector::ConjugateNegate &b)
|
|
{
|
|
const ComplexVector::ConjMul_A_B ab(a.src, b.src);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::NegMul_A_ConjB operator*(const ComplexVector &a, const ComplexVector::ConjugateNegate &b)
|
|
{
|
|
const ComplexVector::NegMul_A_ConjB ab(a, b.src);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::NegMul_A_ConjB operator*(const ComplexVector::ConjugateNegate &a, const ComplexVector &b)
|
|
{
|
|
const ComplexVector::NegMul_A_ConjB ab(b, a.src);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::NegMul_A_ConjB operator*(const ComplexVector::Negate &a, const ComplexVector::Conjugate &b)
|
|
{
|
|
const ComplexVector::NegMul_A_ConjB ab(a.src, b.src);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::NegMul_A_ConjB operator*(const ComplexVector::Conjugate &a, const ComplexVector::Negate &b)
|
|
{
|
|
const ComplexVector::NegMul_A_ConjB ab(b.src, a.src);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Mul_A_ConjB operator*(const ComplexVector::Negate &a, const ComplexVector::ConjugateNegate &b)
|
|
{
|
|
const ComplexVector::Mul_A_ConjB ab(a.src, b.src);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Mul_A_ConjB operator*(const ComplexVector::ConjugateNegate &a, const ComplexVector::Negate &b)
|
|
{
|
|
const ComplexVector::Mul_A_ConjB ab(b.src, a.src);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Add_A_B operator+(const ComplexVector &a, radio_float_t b)
|
|
{
|
|
const ComplexVector bb = ComplexVector(b, 0);
|
|
const ComplexVector::Add_A_B ab(a, bb);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Add_A_B operator+(const ComplexVector &a, const ComplexVector &b)
|
|
{
|
|
const ComplexVector::Add_A_B ab(a, b);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Add_A_NegB operator+(const ComplexVector::Negate &a, const ComplexVector &b)
|
|
{
|
|
const ComplexVector::Add_A_NegB ab(b, a);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Add_A_NegB operator+(const ComplexVector &a, const ComplexVector::Negate &b)
|
|
{
|
|
const ComplexVector::Add_A_NegB ab(a, b);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Add_A_ConjB operator+(const ComplexVector::Conjugate &a, const ComplexVector &b)
|
|
{
|
|
const ComplexVector::Add_A_ConjB ab(b, a);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Add_A_ConjB operator+(const ComplexVector &a, const ComplexVector::Conjugate &b)
|
|
{
|
|
const ComplexVector::Add_A_ConjB ab(a, b);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::ConjAdd_A_B operator+(const ComplexVector::Conjugate &a, const ComplexVector::Conjugate &b)
|
|
{
|
|
const ComplexVector::ConjAdd_A_B ab(a.src, b.src);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Add_A_ConjNegB operator+(const ComplexVector::ConjugateNegate &a, const ComplexVector &b)
|
|
{
|
|
const ComplexVector::Add_A_ConjNegB ab(b, a);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Add_A_ConjNegB operator+(const ComplexVector &a, const ComplexVector::ConjugateNegate &b)
|
|
{
|
|
const ComplexVector::Add_A_ConjNegB ab(a, b);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Add_A_B operator-(const ComplexVector &a, radio_float_t b)
|
|
{
|
|
const ComplexVector bb = ComplexVector(-b, 0);
|
|
const ComplexVector::Add_A_B ab(a, bb);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Add_A_NegB operator-(const ComplexVector &a, const ComplexVector &b)
|
|
{
|
|
const ComplexVector::Add_A_NegB ab(a, b);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::NegAdd_A_B operator-(const ComplexVector::Negate &a, const ComplexVector &b)
|
|
{
|
|
const ComplexVector::NegAdd_A_B ab(a.src, b);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Add_A_B operator-(const ComplexVector &a, const ComplexVector::Negate &b)
|
|
{
|
|
const ComplexVector::Add_A_B ab(a, b.src);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Add_A_NegB operator-(const ComplexVector::Negate &a, const ComplexVector::Negate &b)
|
|
{
|
|
const ComplexVector::Add_A_NegB ab(b.src, a);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Add_A_ConjNegB operator-(const ComplexVector::Conjugate &a, const ComplexVector &b)
|
|
{
|
|
const ComplexVector::Add_A_ConjNegB ab(b, a);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Add_A_ConjNegB operator-(const ComplexVector &a, const ComplexVector::Conjugate &b)
|
|
{
|
|
const ComplexVector::Add_A_ConjNegB ab(a, b);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::ConjAdd_A_B operator-(const ComplexVector::Conjugate &a, const ComplexVector::Conjugate &b)
|
|
{
|
|
const ComplexVector::ConjAdd_A_B ab(a.src, b.src);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::NegAdd_A_ConjB operator-(const ComplexVector::ConjugateNegate &a, const ComplexVector &b)
|
|
{
|
|
const ComplexVector::NegAdd_A_ConjB ab(b, a.src);
|
|
|
|
return ab;
|
|
}
|
|
|
|
ComplexVector::Add_A_ConjB operator-(const ComplexVector &a, const ComplexVector::ConjugateNegate &b)
|
|
{
|
|
const ComplexVector::Add_A_ConjB ab(a, b.src);
|
|
|
|
return ab;
|
|
}
|