搜索
bottom↓
回复: 10

一个sigma-delta ADC的滤波和抽取电路代码

[复制链接]

出0入0汤圆

发表于 2016-2-1 16:03:55 | 显示全部楼层 |阅读模式
本帖最后由 RAMILE 于 2016-2-1 16:15 编辑

代码是在AD7400的ds上面看的,ADI官方出品,非常简洁,滤波就是累加求平均


  1. /*`Data is read on negative clk edge*/  
  2. module DEC256SINC24B(mdata1, mclk1, reset, DATA);

  3. input  mclk1;    /*used to clk filter*/
  4. input  reset;    /*used to reset filter*/
  5. input  mdata1;  /*ip data to be filtered*/
  6. output [15:0] DATA;   /*filtered op*/

  7. integer location;
  8. integer info_file;  

  9. reg [23:0]    ip_data1;
  10. reg [23:0]    acc1;  
  11. reg [23:0]    acc2;
  12. reg [23:0]    acc3;
  13. reg [23:0]    acc3_d1;  
  14. reg [23:0]    acc3_d2;  
  15. reg [23:0]    diff1;
  16. reg [23:0]    diff2;
  17. reg [23:0]    diff3;
  18. reg [23:0]    diff1_d;  
  19. reg [23:0]    diff2_d;  
  20. reg [15:0]    DATA;
  21. reg [7:0]    word_count;
  22. reg word_clk;   
  23. reg init;

  24. /*Perform the Sinc ACTION*/
  25. always @ (mdata1)
  26. if(mdata1==0)  
  27.      ip_data1 <= 0;   /* change from a 0 to a -1 for 2's comp */   
  28. else
  29.      ip_data1 <= 1;
  30. /*ACCUMULATOR (INTEGRATOR)
  31. Perform the accumulation (IIR) at the speed
  32. of the modulator.
  33. Z = one sample delay  
  34. MCLKOUT = modulators conversion bit rate
  35. */
  36. always @ (negedge mclk1 or posedge reset)
  37. if (reset)  
  38.      begin
  39.       /*initialize acc registers on reset*/
  40.      acc1 <= 0;
  41.      acc2 <= 0;
  42.      acc3 <= 0;
  43.      end  
  44. else
  45.      begin
  46.       /*perform accumulation process*/
  47.      acc1 <= acc1 + ip_data1;
  48.      acc2 <= acc2 + acc1;
  49.      acc3 <= acc3 + acc2;  
  50.      end  
  51. /*DECIMATION STAGE (MCLKOUT/ WORD_CLK)  */
  52. always @ (posedge mclk1 or posedge reset)
  53. if (reset)
  54.          word_count <= 0;  
  55. else
  56.          word_count <= word_count + 1;

  57. always @ (word_count)
  58.          word_clk <= word_count[7];
  59. /*DIFFERENTIATOR ( including decimation stage)  
  60. Perform the differentiation stage (FIR) at a
  61. lower speed.
  62. Z = one sample delay
  63. WOR D_CLK = output word rate
  64. */
  65. always @ (posedge word_clk or posedge reset)
  66. if(reset)
  67.      begin
  68.      acc3_d2 <= 0;  
  69.      diff1_d <= 0;  
  70.      diff2_d <= 0;  
  71.      diff1 <= 0;
  72.      diff2 <= 0;
  73.      diff3 <= 0;
  74.      end  

  75. else
  76.      begin
  77.      diff1 <= acc3 - acc3_d2;
  78.      diff2 <= diff1 - diff1_d;  
  79.      diff3 <= diff2 - diff2_d;  
  80.      acc3_d2 <= acc3;
  81.      diff1_d <= diff1;
  82.      diff2_d <= diff2;
  83.      end  

  84. /* Clock the Sinc output into an output
  85. register

  86. WORD_CLK = output word rate
  87. */
  88. always @ (posedge word_clk)
  89. begin
  90.     DATA[15] <= diff3[23];
  91.     DATA[14] <= diff3[22];
  92.     DATA[13] <= diff3[21];
  93.     DATA[12] <= diff3[20];
  94.     DATA[11] <= diff3[19];
  95.     DATA[10] <= diff3[18];
  96.     DATA[9]  <= diff3[17];
  97.     DATA[8]  <= diff3[16];
  98.     DATA[7]  <= diff3[15];
  99.     DATA[6]  <= diff3[14];
  100.     DATA[5]  <= diff3[13];
  101.     DATA[4]  <= diff3[12];
  102.     DATA[3]  <= diff3[11];
  103.     DATA[2]  <= diff3[10];
  104.     DATA[1]  <= diff3[9];
  105.     DATA[0]  <= diff3[8];
  106. end  
  107. endmodule





复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2016-2-5 16:59:19 来自手机 | 显示全部楼层
学习了        

出5入42汤圆

发表于 2016-2-5 20:09:39 来自手机 | 显示全部楼层
我项目上用的16位AD7606,芯片自带64倍过采样。相当于硬件帮你做64次求平均。等开年了,再把楼主的方法加进去看看效果。

出0入0汤圆

发表于 2016-2-5 20:39:44 来自手机 | 显示全部楼层
可没有那么累加平均那么简单,这是个sinc3滤波器。

出0入0汤圆

发表于 2016-2-5 21:16:46 | 显示全部楼层
谢谢,可能用的到

出0入0汤圆

发表于 2016-3-7 18:24:41 | 显示全部楼层
这算法是个 sinc IIR滤波器 ,可不是什么累加求平均.

出0入0汤圆

发表于 2016-3-19 21:55:36 | 显示全部楼层
这个算法很经典,手册里还有图供理解,讲得很好,但是要理解需要一定数字滤波的基础。
这个是3阶的,改成其他阶数也好用。

出0入0汤圆

发表于 2016-4-8 10:40:07 | 显示全部楼层
学习了,谢谢

出0入0汤圆

发表于 2016-4-8 10:41:13 | 显示全部楼层
kevin_me 发表于 2016-2-5 20:09
我项目上用的16位AD7606,芯片自带64倍过采样。相当于硬件帮你做64次求平均。等开年了,再把楼主的方法加进 ...

如果用64倍过采样,那你AD7606的采样频率是多少,是不是只有200K/64?

出0入0汤圆

发表于 2018-9-14 21:07:12 来自手机 | 显示全部楼层
学习了,谢谢

出0入0汤圆

发表于 2019-12-2 15:38:22 | 显示全部楼层
这代码以前从网上复制,说是ADC大赛需要用的。结果是从这里来的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 21:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表