首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切割信号(互连)并计算这些部分

切割信号(互连)并计算这些部分
EN

Stack Overflow用户
提问于 2013-06-03 23:00:25
回答 4查看 369关注 0票数 1

我是信号处理领域的一名法国学生工程师,我在一家神经科学实验室实习。我必须在Matlab的帮助下处理大量来自大脑活动的数据,所以我的主要课题之一就是优化代码。但现在我陷入了一个无法解决的境地,我在网上找不到任何关于它的东西。我解释一下我的问题:

例如矩阵a:

代码语言:javascript
复制
a = [ 1 2 3 4 5;  6 7 8 9 10;11 12 13 14 15]

每一行都是一个信号的数据(所以这里我们有3个信号),我想,对于每个信号/行,在相同长度的块中切割向量。

例如,对于信号1,我想提取块S1_1 = [1 2 3], S1_2 = [2 3 4], and S1_3 = [3 4 5]并计算每个子块。

我的第一个想法是使用像这样的嵌套循环:

代码语言:javascript
复制
[nrow ncol] = size(a);

for i = 1 : nrow
   for j = 4 : ncol
      sub_block = a(i, (j-3):j);
      result(i, j-3) = compute(sub_block);
   end
end

但正如我所说的,我必须处理大量的数据,所以我想避免使用for循环。我正在寻找一个算法,它将能够删除这些for循环,但我不知道如何做…

我看到了函数‘重塑’,但这给了我一个子块,比如:S1_1 = [1 2 3], S1_2 = [4 5 6],我不能使用它,因为在子块S1_2中,我有来自信号1和信号2的数据。

然后我看到了'blockproc‘函数,但我并不真正理解它是如何处理的,我也不太确信这个函数能帮到我……

所以,我希望你能理解我的问题,并希望你能帮助我或告诉我一种找到解决方案的方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-03 23:23:09

除了@Ziyao Wei的建议之外,你还可以选择使用im2col

代码语言:javascript
复制
>> S = im2col(a', [3 1])
S =

     1     2     3     6     7     8    11    12    13
     2     3     4     7     8     9    12    13    14
     3     4     5     8     9    10    13    14    15

其中,k = 1:data_rowsS(:, 3*k-2:3*k)是数据的行k (a)的所需子块。

票数 0
EN

Stack Overflow用户

发布于 2013-06-03 23:11:03

Blockproc似乎正在进行块操作,而不是滑动操作。稍微深入研究一下,就会得出以下结论:

http://www.mathworks.com/help/images/ref/nlfilter.html

但似乎需要图像处理工具箱。

这也可能会有所帮助:

http://dovgalecs.com/blog/matlab-sliding-window-easy-and-painless/

通常,尝试搜索滑动窗口或卷积,并尝试查看是否显示了某些内容。

票数 0
EN

Stack Overflow用户

发布于 2013-06-03 23:16:55

您可能会找到使用arrayfun函数执行循环的另一种方法,但事实是它可能不一定比arrayfun can be significantly slower than an explicit loop in matlab. Why?更快

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16899782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档