12下一页
返回列表 发新帖我要提问本帖赏金: 10.00元(功能说明)

一个可变RC滤波器分析

[复制链接]
 楼主| 叶春勇 发表于 2021-1-29 15:17 | 显示全部楼层 |阅读模式
<
原理图如下:

经matlab求出传递函数:

本帖子中包含更多资源

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

×

打赏榜单

21小跑堂 打赏了 10.00 元 2021-02-01
理由:恭喜通过原创文章审核!请多多加油哦!

 楼主| 叶春勇 发表于 2021-1-29 15:46 | 显示全部楼层
分析1:

本帖子中包含更多资源

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

×
 楼主| 叶春勇 发表于 2021-1-29 15:50 | 显示全部楼层
本帖最后由 叶春勇 于 2021-1-29 16:22 编辑

分析2:

本帖子中包含更多资源

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

×
 楼主| 叶春勇 发表于 2021-1-29 15:54 | 显示全部楼层
分析3:

本帖子中包含更多资源

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

×

评分

参与人数 1威望 +6 收起 理由
king5555 + 6 奋斗力十足。

查看全部评分

 楼主| 叶春勇 发表于 2021-1-29 16:49 | 显示全部楼层
limit(hs,s,0)
ans =r3/(r1 + r3)
limit(hs,s,inf)
ans =0
limit(hs,r1,0)
ans =1
limit(hs,r1,inf)
ans =(c1*r3*s)/(c1*c2*r2*r3*s^2 + (c1*r2 + c1*r3 + c2*r3)*s + 1)
limit(hs,r2,0)
ans =(r3 + c1*r1*r3*s)/(r1 + r3 + s*(c1*r1*r3 + c2*r1*r3))
limit(hs,r2,0)
ans =(c1*r3*s)/(c1*c2*r1*r3*s^2 + (c1*r1 + c1*r3)*s)
matlab求极限,备存
 楼主| 叶春勇 发表于 2021-1-30 08:32 | 显示全部楼层
上述数学分析的电路原理:
当输入频率很低和很高时:

本帖子中包含更多资源

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

×
 楼主| 叶春勇 发表于 2021-1-30 08:36 | 显示全部楼层
当R1过大和过小时:

本帖子中包含更多资源

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

×
 楼主| 叶春勇 发表于 2021-1-30 08:45 | 显示全部楼层
当R2过大和过小时,电路解释:


经分析,这个从king5555的三段RC均衡退化成的两段RC均衡器,还是有一些缺陷。
例如R1过小时,没有限流措施,在计算机编程时,R1的下限适当提高。
没想到几个电阻电容搞死人,这只是个二阶电路。

本帖子中包含更多资源

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

×
 楼主| 叶春勇 发表于 2021-1-30 08:58 | 显示全部楼层
当R1变化时,RC网络的定性分析:

本帖子中包含更多资源

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

×
 楼主| 叶春勇 发表于 2021-1-30 09:06 | 显示全部楼层
当R2变化时,RC网络的定性分析:

本帖子中包含更多资源

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

×
 楼主| 叶春勇 发表于 2021-1-30 11:24 | 显示全部楼层
