在 App 设计工具的 UIAxes 上绘制过滤后的时间序列数据

Plotting filtered time-series data on UIAxes in App Designer

我在 App Designer 中(使用 2017b)在 UIAxes 上绘制一些时间序列数据时遇到问题。

原始时间序列数据噪声很大,因此加载的数据(用户通过UIGetFile选择)在检查后进行去趋势和陷波滤波(陷波的频率来自用户输入的UITable)单独的 UIAxes 上的 Welch PowerSpectra。

我可以很容易地让它在 App Designer 之外工作,但最好将它全部保存在 UIFigure 和指定的 UIAxes 中(我可以让过滤的时间序列数据显示在单独的图中,只是不在 UIAxes [与频谱图有同样的问题])。

Bx = app.Bx;                % Grabs data from loaded file
t = 0:(size(Bx,1)-1);       % Sets the time from size of data
t = t/Freq;                 % divides time by Frequency @ which the data is recorded
Bx1 = timeseries(Bx, t);    % Set the timeseries

FreqNotch = app.UITable.Data;              % Grab Frequencies to Notch from values entered in UITable
Bx1 = detrend(Bx,'constant');               % Get rid of the mean
ts1 = idealfilter(Bx1,FreqNotch,'Notch');  % Notch filter the data

plot(app.UIAxes, ts1);   % Doesn't work, returns error
plot(ts1);               % Does Work, just plots in a seperate figure

错误信息是:

使用绘图时出错。 数据必须是数字、日期时间、持续时间或可转换为双精度的数组。

根据您提供的信息,我怀疑问题出在您访问数据的方式上,在 app.designer class 中,存储为 "properties" 的数据通常组织在细胞.

根据我修改语法的经验,您用于访问数据(大括号、圆括号、点符号等)将解决此问题。

如果没有更多信息,我将无法给出更精确的解决方案(即使这个答案是在问题出现六个月后做出的)。

下面是我用来在应用程序设计器的 UIAxes 上绘制陷波滤波时间序列数据的解决方案的一部分,轴上有正确的日期和时间。这是针对 5 个独立通道(仅在下面显示一个)的 90 分钟块(~550 Mb ascii 文件)中的 1000Hz 数据。

app.Bx = app.DataLoaded(:,8); % time series data from imported text file

% set the date and time from loaded data YYYY MM DD HH MM SS MS
app.dateT = datetime(app.DataLoaded(:,1),app.DataLoaded(:,2),app.DataLoaded(:,3),app.DataLoaded(:,4),app.DataLoaded(:,5),app.DataLoaded(:,6),MilliSec);

t = 0:(size(app.Bx,1)-1);    % set the time variable from 0 to length of file
t = t/app.Frequency;         % in seconds and correct for Frequency rate 

app.Bx = detrend(app.Bx,'linear'); % removing of best straight-line fit from data
app.Bx = detrend(app.Bx,'constant'); % removes the mean value from data

FreqNotch = (app.UITable.Data);  % get the data entered in the notch table
FreqNotch = cell2mat(FreqNotch); % convert table cell to matrix

app.FilteredBx = idealfilter(app.Bx,FreqNotch,'notch'); % notch filter each

line(app.UIAxesTS1,app.dateT,(app.Bx.data),'Color',[0.27 0.87 1], 'LineWidth',0.8);

干杯,BK