打印

窗口法求FIR滤波器系数

[复制链接]
1371|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
叶春勇|  楼主 | 2020-5-28 10:55 | 只看该作者
python求fir滤波器,矩形窗
import math

def sinc(x):
    if x==0.0:
        return 1.0
    else:
        return math.sin(math.pi*x)/math.pi/x

def impulse(x):
    if x==0.0:
        return 1.0
    else :
        return 0



N=9
#线性相位条件
k=(N-1)/2
#测试低通高通
fc=0.1

#测试带通带阻
f1=0.1
f2=0.2

#低通
for i in range(0,N,1):
    print(2*fc*sinc(2*fc*(i-k)))

print('------------------------')

#高通
for i in range(0,N,1):
    print(impulse(i-k)-2*fc*sinc(2*fc*(i-k)))

print('------------------------')

#带通
for i in range(0,N,1):
    print(2*f2*sinc(2*f2*(i-k))-2*f1*sinc(2*f1*(i-k)))

print('------------------------')

#带阻
for i in range(0,N,1):
    print(sinc(i-k)-2*f2*sinc(2*f2*(i-k))+2*f1*sinc(2*f1*(i-k)))

print('------------------------')

使用特权

评论回复
板凳
叶春勇|  楼主 | 2020-5-28 10:57 | 只看该作者
求得的系数
-------低通---------------
0.046774464189431965
0.10091023048542092
0.1513653457281314
0.1870978567577278
0.2
0.1870978567577278
0.1513653457281314
0.10091023048542092
0.046774464189431965
-------高通---------------
-0.046774464189431965
-0.10091023048542092
-0.1513653457281314
-0.1870978567577278
0.8
-0.1870978567577278
-0.1513653457281314
-0.10091023048542092
-0.046774464189431965
-------带通---------------
-0.12245713705349767
-0.16327618273799688
-0.05781641734926747
0.115632834698535
0.2
0.115632834698535
-0.05781641734926747
-0.16327618273799688
-0.12245713705349767
-------带阻---------------
0.12245713705349762
0.1632761827379969
0.05781641734926743
-0.11563283469853494
0.8
-0.11563283469853494
0.05781641734926743
0.1632761827379969
0.12245713705349762

使用特权

评论回复
地板
叶春勇|  楼主 | 2020-5-28 11:02 | 只看该作者
用matlab算出来的系数:
>> LP
LP =
  Columns 1 through 6
   0.046774464189432   0.100910230485421   0.151365345728131   0.187097856757728   0.200000000000000   0.187097856757728
  Columns 7 through 9
   0.151365345728131   0.100910230485421   0.046774464189432
>> HP
HP =
  Columns 1 through 6
  -0.046774464189432  -0.100910230485421  -0.151365345728131  -0.187097856757728   0.800000000000000  -0.187097856757728
  Columns 7 through 9
  -0.151365345728131  -0.100910230485421  -0.046774464189432
>> BP
BP =
  Columns 1 through 6
  -0.122457137053498  -0.163276182737997  -0.057816417349267   0.115632834698535   0.200000000000000   0.115632834698535
  Columns 7 through 9
  -0.057816417349267  -0.163276182737997  -0.122457137053498
>> BS
BS =
  Columns 1 through 6
   0.122457137053498   0.163276182737997   0.057816417349267  -0.115632834698535   0.800000000000000  -0.115632834698535
  Columns 7 through 9
   0.057816417349267   0.163276182737997   0.122457137053498[code][/code]

使用特权

评论回复
5
叶春勇|  楼主 | 2020-5-28 11:03 | 只看该作者
本帖最后由 叶春勇 于 2020-5-28 11:06 编辑

MATLAB滤波器设计工具-fdatool
低通

使用特权

评论回复
评分
参与人数 1威望 +10 收起 理由
congfenglong + 10 很给力!
6
叶春勇|  楼主 | 2020-5-28 11:03 | 只看该作者
本帖最后由 叶春勇 于 2020-5-28 11:06 编辑

高通:

使用特权

评论回复
7
叶春勇|  楼主 | 2020-5-28 11:04 | 只看该作者
带通:

使用特权

评论回复
8
叶春勇|  楼主 | 2020-5-28 11:04 | 只看该作者
带阻:

使用特权

评论回复
9
叶春勇|  楼主 | 2020-5-28 11:14 | 只看该作者
总结:
在学习过程中,原来以为matlab的sinc函数就是sin(x)/x,实际上是归一化的sin(pi*x)/(pi*x)。发现系数对不上。
窗口法设计规则滤波器非常好用。
如果设计,多阻带,多带通,或者带通和高通混合的滤波,需要是用频率采样法设计一个超现实的滤波器。
作为fir滤波器系数的手工计算,目前目标,窗口法和频率采样法。至于其他方法就不在投入精力。

使用特权

评论回复
10
该用户名已注册| | 2020-5-29 15:17 | 只看该作者
总结不错  谢谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

151

主题

4809

帖子

50

粉丝