#申请原创# 我自己写了个程序,用近似公式计算与原始传递函数比较
其中get_hs为原函数,get_hs1为r2较小时的函数,get_hs2为让较大时的函数。
python源代码:
  1. import math

  2. def pz(r1,r2):
  3.     return r1*r2/(r1+r2)

  4. def sz(r1,r2):
  5.     return r1+r2

  6. def get_hs(r1,r2,r3,c1,c2,f):
  7.     A=1/(pz(r1,r2)*c2)
  8.     Z=1/(sz(r1,r2)*c1)
  9.     SS=(1j*2*math.pi*f)*(1j*2*math.pi*f)
  10.     B=(1/r1+1/r2+1/r3)/c2+1/(r2*c1)
  11.     BB=1j*2*math.pi*f*B
  12.     C=1/(pz(r1,r3)*r2*c1*c2)
  13.     return abs(A*(1j*2*math.pi*f+Z)/(SS+BB+C))
  14.    

  15. def get_hs1(r1,r2,r3,c1,c2,f):
  16.     AL=c1/(c1+c2)
  17.     ZL=1/(r1*c1)
  18.     PL=1/(r1*(c1+c2))
  19.     return abs(AL*(1j*2*math.pi*f+ZL)/(1j*2*math.pi*f+PL))

  20. def get_hs2(r1,r2,r3,c1,c2,f):
  21.     rp=r1*r3/(r1+r3)
  22.     AH=1/(r1*c2)
  23.     PH=1/(rp*c2)
  24.     return abs(AH/(1j*2*math.pi*f+PH))


  25. def get_db(a):
  26.     return 20*math.log10(a)
  27. H1=get_db(get_hs1(50e3,1,47e3,10e-9,6.8e-9,1000))
  28. H2=get_db(get_hs2(50e3,500e3,47e3,10e-9,6.8e-9,1000))
  29. H3=get_db(get_hs(50e3,1,47e3,10e-9,6.8e-9,1000))
  30. H4=get_db(get_hs(50e3,500e3,47e3,10e-9,6.8e-9,1000))
  31. print("近似(R2=1,R2=500k)",H1,H2)
  32. print("精确(R2=1,R2=500k)",H3,H4)
  33. print("误差(R2=1,R2=500k)",abs(H1-H3),abs(H2-H4))
程序的运行结果:
当R2为1欧变成500k欧时,误差为0.46db,0.617db,误差可以接受
  1. 近似(R2=1,R2=500k) -4.240219615562451 -9.45621125978194
  2. 精确(R2=1,R2=500k) -4.704943669547606 -8.838560790266058
  3. 误差(R2=1,R2=500k) 0.4647240539851545 0.6176504695158815

其中R1的情况,不在讨论。

 楼主| 叶春勇 发表于 2021-1-30 11:31 | 显示全部楼层
这是计算机仿真得到结果,很接近

本帖子中包含更多资源

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

×
 楼主| 叶春勇 发表于 2021-1-30 11:40 | 显示全部楼层
 楼主| 叶春勇 发表于 2021-2-1 16:20 | 显示全部楼层
今天研究3段均衡器,如原理图如下:

本帖子中包含更多资源

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

×
 楼主| 叶春勇 发表于 2021-2-1 16:23 | 显示全部楼层
失败经历1:
用matlab求传递函数,代数求解失败,经检查程序,确认程序没问题,缩减4个变量,约半个小时给出传递函数。
有没有电脑强力的朋友帮忙运行一下
matlab程序如下:
  1. clear all;
  2. clc;

  3. syms v1 v2 v3 v4 v5 v6 vo vi C1 C2 C3 C4 R1 R2 R3 R4 RL VR0 a1 a2 a3 s

  4. VR11=a1*VR0
  5. VR12=(1-a1)*VR0
  6. VR21=a2*VR0
  7. VR22=(1-a2)*VR0
  8. VR31=a3*VR0
  9. VR32=(1-a3)*VR0

  10. ZC1=1/s/C1
  11. ZC2=1/s/C2
  12. ZC3=1/s/C3
  13. ZC4=1/s/C4

  14. i01=(v1-v3)/VR11
  15. i02=(v1-v4)/VR21
  16. i03=(v1-v5)/VR31
  17. i04=(v3-v2)/VR12
  18. i05=(v4-v2)/VR22
  19. i06=(v5-v2)/VR32
  20. i07=(v3-v6)/R1
  21. i08=(v4-v6)/ZC1
  22. i09=(v5-vo)/ZC3
  23. i10=(v6-vo)/R2
  24. i11=v6/ZC2
  25. i12=vo/ZC4
  26. i13=vo/RL
  27. i14=(vi-v1)/R3
  28. i15=v2/R4

  29. eq1=i14-(i01+i02+i03)
  30. eq2=i15-(i04+i05+i06)
  31. eq3=i01-(i04+i07)
  32. eq4=i02-(i05+i08)
  33. eq5=i03-(i06+i09)
  34. eq6=(i07+i08)-(i10+i11)
  35. eq7=(i10+i09)-(i11+i13)

  36. S=solve(eq1,eq2,eq3,eq4,eq5,eq6,eq7,v1,v2,v3,v4,v5,v6,vo)

 楼主| 叶春勇 发表于 2021-2-1 16:28 | 显示全部楼层
