【问题标题】:Why am I getting a ValueError in the provided?为什么我在提供的内容中收到 ValueError?
【发布时间】:2020-10-20 15:01:52
【问题描述】:

我正在尝试创建一个 Wiener 过滤器并检查从 2 到 20 的过滤器值。我根据需要得到 18 个图表,但即使我得到输出,我仍然会收到错误消息。我知道我的代码不是最干净的,几个月前我才开始使用 Python 作为 Lockdown 项目。任何和所有的帮助将不胜感激。代码是根据问题中提供的公式编写的。

import numpy as np
import scipy as sp
from scipy import linalg
from scipy import signal
import matplotlib.pyplot as plt
import scipy.io as sio
N = 109068
data = sio.loadmat('audiodata.mat')
y = data['audio']
y = np.reshape(y,(109068,1))
v2 = data['noise']
v2 = np.reshape(v2,(109068,1))

for t in range(1,18):
    for n in range (t+1,20):
        rv2 = np.zeros(t+1)
        ryv2 = np.zeros(t+1)
        rv2[t] += 1/(n-t)*v2[n]*v2[n-t]
        ryv2[t] += 1/(n-t)*y[n]*v2[n-t]
        Rv2 = sp.linalg.toeplitz(rv2)
        Rv_2 = sp.linalg.inv(Rv2)
        w_opt = np.matmul(Rv_2,ryv2)
        v1 = sp.signal.lfilter(w_opt,1,v2)
        y_filt = y-v1
        ts = np.arange(0.,  y.shape[0]/22050, 1/22050)
        fig, (ax1, ax2, ax3) = plt.subplots(3,sharex=True,figsize=(15,10))
        ax1.plot(ts, y,'b')
        ax1.plot(ts, y_filt,'g')
        ax2.plot(ts, v1)
        ax2.plot(ts, v2)
        ax3.plot(ts, y_filt)
        plt.xlabel('Time[s]')
        plt.ylabel('PCM')
        plt.show

得到的错误是这样的:

---------------------------------------------------------------------------
LinAlgError                               Traceback (most recent call last)
<ipython-input-244-7a0d629580e8> in <module>
     19         ryv2[t] += 1/(n-t)*y[n]*v2[n-t]
     20         Rv2 = sp.linalg.toeplitz(rv2)
---> 21         Rv_2 = sp.linalg.inv(Rv2)
     22         w_opt = np.matmul(Rv_2,ryv2)
     23         v1 = sp.signal.lfilter(w_opt,1,v2)

~\Anaconda3\lib\site-packages\scipy\linalg\basic.py in inv(a, overwrite_a, check_finite)
    972         inv_a, info = getri(lu, piv, lwork=lwork, overwrite_lu=1)
    973     if info > 0:
--> 974         raise LinAlgError("singular matrix")
    975     if info < 0:
    976         raise ValueError('illegal value in %d-th argument of internal '

LinAlgError: singular matrix

有什么想法吗?

【问题讨论】:

    标签: python-3.x valueerror wiener-filter


    【解决方案1】:

    我弄错了。我只需要在 t 之上的另一个 for 循环来正确地迭代 t 本身。

    【讨论】:

      猜你喜欢
      • 2020-04-08
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多