Matlab 尝试在数据上实现butterworth高通和低通滤波器,但出现错误

Matlab 尝试在数据上实现butterworth高通和低通滤波器,但出现错误,matlab,user-interface,filter,filtering,Matlab,User Interface,Filter,Filtering,我正在尝试创建一个GUI。在这个GUI中,我有一个弹出菜单来选择要应用的过滤器类型,还有一个列表框供用户选择截止频率。数据以每秒500个样本的速度记录,目前处于[1800000x1单个] 我的代码当前如下所示: %get cutoff frequency from listbox contents = cellstr(get(hObject,'String')); cutoff_frequency=contents{get(hObject,'Value')}; data=handles.dat

我正在尝试创建一个GUI。在这个GUI中,我有一个弹出菜单来选择要应用的过滤器类型,还有一个列表框供用户选择截止频率。数据以每秒500个样本的速度记录,目前处于[1800000x1单个]

我的代码当前如下所示:

%get cutoff frequency from listbox
contents = cellstr(get(hObject,'String'));
cutoff_frequency=contents{get(hObject,'Value')};

data=handles.data1;
sampling_rate=500;
handles.sampling_rate=sampling_rate;
Wn=cutoff_frequency/(sampling_rate/2);
filter=handles.filter;

if filter=='High Pass'
  [B,A]=butter(2,Wn,'high')
  data=filter(B,A,data);
  figure
  plot(data);

end
错误:

我得到一个错误:“对于'high'过滤器选项,Wn必须是一个1元素向量” 通过将截止频率从字符串转换为数字来固定

cutoff_frequency=str2num(cutoff_frequency)
当我从butter函数中删除'high'并修复第一个错误时,我也收到了这个错误:“下标索引必须是实正整数或逻辑数。”

我需要帮助对数据应用高通和低通滤波器

如果有人能告诉我如何确定应该使用哪种顺序过滤器,那就太好了

我找到了解决办法

MATlab不喜欢我在代码后面将filter用作函数时将其用作变量。
通过将我的filter变量更改为filter\u choice,一切都会顺利运行。

如果您查看变量列表中的
截止频率类型,它会显示什么?我将其编码为:“class(截止频率)”,并将其作为一个字符返回。GUI不在工作区中保留变量。如果这不是您需要的,请告诉我。在句柄结构中,它给出了
截止频率:“1”
或我在列表框中选择的任何数字。因此问题是
Wn
不是一个数字,因为您将字符除以一个数字。您需要将
cutoff\u frequency
转换为一个数字,然后您可能会解决第一个错误谢谢,我刚刚编码了
cutoff\u frequency=str2num(cutoff\u frequency)
,它确实修复了第一个错误。它现在给了我第二个错误。