本帖最后由 叶春勇 于 2021-2-7 01:32 编辑

失败经历2:
由于不死心,转向开源代数软件maxima,下载最新版,折腾一段时间
这个更惨,内存爆满

程序文件如下:
  1. G1:1/R1;
  2. G2:1/R2;
  3. G3:1/R3;
  4. G4:1/R4;
  5. GL:1/RL;

  6. VG11:1/(a1*VR0);
  7. VG12:1/((1-a1)*VR0);
  8. VG21:1/(a2*VR0);
  9. VG22:1/((1-a2)*VR0);
  10. VG31:1/(a3*VR0);
  11. VG32:1/((1-a3)*VR0);

  12. YC1:s*C1;
  13. YC2:s*C2;
  14. YC3:s*C3;
  15. YC4:s*C4;

  16. G11:G3+VG11+VG21+VG31;
  17. G12:0;
  18. G13:-VG11;
  19. G14:-VG21;
  20. G15:-VG31;
  21. G16:0;
  22. G17:0;

  23. G21:G12;
  24. G22:G4+VG12+VG22+VG32;
  25. G23:-VG12;
  26. G24:-VG22;
  27. G25:-VG32;
  28. G26:0;
  29. G27:0;

  30. G31:G13;
  31. G32:G23;
  32. G33:VG11+VG12+G1;
  33. G34:0;
  34. G35:0;
  35. G36:-G1;
  36. G37:0;

  37. G41:G14;
  38. G42:G24;
  39. G43:G34;
  40. G44:VG21+VG22+YC1;
  41. G45:0;
  42. G46:-YC1;
  43. G47:0;

  44. G51:G15;
  45. G52:G25;
  46. G53:G35;
  47. G54:G45;
  48. G55:VG31+VG32+YC3;
  49. G56:0;
  50. G57:-YC3;

  51. G61:G16;
  52. G62:G26;
  53. G63:G36;
  54. G64:G46;
  55. G65:G56;
  56. G66:G1+G2+YC1+YC2;
  57. G67:-G2;

  58. G71:G17;
  59. G72:G27;
  60. G73:G37;
  61. G74:G47;
  62. G75:G57;
  63. G76:G67;
  64. G77:G2+GL+YC3+YC4;

  65. Y:matrix(        [G11,G12,G13,G14,G15,G16,G17],
  66.                         [G21,G22,G23,G24,G25,G26,G27],
  67.                         [G31,G32,G33,G34,G35,G36,G37],
  68.                         [G41,G42,G43,G44,G45,G46,G47],
  69.                         [G51,G52,G53,G54,G55,G56,G57],
  70.                         [G61,G62,G63,G64,G65,G66,G67],
  71.                         [G71,G72,G73,G74,G75,G76,G77]        );
  72. I:matrix([vi/R3],[0],[0],[0],[0],[0],[0]);



蛋疼呀。

本帖子中包含更多资源

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

×
 楼主| 叶春勇 发表于 2021-2-1 16:36 | 显示全部楼层
实在没招数,翻了翻HWM的空间,找到双T陷波器的方法,如下图:

决定采用节点电压法,不得不硬着头皮,复习了下。7x7的矩阵

本帖子中包含更多资源

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

×
 楼主| 叶春勇 发表于 2021-2-1 16:40 | 显示全部楼层
1楼图的节点电流法矩阵更恐怖
第一行:

第二行:

第三行:

第四行:

第五行:

第六行:

第七行:

本帖子中包含更多资源

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

×
 楼主| 叶春勇 发表于 2021-2-1 16:43 | 显示全部楼层
