使用陷波滤波器和butterworth过滤数据

时间:2016-05-15 05:13:04

标签: matlab filter

我有一个流式信号输出到matlab。我想用陷波滤波器和butterworth滤波器对此信号进行滤波,并简要绘制此流式滤波数据,在流式信号输入和绘制滤波数据之间没有太大延迟。怎样才能解决这个问题?我不确定如何过滤连续的数据。感谢。

1 个答案:

答案 0 :(得分:0)

好的,我最终能够解决我的问题。最初我的代码看起来像这样:

figure

% Plot known length data without filter
for i = 1:4
    subplot(4,1,i);
    plot(newData(:,1),newData(:,i+1))
end

figure

% Filter Parameters 
wo = 50/(1000/2); % notch filter frequency
bw = wo/5; 
bs = 30/(1000/2); % lower cut off frequency
[b,a] = iirnotch(wo,bw); % notch filter  
[b2,a2] = butter(4,bs,'high'); % highpass butterworth design filter

row  = length(newData);
butterData = zeros(row,4);

% Plot known length data with filter
for i = 1:4
    notchData = filter(b,a,newData(:,i+1));       
    butterData(:,i) = filter(b2,a2, notchData);
    subplot(4,1,i);
    plot(newData(:,1),butterData(:,i))
end

经过一番捣乱后,我最终得到了这个:

figure
h = plot(nan);

% Plot uknown length of continous data with filter
for i = 1:row
    notchData = filter(b,a,newData(1:i,2));       
    butterData(1:i,1) = filter(b2,a2, notchData);
    set(h,'XData',newData(1:i,1),'YData',butterData(1:i,1))
    drawnow
end

使用'未知'行长度可以用运行时间代替。我现在能够实时'过滤我的数据。帮助实现这一目标的重点是让设置功能从数据采集的开始到当前数据时间,并强制绘图用drawow函数更新。我希望这可以帮助任何有同样问题的人尝试实时过滤流/连续数据。