我有一個信號,我想在我的信號中添加一個高原(展平),以便找到當地的最大值。更新:用本地最大值可視化信號
我在這裏提供了一個例子,使我的問題更易於理解,因爲我的真實數據的大小是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點達到高峯,所以我想在4.9(5-0.1)壓扁。 然後在第二個循環中檢查y軸上局部最大值處的(locs-0.2)的效果。
想要對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')
修改代碼喬恩的建議壓扁
喬恩給了一個想法之前和最大值後再考慮價值觀,使他們相同的最大值,以使寬度可控。
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的小數點。所以我的信號被採樣和量化。
通過做內插法,它可以很好地使信號平坦化,但不幸的是它消除了原始信號的量化,而且內插法使得該過程非常緩慢。
是否有任何其他方式在局部最大值點剪切信號?
我會很感激你的幫助,因爲我在這個階段無能爲力。
我試過並測試過約翰提供的代碼。它運作良好,但問題與我的數據。 IT包含量化步驟。
要點:
- 我的原始數據在步驟或量化。
- 它包含大小爲0.001的小數點,因此通過對x軸和y軸進行插值來完成。因此,我的數據和時間包含差值爲0.001的點。
- 通過做插值它工作完美,但問題是,它正在消除信號的量化。
如果有人幫助我,我會非常感激你。
請求:
如果你有疑問,請向,所以我就可以讓我更好的查詢。
你想如何壓平它?因爲第一個明顯的答案是'A(A> mymax)= mymax' –
非常感謝Ander Birgui。所以在我的情況下,對於上面的例子,我得到pks在5,7,4意味着局部極大值,所以現在我想要的是讓我的信號平坦意味着在本地極大值處的直線5,7,4達到某個值意味着我的信號得到當它看到局部最大值時,在x軸上平展2點。請看附圖。我希望它能夠澄清我的觀點,這也是我也希望將窗口應用於信號的原因,以便我可以清楚地看到展平效果。 – Peter
在上面附圖中綠色信號顯示扁平化的效果,這就是我想要處理的信號 – Peter