簡體   English   中英

如何計算 Python 中曲線尖峰(干擾)下的面積

[英]How to calculate the areas under the spikes (interference) of a curve in Python

我想做什么

我得到了一個帶有頻率 (x) 的np.array和一個帶有信號強度/功率譜密度 (y) 的np.array 沒有任何噪聲的信號看起來類似於對數曲線,但可能具有略微不同的形式,具體取決於數據。

該信號具有不同的干擾,這些干擾表現為尖峰,其中一些尖峰相互重疊。 我確實需要計算每個尖峰下的面積。 如果它們重疊,我需要單獨計算它們每個的面積。 (理想情況下調整兩個重疊尖峰的建設性干擾,或拆分尖峰相交的區域。)

到目前為止我已經嘗試過:

我試圖獲得每個尖峰的峰值和“底部”寬度。 然而,如果尖峰太寬或相互重疊,這通常會失敗。

我曾嘗試使用不同的曲線擬合算法或濾波器來獲得表示無干擾信號的第二條曲線,我想將這條曲線疊加在原始曲線下方,並嘗試以這種方式獲得尖峰下的區域。 但是我沒有得到一條看起來與沒有干擾的原始信號相似的曲線。

示例曲線

在圖像中,您可以看到data曲線和model1曲線,這是我嘗試擬合data曲線的曲線。 我畫了一條黃色曲線,這是本例中干凈信號的樣子。 我還將其中一個尖峰區域塗成粉紅色,代表我需要計算的區域之一。

在此處輸入圖像描述

我的數據是什么樣的

頻率數組看起來與此類似(從 0.5 開始):

  [ 0.5 ...  79.5  80.   80.5  81.   81.5  82.   82.5  83.   83.5  84.
  84.5  85.   85.5  86.   86.5  87.   87.5  88.   88.5  89.   89.5  90.
  90.5  91.   91.5  92.   92.5  93.   93.5  94.   94.5  95.   95.5  96.
  96.5  97.   97.5  98.   98.5  99.   99.5 100. ]

信號數組看起來像這樣,與頻率數組的長度相同。

[6.83248573e-27 6.38424451e-27 4.40532611e-27 2.46641238e-27
 2.79056227e-27 1.91667602e-27 2.01585530e-27 2.81595644e-27
 1.63137469e-27 2.36510624e-27 1.76637075e-27 1.42336105e-27
 1.94134643e-27 1.63569180e-27 1.92916964e-27 1.74853657e-27
 1.70866416e-27 1.82414861e-27 1.99505505e-27 3.18429811e-27
 5.40618755e-27 6.03726511e-27 4.78220246e-27 3.56407711e-27
 2.82165848e-27 2.21870589e-27 2.08558649e-27 2.05153813e-27
 2.26220532e-27 2.51639647e-27 2.72401400e-27 3.03959512e-27
 3.20637304e-27 3.25169369e-27 3.14399482e-27 3.22505547e-27
 3.04244374e-27 3.05644526e-27 2.75377037e-27 2.66384664e-27
 2.54582065e-27 2.45122798e-27 2.33501355e-27 2.39223261e-27
 2.31744742e-27 2.15909503e-27 2.13473052e-27 1.97037169e-27
 1.66287056e-27 1.39650886e-27 1.35749479e-27 1.36925484e-27
 1.23080761e-27 1.18806584e-27 1.00880561e-27 8.49857372e-28
 8.69180125e-28 8.00455124e-28 7.64146873e-28 7.44351180e-28
 6.12306196e-28 5.61151389e-28 5.61148340e-28 5.29198214e-28
 4.65031278e-28 4.39371596e-28 3.87900481e-28 3.66667907e-28
 3.19346926e-28 2.70416144e-28 2.55537042e-28 2.52633398e-28
 2.46481657e-28 2.17053812e-28 2.01982726e-28 1.90483387e-28
 1.61632370e-28 1.55358436e-28 1.59321060e-28 1.60793279e-28
 1.52695766e-28 1.55288957e-28 1.59405042e-28 1.53165367e-28
 1.36278544e-28 1.57511344e-28 1.36641270e-28 1.33813492e-28
 1.30800335e-28 1.32748995e-28 1.30747468e-28 1.16701156e-28
 1.12717963e-28 1.22763995e-28 1.17056892e-28 1.13689662e-28
 1.06267063e-28 1.18968941e-28 1.12967908e-28 ...            ]

問題?

如果您需要進一步說明或代碼示例,請告訴我。 我沒有包括更多的代碼示例,因為我嘗試過的都沒有給出正確的結果。

我認為這些鏈接會有所幫助

https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.cumulative_trapezoid.html

https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.simpson.html

對我來說,大部分看起來像是一個數字積分。

從數學上講,每個 delta x 都有 delta y,我們可以估計整個區域,然后從黃色區域中減去。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM