【发布时间】: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 滤波器。
所有这些都是为了测试目的,所以我不希望出现“为什么使用向量而不是调用函数呢?”这样的建议。
我只是想知道,如果第二个变量几乎相同,函数怎么能不工作?
【问题讨论】: