带陷波滤波器和butterworth的滤波器数据
问题描述:
我有一个流信号输出到matlab。我想用陷波滤波器和巴特沃思滤波器过滤这个信号,并简要地绘制这个流式滤波数据,而在流式信号输入和绘制滤波数据之间没有太多延迟。什么是解决这个问题的最好方法?我不确定如何去过滤连续的数据。谢谢。带陷波滤波器和butterworth的滤波器数据
答
好吧,我终于能够解决我的问题。本来我的代码是这样的:
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
随着可与运行时间被替换的“未知”行长度。我现在可以'实时'过滤我的数据。有助于实现这一目标的重要因素是使设定功能从数据采集开始到当前数据时间,并强制绘图以drawnow函数进行更新。我希望这可以帮助任何人尝试实时过滤流/连续数据。