home.social

Search

7 results for “turbocooler”

  1. So I found a use for my sin/cos CORDIC for a block that rotates PM signal by multiplying it with an NCO output. Since there is an atan2 CORDIC before it anyway the delay needed to fill the pipeline when it starts doesn’t really matter, but no one really stops me from prefilling the pipeline with initial values… Maybe I should add an option for that in case this is needed for something in the future.

    For now I have 2 blocks which need a fast NCO and thus use 2 memory ports for sin/cos tables and one which can live with CORDIC, very convenient.

  2. I also made a cool graph. That still looks weird, the lowest graph shouldn't be that messy, but the scaling is more or less right.

  3. I feel like my fixed-point DSP skills are growing. After doing the CORDICs I’ve looked at the other receiver blocks and instantly noticed bugs I didn’t see before (like AGC gain only having 2 non-fractional bits which is way below what you want), but I didn’t really practice anything specific to fixed-point arithmetic. Learning is weird.

  4. Wow, math is cool. I’ve finished atan2 CORDIC and the results are so good: less than 0.0001 radians error for 16 bits of precision for each coordinate (10 bits of fractional precision, signed) and same precision for the angle. After learning everything and doing sin/cos CORDIC this took like one breakfast and 40 minutes of ill-coding the octant rotation logic. Now I need to split the function-agnostic logic into a separate module, but otherwise it works and works very well.

  5. It’s very tempting to make a carrier tracking PLL now using only CORDIC lol, maybe I’ll make a variant of it. I don’t care about latency too much here since the thing will be receive-only.

    That doesn’t make any sense though since I also have a Costas loop that needs sin/cos tables for NCO and the error function depends on the NCO output so I can’t introduce latency or lose timing here. I can just take the second port from both sin and cos tables and give these to the PLL thus only consuming wires.

  6. After thinking some more I finally understood how atan2 should be computed: just rotate the vector until y is 0 and in case y ends up being negative, rotate the vector back. Then you just need to account for quadrants and scale by K. That’s even simpler than sin/cos and also very beautiful.

  7. Tried implementing CORDIC for sin/cos calculation and it works so well, wow, that’s a great algorithm. The maximum difference between what Python gives me and CORDIC is 0.005 for 16 bits of fixed-point fraction which is probably all right for my use case (I still have an option to just use BRAM for tables if it’s not). Also for some weird reason just 11 iterations still give me the same error for 16 bits.

Share on Mastodon

Enter the server where you have an account.