Community
cancel
Showing results for 
Search instead for 
Did you mean: 
rohitspandey
Beginner
69 Views

Function for frequency remix

Hi,

I need to implement frequency remix and have a comparable performance as matlab.

The function i was trying is


Ipp32fc * pbuf = ippsMalloc_32fc(Np);

Ipp32fc * pbufcom = ippsMalloc_32fc(Np);

Ipp32fc * pbufmul = ippsMalloc_32fc(Np);

// IppStatus ippsTone_Direct_32fc(Ipp32fc* pDst, int len, float magn, float rFreq, float* pPhase, IppHintAlgorithmhint);

//IppStatus ippsRealToCplx_32f(const Ipp32f* pSrcRe, const Ipp32f* pSrcIm, Ipp32fc* pDst, int len);

IppStatCom = ippsRealToCplx_32f(pIsrc, pQsrc, pbufcom, Np);

ippStatsSin = ippsTone_Direct_32fc(pbuf,Np,1.0,foffcos,&ZeroPh,ippAlgHintAccurate);

// IppStatus ippsMul_32fc(const Ipp32fc* pSrc1, const Ipp32fc* pSrc2, Ipp32fc* pDst, int len);

IppStatMul = ippsMul_32fc(pbuf, pbufcom, pbufmul, Np);

//IppStatus ippsCplxToReal_32fc(const Ipp32fc* pSrc, Ipp32f* pDstRe, Ipp32f* pDstIm, int len);

ippStatsCos = ippsCplxToReal_32fc(pbufmul,pIdest,pQdest,Np);

foffcos = 0.0;

ippsFree(pbuf);

ippsFree(pbufcom);

ippsFree(pbufmul);


but the performance (i.e accuracy) of this implmentation is not all close tomatlab for sample size >10^4and initial phasor angle between (pi/2-pi/16). Though for smaller angle the perforamnce is comparable. The evm is non-linear in both cases. I tried reseting phase at a certain sample size but the ippsTone_Direct_32fc(pbuf,Np,1.0,foffcos,&ZeroPh,ippAlgHintAccurate); is not behaving as expected. I tried providing ZeroPh to a value equal to the phase that will be vaild at the resetting sample value. But the response is non-linear.

I treid 64 bit version also. The 64 bit version implmentation has linear evm but its high. I tired another version of implmentation

for (k = 0; k

{

v1= k*foff;

}

ippStatsSin = ippsSin_32f_A21(&v1[0], &v2[0], Np);

ippStatsCos = ippsCos_32f_A21(&v1[0], &v3[0], Np);

//remix

MultiplyComplexArrays( pIsrc,

pQsrc,

&v3[0],

&v2[0],

pIdest,

pQdest,

Np);

It has the similar non-linear EVM perfromance compared with Matlab
Matlab code

len = 2*10^6;

xI = ones(1,len);%.*0.707;%.* rand(1,len);

xQ = zeros(1,len);%.*0.707;%.* rand(1,len);

in = [0:1:len-1];

ph = pi/2;%different phase

remixI = cos(ph.*in);

remixQ = sin(ph.*in);

% remix

refI = xI.*remixI - xQ.*remixQ;

refQ = xQ.*remixI + xI.*remixQ;

rc= refI + 1i*refQ; % reference

dc = dllOutI+1i*dllOutQ; % IPP

mag = abs(dc);

angledc= unwrap(angle(dc));

magref =abs(rc);

anglerc= unwrap(angle(rc));

%error

magerr = magref - mag;

angleerr = anglerc- angledc;

Is there something i missed in the above implementation? Kindly suggest what are the possible solution to achive comparable performance.

Regards
Rohit


Kindly have a look and suggest some

0 Kudos
2 Replies
igorastakhov
New Contributor II
69 Views

Rohit, could you translate for me what is "evm", I've found in wikipedia only the next:

EVM can be an abbreviation for:

Electronic Voting Machine

Earned value management

Economic value management; see economic value added

Electronic voltmeter; see voltmeter, a device to measure voltage

Electronic voting machine; see electronic voting

Error vector magnitude, a measure of performance of a radio demodulator

Evaluation module

Expert Group on Vitamins and Minerals

Extended Voice Module (Cisco Systems)

External Voice Mail; see voicemail

Extra-Value Meal; see McDonald's

Eyes, Voice, Movement; the three components of the Glasgow Coma Scale

Elastameric Variable Membrane; pool coating

Extruded Verbal Material

Regards,
Igor

rohitspandey
Beginner
69 Views

Hi,

Sorry to confuse with the term EVM(its error vector maganitude). in thecontext of the function it is refering to

difference in the phase angle of the refernce vector and the IPP output vector. The reference vector is genrated using the matlab (the code defined above) and dllout is the output of the IPP function. I hope now EVM is clear in the context.
Rgs
Rohti
Reply