建议采用不同的带通滤波方法。`fftfilt`无法正常工作

问题描述 投票:0回答:1

我需要对振动数据进行带通滤波。

我有一个以 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()
的波形。 显然,存在一些问题...... 我需要一些快速过滤的建议(我不需要陡峭的过滤器)

matlab filtering signal-processing
1个回答
0
投票

第二部分有错字。将循环变量更正为

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
© www.soinside.com 2019 - 2024. All rights reserved.