我有一个信号,我想在我的信号中添加一个平台(Flattening),我找到了局部最大值。
我在这里提供了一个示例,使我的问题更容易理解,因为我的实际数据的大小是1x1666520,因此我无法在此处上传整个文件。
我想做什么和我期待什么:
•我想让信号平坦,我们会在信号中找到局部最大值。
•我想对信号应用窗口,以显示在一定范围内展平的效果,以及更深入和清晰地显示我的信号。我也想控制窗口的大小和宽度。
以下是输出外观的草图
我在第5,1,7,8,4点有本地最大值。
当我处于局部最大值时,我希望我的信号变平(剪辑)并成为该点周围的直线。
我也想控制展平的宽度。让我们假设宽度为0.2,正如我在手绘草图中提到的那样。如果是这样,我想将其设为0.3,所以我还需要控制剪裁部分的宽度。
更清晰地更新了详细信息:
我在做什么:
我有2个信号。传感器的第一个参考值和第二个测量信号。 (我从1个传感器获取了6个不同的测量信号)。
测得的信号有延迟,偏移,平坦化。
我希望通过在信号中加入延迟,偏移和扁平化来使我的参考信号与我的测量信号相似,以满足我的需求。
为了在我的原始信号中进行展平,我观察到在每个局部最大值处,我的信号变平,并且在每次测量变平时,它都是不同的。
所以我想在每个局部最大值处使信号平坦。
Y轴:展平高度(我想控制y轴展平的高度)
意味着我想制作一个包含不同y轴平坦值的循环,例如,在第一次尝试中,我想要给出平坦度为0.1,然后在第二次尝试中,想要给局部最大值0.2平坦化并观察其效果。 总之,当我有局部最大值时,我想在y轴的最大值上给出(locs-0.1)的平坦化。
意味着如果我在5点达到峰值,那么我想在(5-0.1)4.9处进行压扁。 然后在第二个循环中想要检查(locs-0.2)在y轴上的局部最大值中的效果。
想要为0.1到0.9之间的值应用循环。
X轴:展平宽度(我想改变展平的宽度)
意味着我想通过给出一系列值来观察变平宽度变化的影响。这可以通过循环来完成。
总之,当我有局部最大值时,我想在x轴的最大值上给出0.1的展平宽度。
然后在第二个循环中想要检查x轴上局部最大值0.2宽度变化的影响。
原始数据详情:
在我的原始数据中,x轴包含小数值,因此不想插入数据。
在我的原始数据中,y轴还包含小数值。
我的实际数据大小为1x1666520。
原始信号看起来像
窗口效果:
窗口只是观察在局部最大值位置发生的变化行为,如果展平宽度为0.1,那么窗口约为0.2。
很抱歉,我仍然无法提供一个很好的示例数据来解释我在MATLAB中的具体情况,因此我附上了一幅手工制作的草图。 我希望我有足够的能力使我的问题清楚。
代码:
t = 1:25 ;
A = [1 0 1 2 3 5 0 1 0 0 0 2 3 6 7 0 0 8 0 1 1 2 3 4 2];
[pks,locs] = findpeaks(A)
win1 = hamming(numel(A))';
xw1 = win1.*A;
figure
plot(t,xw1,'r',t,A,'b')
关于建议Jon进行展平的修改代码
Jon提出了一个想法,即考虑maxima之前和之后的值,并使它们与maxima相同,以使宽度可控。
t = 1:25 ;
A = [1 0 1 2 3 5 0 1 0 0 0 2 3 6 7 0 0 8 0 1 1 2 3 4 2];
[pks,locs] = findpeaks(A)
% A(A>locs)=locs
figure
plot(t,A,'b')
A(locs+1) = A(locs);
A(locs-1) = A(locs);
hold all;plot(t,A,'r');
请查看信号中原始信号和量化步骤的附图。其实我很抱歉我无法上传整个数据文件。
实际上我的原始信号包含步长为0.001的小数点。 所以我的信号被采样和量化。
通过插值,它可以完美地对信号进行平坦处理,但遗憾的是它正在消除原始信号的量化,并且插值也使得该过程非常缓慢。
还有其他方法可以在局部最大值处剪切信号吗?
我将非常感谢你的帮助,因为我在这个阶段无能为力。
我已经尝试并测试了约翰提供的代码。它工作得很好,但问题在于我的数据。它包含量化步骤。
要点:
如果有人帮助我,我将非常感激你。
请求:
如果您有任何问题,请询问,以便我能够更好地查询。
答案 0 :(得分:2)
不确定您要查找的内容,尤其是窗口。对于在x轴上平坦到" 2点"也许使局部最大值与前一个值相同?
继续你的代码:
library(tm)
library(XML)
library(SnowballC)
doc<-VCorpus(VectorSource(readLines(file.choose())))
doc <- tm_map(doc, stripWhitespace)
doc <- tm_map(doc, stemDocument)
doc<-tm_map(doc, content_transformer(tolower))
doc<-tm_map(doc, removeWords, stopwords("english"))
myStopwords <- c(stopwords("english"), "can", "will")
myStopwords <- setdiff(myStopwords, c("will","can"))
doc <- tm_map(doc, removeWords, myStopwords)
doc<-tm_map(doc,removeNumbers)
#If you omit this step, the error will not appear in "TermDocumentMatrix".
doc <- tm_map(doc, gsub, pattern = "buy", replacement = "bought")
doc <- TermDocumentMatrix(doc, control=list(removePunctuation=T))
修改强> 整个代码:
figure
plot(t,A,'b')
A(locs) = A(locs-1);
hold all;plot(t,A,'r');