【问题标题】:Audio filtering strange issue with MATLABMATLAB 的音频过滤奇怪问题
【发布时间】:2014-06-27 03:58:34
【问题描述】:

我在一个函数脚本中使用 matlab 过滤一个音频文件,该脚本有一个由我创建的名为“filtro_pf”的函数,它是一个带通滤波器,它的输出是 IIR 对应的系数:

[b,a] = filtro_pf(Ap,As,fp1,fs1,fp2,fs2,1); //BAND PASS FILTER
b2 = [0.0039,0,-0.0156,0,0.0234,0,-0.0156,0,0.0039];
a2 =[1.0000,-6.2682,17.2660,-27.3421,27.2582,-17.5284,7.0998,-1.6555,0.1701];
wfpf = filter(b,a,audio_stream);
wavplay(wfpf,fs);

请注意,第二行和第三行(b2 和 a2)是函数“filtro_pb()”为这些输入提供的值。我已经运行过一次,然后将它们复制到这些变量中。现在,在我运行这个脚本之后,如果我在控制台中询问“a”和“a2”,我将得到:

a =

1.0000   -6.2682   17.2660  -27.3421   27.2582  -17.5284    7.0998   -1.6555    0.1701


a2 =

1.0000   -6.2682   17.2660  -27.3421   27.2582  -17.5284    7.0998   -1.6555    0.1701

它们几乎相同。但是,如果我在 filter() 函数中使用 'a2' 而不是 'a',它就不起作用。我听到一种滴答声,就是这样。使用“a”,我可以听到正确过滤的声音。之前使用过相同的代码并且确实有效:

%[b,a] = filtro_pa(Ap,As,fp,fs,1); //HIGH PASS FILTER
b = [0.5411   -1.6232    1.6232   -0.5411];
a = [1.0000   -1.8062    1.2298   -0.2925];
wfpa = filter(b2, a2, audio_stream);
wavplay(wfpa,fs);

同样,我之前使用过这个脚本,发现这些值(来自 a2 和 b2)是这些输入的输出。现在,我不再再次调用该函数(顺便说一下),而是直接使用“a”和“b”向量。它适用于 LowPass 和 HighPass 滤波器。

所有这些都是为了测试目的,所以我不希望出现“为什么使用向量而不是调用函数呢?”这样的建议。

我只是想知道,如果第二个变量几乎相同,函数怎么能不工作?

【问题讨论】:

    标签: matlab audio


    【解决方案1】:

    变量中存在的精度高于显示的精度,这意味着您的a2b2 向量与ab 不同。该顺序上的错误会使过滤器不稳定,这似乎令人惊讶,但似乎就是这样。您应该能够通过查看带有freqz 的过滤器响应并绘制结果音频向量来探索这一点,而不仅仅是听它。

    您可以使用format long 来打印更高的精度,但这些仍然会有一些舍入误差。为避免这种情况,请将矢量保存到 .mat 文件并重新加载。 .mat 文件将使用二进制格式并存储向量的完整精度。

    它适用于其他过滤器的原因可能是因为这些过滤器对其系数的舍入误差不太敏感:它们的系数较少,并且这些系数的值不太极端。

    这是频率响应的示例比较:

    [H W] = freqz(b2, a2);  % your filter (with error)
    a_error = zeros(size(a2));
    a_error(9) = a_error(9)+.001;  % a little bit of error in a single coefficient
    [HE WE] = freqz(b2, a2 + a_error);   % frequency response of THAT filter
    plot(log10(abs([H HE])))
    

    如您所见,一个小小的改变就会产生很大的不同。

    对不稳定性的实际分析来自于查看滤波器的极点和零点:

    [z p k] = tf2zp(b2, a2);
    abs(p)
    

    如果任何极点的幅度大于 1(这个是),滤波器将不稳定。尝试实际值,然后是“近似”值,看看会发生什么。

    【讨论】:

    • 我刚刚使用 vpa(a) 来显示 20 位数字的“a”,我们开始吧。现在它起作用了。难以置信...曾经有人告诉我这些过滤器可能不稳定,差异很小,但我永远不会想到它会如此不稳定!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-01-23
    • 2011-02-02
    • 1970-01-01
    • 2011-05-22
    • 2015-08-06
    • 2010-12-14
    • 1970-01-01
    • 2021-07-21
    相关资源
    最近更新 更多