Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
10 years ago

Computing Argument of a Complex Number

Hi,

I have a complex input, both I & Q are 16 bit wide signed integers, and I want to compute its argument.

I have read several solutions, CORDIC, LUT based ATAN, and Altera ATAN function.

The latter seems to consume a huge amount of resources, and it's using floating point to the best of my knowledge... I've eliminated this one.

My questions are:

1) Should I convert to fixed point arithmetic?

2) What is the best (and fastest in terms of implementation) solution to use?

5 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Puts are always the quickest. The values can either be loaded from a file or computed in the hdl itself. It will have the lowest latency too. But depending on the accuracy requirements it can eat a lot of ram. Fixed point will always be better than floating because of its integer based arithmatic.

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Please excuse my ignorance, but... what is "puts"? Or do you mean LUTs?

    I've just read the documentation of this core:

    http://opencores.org/project,cordic

    It does exactly what I want, converting rectangular to polar... seems like I tend to use it. What do you think?
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    I meant puts. I was playing from my phone and got autocorrected.

    I'd it does what you want, go for it. Don't expect much support for anything from open cores though.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Would you please explain more what do you mean by "puts"?

    CORDIC is giving good results, but it takes several clock cycles to compute.