Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果快速卷积需要LPF,如何使用基于快速FFT的卷积实现LPF?_Android_Iphone_Audio_Signal Processing_Fft - Fatal编程技术网

Android 如果快速卷积需要LPF,如何使用基于快速FFT的卷积实现LPF?

Android 如果快速卷积需要LPF,如何使用基于快速FFT的卷积实现LPF?,android,iphone,audio,signal-processing,fft,Android,Iphone,Audio,Signal Processing,Fft,我是一名经验丰富的软件工程师,有一些大学DSP方面的知识。我正在开发一个智能手机应用程序来处理信号数据,例如来自麦克风(采样频率为44100 Hz)和加速计(采样频率为32-50 Hz)。我的应用将是,例如,基音检测器等等 我想在手机上安装一个低通滤波器(LPF),以消除混叠频率,特别是对于采样率较低的加速计然而,在尝试应用该方法时,我发现了一个矛盾。任何帮助都将不胜感激 以下是我的推理: 我正在读取一个信号,我想使用LPF进行抗锯齿(消除锯齿频率) 为了在我的智能手机上实现LPF,我选择对时域

我是一名经验丰富的软件工程师,有一些大学DSP方面的知识。我正在开发一个智能手机应用程序来处理信号数据,例如来自麦克风(采样频率为44100 Hz)和加速计(采样频率为32-50 Hz)。我的应用将是,例如,基音检测器等等

我想在手机上安装一个低通滤波器(LPF),以消除混叠频率,特别是对于采样率较低的加速计然而,在尝试应用该方法时,我发现了一个矛盾。任何帮助都将不胜感激

以下是我的推理:

  • 我正在读取一个信号,我想使用LPF进行抗锯齿(消除锯齿频率)

  • 为了在我的智能手机上实现LPF,我选择对时域信号应用FIR滤波器(即加窗sinc函数)。设x[n]为信号,f[n]为滤波器核的系数。所以我想在x[n]和f[n]之间执行卷积,其中x[n]的长度为n(通常为512),f[n]的长度为M(通常为256)

  • 我在智能手机(Android和iPhone)上实现了一个简单的一维卷积。该算法是以O(nm)为单位运行的。对于N=512和M=256,它在智能手机上运行太慢

  • 然后我研究了使用FFT并在O(N lgN)中运行的。具体地说,滤波信号来自:滤波x[n]=IFFT(FFT(x)。*FFT(f)),其中FFT是FFT,IFFT是逆FFT,.*是两个阵列的逐元素乘法

  • 然而,我在这个过程中发现了一个矛盾:IFFT(FFT(x)*FFT(f))。这要求我取x[n]的FFT,但x[n]可能有混叠频率。这正是我第一步的第一个问题

  • 那么,我怎样才能解决这个矛盾呢?如果快速卷积在内部需要LPF,如何使用快速卷积实现LPF


    注意:一些EE人员告诉我,有些麦克风内置了基于硬件的LPF,但我不能确定我的智能手机麦克风或加速计。智能手机上的麦克风在采样之前总是有模拟低通滤波器。如果信号中已出现混叠,则通常无法消除。因此,在离散化之前,每个麦克风的A/D转换器都在alalog域中实现了低通滤波。除非您自己正在以某种方式对信号进行下采样或重新采样,否则不应担心混叠。快速卷积和时域离散循环卷积在数学上是等价的,因此,如果另一个没有混叠,则没有理由让一个有混叠。

    基于FFT的卷积是一种优化,用于在采样前需要一个截止频率低于抗混叠所需的低通滤波器的低通滤波器。e、 g.2个低通滤波器,一个在硬件中,一个在软件中。这通常是在两个低通滤波器可以创建比采样器之前的一个硬件滤波器更好或更便宜的给定滤波器质量(通带平坦度等)时,或者如果采样器本身在所需信号上方的频谱中引入噪声(大部分)时实现的。

    简单地说:计算FFT(x)不会引入别名

    每次对信号进行采样时都会引入混叠。我认为您困惑的根源在于音频信号有两个采样过程:一次是获取连续声音并使其成为44.1 kHz的信号,然后是要添加的下采样步骤

    比如说,在30千赫时有一个虚假的音调(例如):它必须被智能手机的硬件拒绝。一旦你有了这些44.1 kHz的样本,你就会被通过采样器得到的alias产品所困扰。采样后无法撤消混叠(严格来说这不是真的,但对于基带信号是真的,这正是您要处理的)。您应该继续并假设手机设计师正确地做到了这一点,并且您不必担心信号内容高于~20 kHz的alias产品

    这就引出了第二个采样步骤。您完全正确,在减少采样之前需要应用另一个反别名过滤器。任何低于20 kHz但高于2倍下采样率的信号内容都将混叠到输出中,除非先对其进行衰减。关键是在下采样之前计算FFT(x),然后应用滤波器,然后下采样。这就是允许您获得受别名保护的输出的原因


    最有可能的是智能手机有一个delta sigma ADC,它使用一个相对成熟的模拟抗混叠滤波器(1或2极),然后以极高的速率(64*44.1 kHz或更高)采样,然后在其下采样过程中应用数字滤波器。MEMS加速度计同样具有固有的抗混叠保护。如果你想测试这一点,使用一个正弦波源连接到一个电动震动器(或一个结实的低音炮锥)并以几kHz的频率震动你的手机。您应该看不到加速计信号的输出。然后以30 kHz的频率驱动一个高音扬声器,看看麦克风是否显示了什么。

    没有矛盾<代码>X具有高频率
    Y=X*F
    不再具有高频,因为
    F
    滤波器(即,将它们相乘)。

    低通滤波器必须置于ADC之前,即,它必须是某种模拟电路。您无法从采样信号中删除混叠,因为您不知道采样信号的哪个部分是由于混叠造成的,这就是为什么混叠是一个问题的全部原因。

    如何检查智能手机中的麦克风和加速计是否具有模拟低通滤波器?它是否在单个组件(麦克风和加速计)的规格中?它们总是有。没有LPF的样品是不会被取样的。我想你误解了这个问题,或者