我需要对振动数据进行带通滤波。
我有一个以 48kHz 采样的信号。我需要从中提取 40 个信号。 40个信号中的每一个都是感兴趣的频带,例如20至600Hz或600至1200Hz等。 我尝试过使用命令
bandpass()
但对于我的需求来说太慢了。
我尝试过使用 fftfilt()
但相比之下它给出的结果很差(滤波波形中的幅度为零!即使频谱中的频带被信号占据)
有人可以帮我找到过滤此类数据的快速解决方案吗? (
accH
是信号)
这是两种过滤的代码:
accH=randn(48000*5,1);% simulating vibration data using randn.
%% bandpass filtering (slow)
LB=0:600:24000-600;LB(1)=20;
UB=600:600:24000;UB(end)=24000-20;
A1=zeros(length(accH),length(LB));
for k=1:length(UB)
A1(:,k)=bandpass(accH,[LB(k) UB(k)],Fs);
end
%% fftfilt filtering (not working)
A=zeros(length(accH),length(LB));
for j=1:length(UB)
bpfilt = designfilt('bandpassfir', ...
'FilterOrder',20,'CutoffFrequency1',LB(k), ...
'CutoffFrequency2',UB(k),'SampleRate',Fs);
`A(:,k)=fftfilt(bpfilt,accH);
end
带通与ffftfilt。 我附上了过滤器结果的图像。黑色是 6000 到 6600 Hz 频段的波形。红色部分是
fftfilt()
的波形。
显然,存在一些问题......
我需要一些快速过滤的建议(我不需要陡峭的过滤器)
第二部分有错字。将循环变量更正为
k
而不是 j
并且它可以工作。
%% fftfilt filtering (not working)
A=zeros(length(accH),length(LB));
for k=1:length(UB)
bpfilt = designfilt('bandpassfir', ...
'FilterOrder',20,'CutoffFrequency1',LB(k), ...
'CutoffFrequency2',UB(k),'SampleRate',Fs);
`A(:,k)=fftfilt(bpfilt,accH);
end