小编kbr*_*oos的帖子

Matlab过滤器与Python lfilter不兼容

美好的一天,

我一直在摆弄将matlab代码移植到python中,我遇到了这个奇怪的问题.我搜索了一下,但没有发现任何信息表明我做错了什么.

该问题的核心是Matlab的过滤器(b,a,数据)(内置于matlab中)与Python的scipy.signal.lfilter相比产生了不同的输出.

这是在任意粉红噪声信号上执行的问题

我有第三方给我的过滤系数,它们如下:

a0 = 1
a1 = -1.69065929318241
a2 = 0.73248077421585
b0 = 1.53512485958697
b1 = -2.69169618940638
b2 = 1.19839281085285
Run Code Online (Sandbox Code Playgroud)

在matlab中,我按如下方式初始化分子/分母:

a = [a0 a1 a2];
b = [b0 b1 b2];
Run Code Online (Sandbox Code Playgroud)

在python我这样做:

a = np.array([a0, a1, a2])
b = np.array([b0, b1, b2])
Run Code Online (Sandbox Code Playgroud)

在读取matlab/python中的信号后,我打印出前15个样本,以确保你们知道输入是相同的

Matlab的:

   0.061920166015625
  -0.050170898437500
  -0.117370605468750
  -0.065979003906250
  -0.013854980468750
  -0.042663574218750
   0.107452392578125
  -0.044006347656250
   0.115112304687500
  -0.043457031250000
  -0.028778076171875
  -0.128234863281250
   0.045227050781250
  -0.091796875000000
   0.315063476562500
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

[[ 0.06192017]
 [-0.0501709 ]
 [-0.11737061]
 [-0.065979  ]
 [-0.01385498]
 [-0.04266357]
 [ 0.10745239]
 [-0.04400635]
 [ 0.1151123 ]
 [-0.04345703]
 [-0.02877808] …
Run Code Online (Sandbox Code Playgroud)

python matlab numpy filter scipy

6
推荐指数
1
解决办法
2726
查看次数

Python嵌套用于循环行为

我遇到了嵌套for循环这种奇怪的行为,我无法解释这个问题.这是一个特定于python的东西还是我只是在监督某些事情?

这是我正在运行的代码:

for i in range(16):
    if i == 0:
        for j in range(8):
            print 'i is (if) ' + str(i)
            i = i + 1
    else:
        print 'i is (else)' + str(i)
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

i is (if) 0
i is (if) 1
i is (if) 2
i is (if) 3
i is (if) 4
i is (if) 5
i is (if) 6
i is (if) 7
i is (else)1
i is (else)2
i is (else)3
i is (else)4
i is …
Run Code Online (Sandbox Code Playgroud)

python for-loop nested-loops

4
推荐指数
1
解决办法
543
查看次数

标签 统计

python ×2

filter ×1

for-loop ×1

matlab ×1

nested-loops ×1

numpy ×1

scipy ×1