b****y 发帖数: 169 | 1 最近需要设计一个模拟底通滤波器。
要求无非是通带内波动小于XdB, 截止频率外的增益小于YdB
这些都好办
要命的是还有一条通带内群延时波动小于Nps
尝试了很多模型都无法同时满足两个条件。
即:群延时波动小的,如贝塞尔,带外衰减太慢
带外衰减快的,如且比雪夫,群延时波动太大
也试过把几种组合起来,都满足不了条件。
看起来只能手工调零极点。
Matlab里滤波器设计器都不能控制群延时波动。
网上找到一个工具开价数万刀。
不知有没有高手知道此类问题该如何下手?
有没有好书推荐?
谢谢! |
a****l 发帖数: 8211 | 2 你到底是做模拟的还是数字的??matlab好象只是设计数字滤波器吧?
【在 b****y 的大作中提到】 : 最近需要设计一个模拟底通滤波器。 : 要求无非是通带内波动小于XdB, 截止频率外的增益小于YdB : 这些都好办 : 要命的是还有一条通带内群延时波动小于Nps : 尝试了很多模型都无法同时满足两个条件。 : 即:群延时波动小的,如贝塞尔,带外衰减太慢 : 带外衰减快的,如且比雪夫,群延时波动太大 : 也试过把几种组合起来,都满足不了条件。 : 看起来只能手工调零极点。 : Matlab里滤波器设计器都不能控制群延时波动。
|
b****y 发帖数: 169 | 3 我需要模拟的。
Matlab确实没有什么好的模拟设计器。
只能设计简单基本的模拟滤波器。
数字滤波器设计的功能强大一些,但还是没有我要的功能。
如果有的话也是可以用来设计模拟滤波器的。
想象一下如何把单位圆看成直线? |
x****g 发帖数: 2000 | 4 楼主增加阶数不能解决问题?
模拟滤波器的approximation和synthesis几十年前就成型了吧,
在手册上都可以查到到吧 |
c*******h 发帖数: 4883 | 5 可以试试模拟的滤波器设计软件啊,不是更直接。
【在 b****y 的大作中提到】 : 我需要模拟的。 : Matlab确实没有什么好的模拟设计器。 : 只能设计简单基本的模拟滤波器。 : 数字滤波器设计的功能强大一些,但还是没有我要的功能。 : 如果有的话也是可以用来设计模拟滤波器的。 : 想象一下如何把单位圆看成直线?
|
b****y 发帖数: 169 | 6 阶数也不能太高啊。不然不好实现啊。
我希望能在10阶以内搞定。
我也觉得这样的问题应该早有非常成熟、系统的解决方法了。
不知有什么手册可以查的?
模拟的滤波器设计软件我也找了。
这个很强大
http://www.filter-solutions.com/
但是也不便宜。 |
x****g 发帖数: 2000 | 7 这种情况,
你不妨想一下系统是否真的需要这样好的preformance,
在多大程度上能降低这个要求。
单项指标上的微小变化,经常带来设计难度的成倍速增长,
跟系统工程师讨价还价是很有必要的
【在 b****y 的大作中提到】 : 阶数也不能太高啊。不然不好实现啊。 : 我希望能在10阶以内搞定。 : 我也觉得这样的问题应该早有非常成熟、系统的解决方法了。 : 不知有什么手册可以查的? : 模拟的滤波器设计软件我也找了。 : 这个很强大 : http://www.filter-solutions.com/ : 但是也不便宜。
|
b****y 发帖数: 169 | 8 谢谢各位的建议。
hehe,其实我就是系统工程师。
我当然不会提出这么变态的指标让人去设计。
这是人spec上给出的一个参考系统的指标。
我们只是想仿真一下看看跟我们自己的设计性能有什么区别。 |
b****y 发帖数: 169 | 9 谢谢各位的建议。
hehe,其实我就是系统工程师。
我当然不会提出这么变态的指标让人去设计。
这是人spec上给出的一个参考系统的指标。
我们只是想仿真一下看看跟我们自己的设计性能有什么区别。 |
g****t 发帖数: 31659 | 10 你先assume一个线性滤波器,
然后把你这些要求都带入进去。
最后弄出来一组关于滤波器系数的不等式或者方程。
然后search其解。找不出来解就加阶数。
【在 b****y 的大作中提到】 : 最近需要设计一个模拟底通滤波器。 : 要求无非是通带内波动小于XdB, 截止频率外的增益小于YdB : 这些都好办 : 要命的是还有一条通带内群延时波动小于Nps : 尝试了很多模型都无法同时满足两个条件。 : 即:群延时波动小的,如贝塞尔,带外衰减太慢 : 带外衰减快的,如且比雪夫,群延时波动太大 : 也试过把几种组合起来,都满足不了条件。 : 看起来只能手工调零极点。 : Matlab里滤波器设计器都不能控制群延时波动。
|
|
|
g****t 发帖数: 31659 | 11 exp(ix)把直线0 i+x映射成单位圆。
我需要模拟的。
Matlab确实没有什么好的模拟设计器。
只能设计简单基本的模拟滤波器。
数字滤波器设计的功能强大一些,但还是没有我要的功能。
如果有的话也是可以用来设计模拟滤波器的。
想象一下如何把单位圆看成直线?
【在 b****y 的大作中提到】 : 我需要模拟的。 : Matlab确实没有什么好的模拟设计器。 : 只能设计简单基本的模拟滤波器。 : 数字滤波器设计的功能强大一些,但还是没有我要的功能。 : 如果有的话也是可以用来设计模拟滤波器的。 : 想象一下如何把单位圆看成直线?
|
b****y 发帖数: 169 | 12 brute force?
很强,但是这方程可不太好列阿。
比方说最简单的:
0-1MHz内的幅频响应>-1dB且<0dB如何列?就假设是2阶吧。
0.8913
(还没考虑零点)
列出来如何解?
Monte Carlo?
三个不等式,几十个变量。。。
太难。 |
g****t 发帖数: 31659 | 13 滤波器设计和控制器设计在数学方法上没区别.
简单的性能要求一般可以归结为矩阵不等式,
矩阵不等式matlab有现成的包.
但是你有延时之类的要求.所以不那么简单.
假定个滤波器的传递函数 G(s),然后假定各系数,
你的performance 要求,应该也可以转化成比较复杂的不等式或者优化问题.
然后用非线性优化或者非线性不等式求解的数值方法做作看.
缺点是这么弄出来的东西不鲁棒,产品中不一定能用.
因为产品中对G(s)的实现都是有误差的.
器件稍有不准,滤波器的设计指标可能偏离很多.
你前面讲的chebyshev之类的滤波器没有反馈,
效果可能会更差.
所以我的两个建议
a.用反馈滤波器
b.由优化方法找出系数和对应的裕度
假定你用2阶G(s)滤波器,
G(s)=(1+a s+ b s^2)/(c+ d s +e s^2),未知数是a,b,c,d,e.
要不你把对a,b,c,d,e的不等式/方程写出来,我给你解解看.
起码牛顿法可以试试.
brute force?
很强,但是这方程可不太好列阿。
比方说最简单的:
0-1MHz内的幅频响应>-1dB且<0dB如何列?就假设是2阶吧。
【在 b****y 的大作中提到】 : brute force? : 很强,但是这方程可不太好列阿。 : 比方说最简单的: : 0-1MHz内的幅频响应>-1dB且<0dB如何列?就假设是2阶吧。 : 0.8913: (还没考虑零点) : 列出来如何解? : Monte Carlo? : 三个不等式,几十个变量。。。 : 太难。
|
b****y 发帖数: 169 | 14 2阶是举个例子。只很少系数。
10阶系数就多了。
我们还是先用2阶说事吧。
二阶低通的一般形式是:
H(s)=(Wn^2+2 a Wn s)/((Wn^2+2 b Wn s + s^2)
就3个系数吧:Wn, a, b
假设条件是这样吧:
1、0到1Hz之间增益波动在1dB以内
2、2Hz以外幅增益小于-30dB
3、0到1Hz之间群延时波动在100微秒以内
不等式1:
max(|H(jw)|)/min(|H(jw)|)<1.122 范围:0
不等式2:
max(|H(jw)|)<0.0316 范围:4pi
不等式3:
定义相位: p(w)=Arg[H(jw)]
定义群延时:gdl(w)=dp/dw
max(gdl(w))-min(gdl(w)<1e-4 范围:0
不知道好不好解。
不知道解法推广到10阶难度如何。
谢谢了! |
g****t 发帖数: 31659 | 15 method 1:
令你设计的filter振幅和复角为a(w),b(w)。系数未知但是假设出来了。
常见的方法是给出一个desired 分段频率响应bode 图c(w),d(w)。
令S1(w)=a(w)-c(w),S2(w)=b(w)-d(w),然后求系数让
S1^2,S2^2在感兴趣频率段的积分最小.
因为积分显然是关于系数的常用函数,
然后求最小点用常用优化方法就可以了.
这种方法也许可以手算。
method 2:
如果要做你下面要求的min max估计,
则需要使用前面我提到的矩阵不等式之类的鲁棒控制工具。
你查查看下面类型的文章:
design of arbitrary FIR digitial filters with
group delay constraint
yongzhi liu and zhiping lin
这个文章最后的例子和你的要求几乎一样。
2阶是举个例子。只很少系数。
10阶系数就多了。
我们还是先用2阶说事吧。
二阶低通的一般形式是:
H(s)=(Wn^2+2 a Wn s)/((Wn^2+2 b Wn s + s^2)
就3个系数吧:Wn, a,
【在 b****y 的大作中提到】 : 2阶是举个例子。只很少系数。 : 10阶系数就多了。 : 我们还是先用2阶说事吧。 : 二阶低通的一般形式是: : H(s)=(Wn^2+2 a Wn s)/((Wn^2+2 b Wn s + s^2) : 就3个系数吧:Wn, a, b : 假设条件是这样吧: : 1、0到1Hz之间增益波动在1dB以内 : 2、2Hz以外幅增益小于-30dB : 3、0到1Hz之间群延时波动在100微秒以内
|
b****y 发帖数: 169 | 16 多谢。我会看看矩阵不等式的。
不过我刚在Matlab里发现一个函数IIRGRPDELAY
可以生成任意群延时的全通函数。
所以一个设计方法就是先找一个滤波器满足幅频响应的条件,
再用IIRGRPDELAY设计一个全通函数去补偿群延时。
http://www.mathworks.com/products/filterdesign/demos.html?file=/products/demos/shipping/filterdesign/iirgrpdelaydemo.html
也就是说幅度和群延时是分别优化的。
尽管不是全局最优,但是设计过程很简单。
只是阶数比最优的要高一些。 |
c**********d 发帖数: 39 | 17 可以查一查Analog Filter design这本书,M. E. Van Valkenburg 写的 |