如何删除离群值和光滑的复杂信号?
29日视图(30天)
显示旧的评论
苏珊
2021年8月27日
你好,
我工作在一个复杂的数据集——300 - 1000矩阵的每个元素是一个复数,这个矩阵的每一列被认为是一个单独的数据流。
我想删除离群值和任何进一步的invistigation之前平稳信号。Hample或rmoutliers过滤器只是真实的数据。有什么建议给我吗?
它任何意义这些过滤器适用于真实图像放大的信号,说x,是分开的,考虑新的真正的(x) + j *图像放大(x)的过滤数据?
提前谢谢!
0评论
接受的答案
明星黾
2021年8月27日
”
它任何意义这些过滤器适用于真实图像放大的信号,说x,是分开的,考虑新的真正的(x) + j *图像放大(x)的过滤数据?
”
最简单的方法来确定是做实验,看看resullt是什么。
Z =复杂(randn(12日1),randn (1))
查询= [isoutlier(真实(Z)) isoutlier(图像放大(Z)))
Zro = rmoutliers([真实(Z)图像放大(Z)))
所以结果是有效的实部或虚部
“Z”
(这里)是个例外。整个行窗台上被删除,如预期。结果可以复制使用
复杂的
函数,就像我最初创建它。
。
21日的评论
明星黾
2021年8月27日
如果整个行删除离群值,应该没有问题的完整性矩阵。
你需要确定填充异常值-而不是删除是最好的路要走,因为填插值(使用无论你选择哪种方法),创造了新的数据。简单地删除它们包含这些单词的行,可以避免这个问题。
一切都取决于你想做什么。
因为每一列是一个单独的数据流,避免矩阵问题的完整性的一种方法是使用mat2cell函数,这样每一列是一个单独的单元阵列:
Z(: 1) =复杂(randn(12日1),randn (12,1));
Z(:, 2) =复杂(randn(12日1),randn (12,1));
Z(:, 3) =复杂(randn(12日1),randn (1))
Z =
我-1.2813 - 0.1998 0.5323 - 1.8208 -0.5851 - 0.2996 0.1563 + 0.9701我0.1833 - 1.2399 -2.2381 - 0.4084 -0.6694 -0.3811 0.9065 + 0.5875 + 1.1518我我-1.1481 + 2.6963 + 0.4133 0.4605 0.3207 + 0.3442 + 2.4708我-1.8806 + 1.8707我-0.4762 + 0.4955 -0.4521 - 1.3997 0.3389 - 0.6344 0.0169 - 1.7479 -0.5922 - 0.7799我-0.2126 + 0.5346我-0.4455 + -2.5071 + 0.5240 1.9598 1.2624 - 0.5898 -0.6646 - 0.0799我0.2233 + 0.4899我-1.1608 + 1.0328 -1.8290 - 0.6129 0.8086 + 1.4046我-1.0206 + 0.0161 + 0.5505 0.6658 -1.0308 2.2073 - 0.2543我0.0471 + 0.3463 + 1.0622我0.2834 + 1.0997 0.2046 - 1.0288 1.0445 - 0.7435 -0.0711 - 0.3890我
佐= mat2cell (Z,大小(Z, 1),(1,尺寸(Z, 2)))
佐=1×3单元阵列
{12×1双}{12×1双}{12×1双}
查询= isoutlier([真实([佐{:}])图像放大((佐{:}))))
查询=12×6逻辑数组
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
佐= cellfun (@ (x) rmoutliers([真正的(x)图像放大(x))),佐,“Unif”,0)
佐=1×3单元阵列
{11×2双}{12×2双}{10×2双}
俺们这里工作就像最初,对矩阵的真实和想象的成分。
一个
警告
每个元素(列)的吗
“佐”
必须单独处理,因为他们现在不再平等。如果他们有时间向量有关,需要考虑和调整使用
isoutlier
为每一列函数,这样适当的时间也被删除。
再次:
一切都取决于你想做什么。
。
明星黾
2021年8月27日
那些是你的数据,你需要决定什么是有用的,什么不是。
我将情节的大小(使用的数据
腹肌
函数)和数据(使用的阶段
角
函数),看看最合理的方式。
有几种方法来过滤数据,这取决于噪声带宽有限(在这种情况下频率选择滤波器是最高效和有效)或宽带噪声(在这种情况下,Savitzky-Golay过滤器将是最有效的)。
自从你ard做我不知道,我不能确定哪些数据是“好”和什么数据。
我通常确定这一问题的方法之一是数据的均值和标准错误的意思是,和使用
95%
coinfidence限制(假设一个已知分布)决定是否使用特定的数据。这很可能是‘好’的所有数据,并简单地表示系统你测量的时间差异。informationo本身可以是有价值的,因为它可以提供洞察系统的时变特性,。
再一次,我不知道你在做什么,所以这只是我的猜测。
。
苏珊
2021年8月27日
编辑:苏珊
2021年8月27日
再次非常感谢你的信息回复。我真的很感激。
以确保我得到你正确的,你的意思是使用“的意思是”命令和数据的平均数标准误差
stderror =性病(数据)/√长度(数据))
然后做某事的95%置信区间
x =兰迪(50,100);%创建数据
SEM =性病(x) /√(长度(x));%标准错误
ts = tinv([0.025 - 0.975],长度(x) 1);% t指数
CI =意味着(x) + ts *扫描电镜;
然后检查下降95%置信上限的数据测试是否> = CI (1)
和
< = CI (2) ?如果你认为这是一个好的数据吗?我的理解正确吗?再一次,提前谢谢你!
苏珊
2021年9月3日
编辑:苏珊
2021年9月3日
此外,当我申请
佐= cellfun (@ (x) rmoutliers([真正的(x)图像放大(x))),佐,“Unif”,0)
我得到以下错误
未定义的函数的输入参数“真实”的类型“细胞”。
佐是12 * 190个细胞,每个细胞含有1 * 336细胞即
佐- - > 12 * 190细胞
佐{1}- - > 1 * 336细胞
佐{1}{1}- - >一个复杂矩阵的大小600 - 1
我想申请功能“@ (x) rmoutliers([真正的(x)图像放大(x)))“600 -, - 1矩阵。你能告诉我怎么解决这个问题?
此外,我有时间向量相关的数据流,即。为每个数据流,一次向量。矢量数据集时间“t”的确切格式数据流集,即。,12*190 cell, 1*336 cell, and each of these 1*336 cells contain a matrix of 600-by-1. As you mentioned earlier " If they have associated time vectors, that will need to be considered and adjusted using the
isoutlier
为每一列函数,这样适当的时间也被删除。“你能告诉我我能怎么做呢?
我真的感激你的帮助。
明星黾
2021年9月3日
我不知道你什么
“佐”
是,因为它从未公布。
而不是我创造了你
“佐”
可能包含其他细胞内细胞本身。
Z(: 1) =复杂(randn(12日1),randn (12,1));
Z(:, 2) =复杂(randn(12日1),randn (12,1));
Z(:, 3) =复杂(randn(12日1),randn (1))
Z =
-0.5853 + 2.4639我0.6306 - 0.3304 0.6598 - 0.9735 0.6066 2.5984 + 0.5309 + 0.0160我-1.6019 + 0.7852我-0.3412 + 0.7698 -0.4684 - 1.1739 -0.9331 + 1.3424我-1.3994 - 0.2494 0.6664 - 0.4860 -0.4166 + 0.7058我2.7730 - 0.8464 -0.2850 - 0.9701 -0.7736 - 0.4878 0.7362 - 0.0014 -0.0358 - 1.2007我0.9366 + 1.3649我-0.2278 + 1.3435 -0.6741 - 0.3080 -0.5566 - 0.3074 1.0900 - 0.2222 -1.3691 - 0.0885我-0.4428 + 2.1068我0.2093 + 0.2958 0.3628 - 1.1968 -0.9282 - 0.0533我-0.6590 + 0.4372 -1.7537 - 0.9631 1.3973 - 0.4798 -1.3556 - 0.5976 -0.8509 - 1.8627我-0.5903 + 0.0886我-0.2406 + 0.2537 -0.7712 - 0.1531 -0.9282 - 1.7822
佐= {mat2cell (Z,大小(Z, 1),(1,尺寸(Z, 2)))}这样的%
佐=1×1单元阵列
{1×3细胞}
%查询= isoutlier([真实([佐{:}])图像放大((佐{:}))))
佐= cellfun (@ (x) rmoutliers([真正的(x)图像放大(x))),佐{:},“Unif”,0)% < -试试这个
佐=1×3单元阵列
{10×2双}{11×2双}{11×2双}
试图模仿,这个版本的
“佐”
最初把类似的错误的发布(有明显错误消息的版本差异),和改变我
cellfun
调用处理,在这里工作。看它是否与你的工作
“佐”
。
。
苏珊
2021年9月3日
编辑:苏珊
2021年9月3日
谢谢你你的快速答复。你是对的,我的
“佐”
本身就含有其他细胞细胞内。当我尝试
佐= cellfun (@ (x) rmoutliers([真正的(x)图像放大(x))),佐{:},“Unif”,0)
在这里我佐
12 * 190细胞内含有其他细胞,即。细胞,每个细胞都包含1 * 336。
我得到
错误使用@ (x) rmoutliers([真正的(x),图像放大(x)))
太许多输入参数。
我试着解决这个问题使用下面的线
Zc_withouthOutliers = cellfun (@ (x) cellfun (@ (x) rmoutliers([真正的(x)图像放大(x))), x,“UniformOutput”假),佐“Unif”,0);
然而,事实证明,数据流的长度是和以前的一样,这意味着没有离群值。但我知道这不是一个案例。
任何想法?
明星黾
2021年9月3日
不幸的是,没有,因为我还猜测你
“佐”
是多少。
可能:
Z(: 1) =复杂(randn(12日1),randn (12,1));
Z(:, 2) =复杂(randn(12日1),randn (12,1));
Z(:, 3) =复杂(randn(12日1),randn (1))
Z =
0.2265 - 1.6841我-0.5703 + 0.6258 + 1.2717 0.6599 1.3231 - 0.0957我0.3498 + 0.5286我-1.5460 - 1.3338 0.0539 - 1.6916 0.4286 - 0.7961我-2.0087 + 1.0217 0.4872 - 0.1514 -0.3148 - 0.2921 -0.0742 - 1.0811 -2.0700 - 0.4709我-2.7228 + 0.4142我-0.4754 + 1.0667 + 0.3233 0.7001我-1.2523 - 1.7435 -0.4367 - 0.5155 0.6550 - 0.8458我0.1090 - 1.1173 0.7603 - 2.1107 0.1041 - -0.1638 0.7291我-0.2754 + 0.4496 + 1.2572我0.0799 - 1.0766 -1.0184 - 1.9236 -0.6640 -3.4014 + 0.5304 + 0.1175我0.9365 - 0.6210我-1.3426 + 0.8949 2.6220 - 0.4183 0.4284 - 1.8616 0.4942 - 0.1083 -0.4524 - 0.6606我0.2951 + 0.0146我-2.0342 - 1.4751
佐= {mat2cell (Z,大小(Z, 1),(1,尺寸(Z, 2)))}这样的%
佐=1×1单元阵列
{1×3细胞}
%查询= isoutlier([真实([佐{:}])图像放大((佐{:}))))
佐= cellfun (@ (x) rmoutliers([真正的(x)图像放大(x))),(佐{}):“Unif”,0)% < -试试这个
佐=1×3单元阵列
{10×2双}{11×2双}{12×2双}
注意:
的观点是
(佐{}):
现在。看看加方括号帮助。
。
苏珊
2021年9月3日
编辑:苏珊
2021年9月3日
谢谢,现在工作!我真的很感激你的帮助!和遗憾,我还没有发布的数据集,因为它是一个巨大的数据集。但你猜对我的数据集的结构是正确的。
我保证这是我最后一个问题。你能告诉我我怎样才能找到assocated时间向量为每个这些流?时间数据的格式设置为数据流集(佐),即,12*190 cell each cell contains 1*336 cell, and each of these 1*336 cells contain a matrix of 600-by-1. As you mentioned earlier " If they have associated time vectors, that will need to be considered and adjusted using the
isoutlier
为每一列函数,这样适当的时间也被删除。“你能告诉我我能怎么做呢?
很多谢谢提前
明星黾
2021年9月3日
谢谢你!
不要担心问问题。不管它们是什么,我将尽我所能提供有用的答案。
”
你能告诉我我能怎么做呢?
”
可能最简单的方法是这样的
Z(: 1) =复杂(randn(12日1),randn (12,1));
Z(:, 2) =复杂(randn(12日1),randn (12,1));
Z(:, 3) =复杂(randn(12日1),randn (1))
Z =
我-0.0037 - 0.0718 -0.5906 - 0.4982 -0.2926 - 1.4403我-0.0491 + 0.3881 -1.1934 - 0.6266 1.6255 - 0.6844我-0.5010 + 0.8418 -0.3764 - 0.5512 -0.6346 + 0.5429我-0.9482 - 2.0047 0.7089 1.5427 + 1.0627 + 0.3901我-0.6989 - 1.0210我-1.4086 - 0.3650 1.3917 - 1.6212 1.3108 0.4960 + 1.1715 + 1.4088我-1.3572 + 0.0194 -0.4169 0.1213 + 0.0061 + 0.7410我-0.2981 - 0.3166我0.1113 + 0.7298 -0.0477 - 0.6290 0.4736 + 0.2349我-0.9848 - 0.3802 0.5130 - 1.9157 -0.3988 -0.0238 + 1.2133 + 0.4671我2.9185 - 0.1249我-0.5662 + 0.7225 -0.0214 - 0.2302 -0.1938 - 0.2917 -1.0284 - 0.4458 -0.0793 - 0.4082我2.1012 + 0.4646我0.2128 - 0.6308
佐= {mat2cell (Z,大小(Z, 1),(1,尺寸(Z, 2)))}
佐=1×1单元阵列
{1×3细胞}
Outlierc = (cellfun (@ (x) isoutlier([真正的(x)图像放大(x))),(佐{}):“Unif”,0))%发现离群值
Outlierc =1×3单元阵列
{12×2逻辑}{12×2逻辑}{12×2逻辑}
Lv = ~任何([Outlierc {:}), 2)%创建逻辑列向量
Lv =12×1逻辑数组
1 1 1 1 0 0 1 1 0 1
佐= cellfun (@ (x) rmoutliers([真正的(x)图像放大(x))),(佐{}):“Unif”,0)
佐=1×3单元阵列
{11×2双}{10×2双}{12×2双}
然后使用
“Lv”
根据需要与整个数组或选定的列(在该实例计算为每一列)来解决向量以及数据的时间。它将返回
真正的
或
1
“好”数据(如写在这里),所以使用引用整个数组(或个人列)以及
“时间”
向量将返回相应的良好的数据。
所以,如果
“时间”
是一个列向量,
t =时间(Lv);
将是一个向量的对应行没有离群值。
实验用它来确定你想要它做的事。
。
苏珊
2021年9月3日
谢谢你这么多!你不知道我有多感激你的帮助。
我underestood逻辑。然而,我有一个问题。假设例外在佐{1 1}{1},发生在第五行,和离群值佐{1},{1,2}发生于6日和9日行。
如果我申请t =时间(Lv)会导致
大小(t {1}, {1 1}) = 9-by-1%,而应该11-by-1
大小(t {1}, {1,2}) = 9-by-1%,而应该10-by-1
大小(t {1}, {1,3}) = 9-by-1%,而应该12-by-1
我说的对吗?我要找是找相关的第一个“t”向量第一佐复杂信号(Z)的第一列,所以他们必须有相同的长度,对吧?
明星黾
2021年9月3日
像往常一样,这是我的荣幸!
你需要决定你想要的方法。
如果你想要评估的列,然后创建一个不同的
“Lv”
对于每一列,包括相关的时间向量。
如果你要考虑整个矩阵,然后创建
“Lv”
矩阵,从那里开始,包括时间voector行,最后,只有变量和时间向量的矩阵的列都没有异常值将您最终将使用的矩阵。
你将不得不决定如何分析你的数据。统计方面的考虑可能是重要的(取决于你所做的),所以咨询统计学家可能会帮助你决定。
。
答案(1)
约翰D 'Errico
2021年8月27日
编辑:约翰D 'Errico
2021年8月27日
它是有效的实部和虚部分别工作?可能,不过你知道的数据比我们更好。异常的原因是什么?如果有问题真正的组件的一个数字,为什么它会不会影响虚部吗?
我将假设您可以简单地使用实部和虚部分别。但是你不能删除一个异类。你需要改正它。所以你可能会决定应用工具filloutliers arrray的每一列,分别到现实和复杂的部分,把它们作为简单的独立信号。当然这可能并不是完全有效的。但是你能做到吗?当然可以。
您将使用一个循环矩阵的列。喜欢的东西:
为印第安纳州= 1:ncols
R = filloutliers(真正的(M(:,印第安纳州)),“gesd”);
我= filloutliers(图像放大(M(:,印第安纳州)),“gesd”);
米(:,印第安纳州)=复杂的(R, I);
结束
你需要寻找什么在你的数据当然效果最好。
一个错误发生
无法完成的行动,因为页面所做的更改。重新加载页面更新状态。
你也可以从下面的列表中选择一个网站
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。