- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
}
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
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page