编写了python程序,求幅频响应,源代码如下:
  1. import math
  2. import numpy as np

  3. def get_output(a1,a2,a3,VR0,R1,R2,R3,R4,RL,C1,C2,C3,C4,f):
  4.     S=1j*2*math.pi*f
  5.     G1=1/R1
  6.     G2=1/R2
  7.     G3=1/R3
  8.     G4=1/R4
  9.     GL=1/RL
  10.     VG11=1/(a1*VR0)
  11.     VG12=1/((1-a1)*VR0)
  12.     VG21=1/(a2*VR0)
  13.     VG22=1/((1-a2)*VR0)
  14.     VG31=1/(a3*VR0)
  15.     VG32=1/((1-a3)*VR0)
  16.     YC1=S*C1
  17.     YC2=S*C2
  18.     YC3=S*C3
  19.     YC4=S*C4

  20.     G11=G3+VG11+VG21+VG31
  21.     G12=0
  22.     G13=-VG11
  23.     G14=-VG21
  24.     G15=-VG31
  25.     G16=0
  26.     G17=0

  27.     G21=G12
  28.     G22=G4+VG12+VG22+VG32
  29.     G23=-VG21
  30.     G24=-VG22
  31.     G25=-VG32
  32.     G26=0
  33.     G27=0

  34.     G31=G13
  35.     G32=G23
  36.     G33=VG11+VG12+G1
  37.     G34=0
  38.     G35=0
  39.     G36=-G1
  40.     G37=0

  41.     G41=G14
  42.     G42=G24
  43.     G43=G34
  44.     G44=VG21+VG22+YC1
  45.     G45=0
  46.     G46=-YC1
  47.     G47=0

  48.     G51=G15
  49.     G52=G25
  50.     G53=G35
  51.     G54=G45
  52.     G55=VG31+VG32+YC3
  53.     G56=0
  54.     G57=-YC3

  55.     G61=G16
  56.     G62=G26
  57.     G63=G36
  58.     G64=G46
  59.     G65=G56
  60.     G66=G1+G2+YC1+YC2
  61.     G67=-G2

  62.     G71=G17
  63.     G72=G27
  64.     G73=G37
  65.     G74=G47
  66.     G75=G57
  67.     G76=G67
  68.     G77=G2+GL+YC3+YC4
  69.         
  70.     Y=np.matrix([[G11,G12,G13,G14,G15,G16,G17],
  71.                [G21,G22,G23,G24,G25,G26,G27],
  72.                [G31,G32,G33,G34,G35,G36,G37],
  73.                [G41,G42,G43,G44,G45,G46,G47],
  74.                [G51,G52,G53,G54,G55,G56,G57],
  75.                [G61,G62,G63,G64,G65,G66,G67],
  76.                [G71,G72,G73,G74,G75,G76,G77]])
  77.    
  78.     I=np.matrix([[1/R3],
  79.                  [0],
  80.                  [0],
  81.                  [0],
  82.                  [0],
  83.                  [0],
  84.                  [0]])

  85.     out=Y.I*I   
  86.     return out

  87. def get_db(x):
  88.     return 20*math.log10(x)

  89. V1=get_output(0.15,0.15,0.15,50e3,39e3,39e3,1.5e3,220,39e3,10e-9,6.8e-9,1e-9,1.5e-9,100)
  90. V2=get_output(0.15,0.15,0.15,50e3,39e3,39e3,1.5e3,220,39e3,10e-9,6.8e-9,1e-9,1.5e-9,100)
  91. print(abs(V1))
  92. print(abs(V2))

 楼主| 叶春勇 发表于 2021-2-1 16:51 | 显示全部楼层
经确认,传递函数是非常长的。
计算思路,由代数分析转向数值分析。代数分析,可以找出一点规律。
由于是数值分析,计算思路,变成了计算机不断从给定的输入,不断的计算出输出响应,然后通过一定的约束条件,计算机找出符合要求的RC组合。上楼贴出的函数就是这个作用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

151

主题

4810

帖子

50

粉丝
快速回复 在线客服 返回列表 返回顶部

151

主题

4810

帖子

50

粉丝
快速回复 在线客服 返回列表 返回顶部