如何处理大工作区中的变量

8视图(30天)
我有一个代码所示读取数据采集对象和数据更新变量 信号 和更新时间图和谱图。问题是,随着测量(这意味着很大的变量的大小 信号 ),情节更新速度和UIApp(由应用程序设计师)性能得到显著放缓。阈值时间取决于采样频率。在51200赫兹的情况下,我发现这是大约40秒。但是我需要测量数据,同时120秒…所以我怎么能处理这个大号的工作区中产生的数据?
n =装天花板(app.daqDevice.Rate / 10);
信号= [];
%开始测量
开始(app.daqDevice“连续”)
暂停(0.1)
(1)
%检查测量结束条件
如果app.Button_2。值= = 1
停止(app.daqDevice)
app.Button。值= 0;
保存(fullfile (app.SaveFolderPath
str2double (app.TrialNumber_Value.Text) +
“_”+ app.SpeedList.Value +“.mat”),
“信号”)
返回;
结束
% DataAquisition Obj读取数据形式
data =阅读(app.daqDevice n);
%更新测量值
信号=[信号;数据);
%更新时间曲线图
情节(app.Timeplot数据。时间,data.Variables)
ylim (app.Timeplot [1])
%更新谱图
[pxx f] = pwelch (data.Variables, 512256, 1024, 32000);
情节(应用程序。PSDplot f 10 * log10 (pxx))
结束

接受的答案

Chunru
Chunru 2021年7月28日
编辑:Chunru 2021年8月2日
只有过程的最新数据和扔掉旧的数据。您需要考虑流媒体处理您的数据。请参见下面的建议在代码中。
n =装天花板(app.daqDevice.Rate / 10);
% =[]的信号;
%预先分配内存空间固定的数据量
%这将使程序更快
信号= 0 (nmax, 1);% nmax样本的数量
%的数据日志记录,可以考虑fopen和写入文件的速度。
%开始测量
开始(app.daqDevice“连续”)
暂停(0.1)
(1)
%检查测量结束条件
如果app.Button_2。值= = 1
停止(app.daqDevice)
app.Button。值= 0;
%保存数据块的块而不是一个
保存(fullfile (app.SaveFolderPath
str2double (app.TrialNumber_Value.Text) +
“_”+ app.SpeedList.Value +“.mat”),
“信号”)
返回;
结束
% DataAquisition Obj读取数据形式
data =阅读(app.daqDevice n);
使用写入文件%保存数据
%更新测量值
信号(1:nmax-n) =信号(n + 1: nmax);%转移数据
信号(nmax-n + 1: nmax) =数据;%将新数据
%的信号(nmax) =[信号;数据);
%更新时间曲线图
%画出缓冲信号相反的信号
情节(应用程序。Timeplot,数据。时间,data.Variables)
ylim (app.Timeplot [1])
%计算频谱随缓冲数据信号
%更新谱图
[pxx f] = pwelch (data.Variables, 512256, 1024, 32000);
情节(应用程序。PSDplot f 10 * log10 (pxx))
结束
3评论
弗雷德里克Acquah
弗雷德里克Acquah 2022年10月7日
我试着这段代码,我得到一个错误,因为信号是一个双,而数据的数据类型是一个时间表。

登录置评。

更多的答案(0)

s manbetx 845


释放

R2021a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!