无法使lFilter工作(rpi2b)

2024-09-28 21:33:40 发布

您现在位置:Python中文网/ 问答频道 /正文

一些信息:我正在使用一个带有cirrus逻辑声卡的rpi2b,并且已经完成了内核的更改以使声卡正常工作,我可以毫无问题地输出,我可以从line-in录制而没有问题(我使用的是pyAudio)。在

现在我只想过滤信号,在scipy库中找到了很多函数。。。在

首先要提到的是我只能使用2个声道(立体声)输入声卡似乎不允许1个声道,而且我也没有源来流单声道(iPhone,简单的USB播放器,每个人都只有立体声)。。。。在

过滤器线路(规格)只是一个例子,我认为它将是另一个过滤器,如果它工作:D

先解释一下代码。当使用立体声输入时,采样看起来是交错的,所以你在一个通道上得到另一个通道上的一个样本。。。我觉得这条线很有用:Convert multi-channel PyAudio into NumPy array

这就是为什么我还试图将我的流解码成一个数组,过滤,然后再编码成一个流输出。如果我忽略了交错的事实,我会听到奇怪的噪音,这就是为什么我认为我应该处理它:)

现在是我失败的地方:lFilter不想工作!如果我只使用未处理的输入_数据,则表示轴超出范围(我尝试了-1,0,1,2)不知道:/当使用我的整形等数据时,我得到:

return sigtools._linear_filter(b, a, x, axis, zi)
ValueError: object of too small depth for desired array

有人能解释一下为什么会这样吗?:D从未使用过信号这就是为什么我没有经验,但我不明白为什么未处理的数据有轴问题,即使它不会麻烦,因为我需要像链接线程中那样的重塑数据。。。在

^{pr2}$

我跳过了流开放部分和解码和编码,因为最后一个现在是完全一样的线程和第一个工作,这就是为什么我只是张贴这些部分。如果需要,我也可以提供其他的。在

非常感谢任何帮助!在

  • 三金3K

这是一个数据看起来是什么样的一个例子,一开始它是一个1d的np数组,而在整形之后,它是2d的,因为立体。。。。在

lFilter需要什么?因为我有轴误差和二维它的小。。。。在

screenshot from the terminal

编辑:顺便说一句,这是scipy库中关于lfilter函数的文档,上面写着:

x : array_like
An N-dimensional input array.

http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.lfilter.html


Tags: 数据函数过滤器编码信号scipy数组解码
1条回答
网友
1楼 · 发布于 2024-09-28 21:33:40

首先,你需要保留一个块的最终条件,并将其作为初始条件提供给下一个块。否则,过滤器假设在每个块的开始处静止,这将导致每个块出现故障。在

global zi
audio_data, zi = signal.lfilter(b, a, full_data, zi=zi)`

所以这个调用将更新zi,然后在下一个循环中,它将使用它作为lfilter的输入,后者将更新它,等等

^{pr2}$

要首先初始化zi,只需创建一个形状为(max(len(a), len(b)) - 1, number_of_channels)的零数组。在

相关问题 更多 >