PayPal的个人空间 https://blog.eetop.cn/asic [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

对数学公式在离散化时的理解

热度 15已有 1695 次阅读| 2023-4-2 17:45 |个人分类:菜鸟の新知识|系统分类:芯片设计

一些计算,例如DFT,在计算时需要用到系数。这些系数在公式中是使用cos函数和sin函数计算出来的,每次使用一个系数,都需要进行一次三角函数计算。但是用数字电路实现时,所以通常会采用预先采样出三角函数值存在表格里,通过地址索引的方式完成系数的计算。

NDFT为例来分析下如何实现系数的正确计算。为简化分析,仅考虑实部。由于n,k为整数,所以系数的每次步进最小单位为2π/N,根据不同的n,k值得到不同的系数。考虑到三角函数的周期性,可将2π/N *n*k归一化到内。

在数字电路实现时,对一个周期内的cos函数值进行sf点的采样得到完整的cos函数值表。

数学公式中cos函数以为周期,DFT系数中cos函数的最小步进单位为2π/N数字电路中cos函数以地址sf为周期,最小步进单位是sf/N。在查找表时根据不同的n,k值就可以得到数学公式中的系数。


以下是matlab验证代码:

clear;

       A = 256;  f = 1;  T = 1;  sf = 64; 

        fs = sf*f;  ds = 1/fs;  ts = 0:ds:T;

        cos_ROM = round(A*cos(2*pi*f*ts));       

        N = 16;  n_max = 16;

        % Mathematical formula

        for k = 0:N-1

            for n = 0:n_max-1

                cos_A(k+1,n+1) = round(A*cos(2*pi/N * n*k));

            end

        end

        % Digital

        step = sf / N; % 最小步进值

        step_k = 0;

        for k = 0:N-1

            addr = 0;

            for n = 0:n_max-1

                addr = addr + step_k; % addr = step * n* k;

                if(n==0)

                    addr = 0;

                end

                addr = mod(addr,sf);

                cos_D(k+1,n+1) = cos_ROM(addr+1);

            end

            step_k = step_k + step;

        end

5

点赞

刚表态过的朋友 (5 人)

发表评论 评论 (2 个评论)

回复 iandphp 2023-4-2 21:23
总结的不错啊
回复 PayPal 2023-4-3 09:02
iandphp: 总结的不错啊
  

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 4

    粉丝
  • 2

    好友
  • 13

    获赞
  • 6

    评论
  • 851

    访问数
关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-20 16:22 , Processed in 0.017408 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部