我正在尝试翻译命令
[h(:,m), w] = freqz(fliplr(b), fliplr(a),2048); % fliplr --> freqz works on powers of z^-1
从 Octave 到 Python(w/ scipy (freqz) 和 numpy (fliplr)),但是,按原样编写时会导致错误:
File "<__array_function__ internals>", line 180, in fliplr
File "/home/xxxx/yyyy/venv/lib/python3.8/site-packages/numpy/lib/twodim_base.py", line 98, in fliplr
raise ValueError("Input must be >= 2-d.")
ValueError: Input must be >= 2-d.
与 Octave 的Fliplr函数相比,Fliplr 函数的工作方式似乎有所不同。
这是我的b和a数组:
b= [ 1.01063287e+00 -1.46490341e+01 9.94030209e+01 -4.19168764e+02
1.22949513e+03 -2.66000588e+03 4.39112431e+03 -5.64225597e+03
5.70320516e+03 -4.55022454e+03 2.85602975e+03 -1.39550096e+03
5.20372994e+02 -1.43160328e+02 2.74037105e+01 -3.26098385e+00
1.81735269e-01]
a= [ 1.00000000e+00 -1.45159238e+01 9.86464912e+01 -4.16614074e+02
1.22391361e+03 -2.65216678e+03 4.38533779e+03 -5.64421414e+03
5.71487734e+03 -4.56742504e+03 2.87187255e+03 -1.40575405e+03
5.25150201e+02 -1.44741759e+02 2.77584882e+01 -3.30950845e+00
1.84797453e-01]
我还尝试过使用或不翻转切片:
[h[:, m], w] = freqz(np.flip(b[0:N]), np.flip(a[0:N]), 2048)
两者中的哪一个都通过了编译,但是情节看起来很奇怪。
关于翻译有什么建议吗?
您的数组似乎是 1 级(即一维)。python 错误告诉你你正在尝试沿第二维翻转,但没有。重塑数组,使其成为二维数组。大概您希望值沿列展开,因此在重塑时行的大小将为 1。(因此,考虑到 reshape 的工作方式,您可以将 -1 传递给要自动计算的维度,即 numpy.reshape( b, (1, -1) )