尝试进行光谱估算但遇到问题我不确定原因是什么,我也同样遵循此文档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.
我不确定问题是什么,除了我的过滤器出了问题,但即便如此,我也不知道可能出现什么问题,用它来过滤一些信号,效果很好。
非常感谢。
答案 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,其中可以检查其截止频率,幅度响应和相移。