FFT过滤/白化时出错

时间:2017-05-29 03:07:36

标签: signal-processing scilab

尝试进行光谱估算但遇到问题我不确定原因是什么,我也同样遵循此文档https://www.scilab.org/product/man/pspect.html

我试图先用白噪声得到滤镜的fft,我的滤镜是带通

Fs=22050;
cf=[650 750]/Fs;
rand('normal');rand('seed',0);
x=rand(1:1024-33+1);
hn=iir(4,'bp','butt',cf,[0 0]);
h1=[hn 0*ones(1:max(size(x))-1)];
x1=[x 0*ones(1:max(size(hn))-1)];
hf=fft(h1,-1);

当我试图做fft时出现问题,scilab告诉我

--> hf=fft(h1,-1);
in builtin                fftw 
Function not defined for given argument type(s),
  check arguments or define function %r_fftw for overloading.

我不确定问题是什么,除了我的过滤器出了问题,但即便如此,我也不知道可能出现什么问题,用它来过滤一些信号,效果很好。

非常感谢。

1 个答案:

答案 0 :(得分:1)

您无法将傅立叶变换应用于滤镜。滤波器由拉普拉斯s域中的有理多项式函数表示,傅里叶变换在时域中作为参数接收函数。从fft()开始,它应该应用于包含信号样本的矩阵。如果您想查看过滤器对白噪声的行为,您应该将信号传递给过滤器,然后使用fft()

至于你的代码,iir()返回包含有理多项式的列出的hn,这是过滤器的传递函数。当你这样做

h1=[hn 0*ones(1:max(size(x))-1)];

你创建一个行矩阵h1,其中第一个元素是过滤器的传递函数。第二部分0*ones(1:max(size(x))-1)只是创建一个由991个零组成的行矩阵,并将其附加到第一个元素。由于矩阵中的所有元素必须属于同一类型,因此所有这些零都变为有理无效多项式。这种矩阵不能作为fft()的输入。

如果您想快速检查过滤器是否按预期方式工作,而不是手动测试白噪声,可以尝试使用bode(hn)创建Bode plot,其中可以检查其截止频率,幅度响应和相移。