문제

우리는 데이터 수집 카드를 사용하여 신호를 최고치로 증가시킨 다음 원래 값 근처로 떨어지는 장치에서 판독값을 가져옵니다.최고 값을 찾기 위해 현재 배열에서 가장 높은 판독값을 검색하고 인덱스를 사용하여 계산에 사용되는 최고 값의 타이밍을 결정합니다.

가장 높은 값이 우리가 찾고 있는 피크인 경우에는 잘 작동하지만 장치가 올바르게 작동하지 않으면 초기 피크보다 높을 수 있는 두 번째 피크를 볼 수 있습니다.우리는 90초 동안 16개 장치에서 초당 10개의 판독값을 얻습니다.

나의 초기 생각은 이전 및 다음 지점이 현재보다 작은지 확인하기 위해 판독값을 순환하여 피크를 찾고 피크 배열을 구성하는 것입니다.시스템의 노이즈를 허용하기 위해 현재 위치 양쪽에 있는 여러 지점의 평균을 살펴봐야 할 수도 있습니다.이것이 진행하는 가장 좋은 방법입니까, 아니면 더 나은 기술이 있습니까?


우리는 LabVIEW를 사용하고 있으며 다음을 확인했습니다. LAVA 포럼 흥미로운 예가 많이 있습니다.이는 테스트 소프트웨어의 일부이며 비표준 VI 라이브러리를 너무 많이 사용하지 않으려고 노력하고 있으므로 특정 코드보다는 관련된 프로세스/알고리즘에 대한 피드백을 원했습니다.

도움이 되었습니까?

해결책

신호 평균화를 시도해 볼 수 있습니다.각 포인트에 대해 주변 3개 이상의 포인트와 함께 값의 평균을 구합니다.노이즈 블립이 크다면 이 방법도 도움이 되지 않을 수 있습니다.

이것이 언어에 구애받지 않는다는 것을 알고 있지만 LabView를 사용하고 있다고 추측하면 평활화 및 노이즈 감소를 수행하는 데 사용할 수 있는 LabView와 함께 제공되는 사전 패키지된 신호 처리 VI가 많이 있습니다.그만큼 NI 포럼 이런 종류의 일에 대해 더 전문적인 도움을 받을 수 있는 좋은 곳입니다.

다른 팁

고전적인 피크 감지 방법은 무수히 많고, 어느 것이든 작동할 수 있습니다.특히 데이터 품질의 경계가 무엇인지 확인해야 합니다.기본 설명은 다음과 같습니다.

  1. 데이터의 두 지점 사이에서 (x(0), y(0)) 그리고 (x(n), y(n)), 합산하다 y(i + 1) - y(i) ~을 위한 0 <= i < n 그리고 이것을 부르세요 T ("여행") 및 설정 R ("상승") ~로 y(n) - y(0) + k 적당히 작은 경우 k. T/R > 1 피크를 나타냅니다.이는 소음으로 인해 큰 이동이 발생하지 않거나 소음이 기본 곡선 모양 주위에 대칭으로 분포되는 경우 괜찮습니다.귀하의 응용 분야에 대해 주어진 임계값보다 높은 점수로 가장 빠른 피크를 수락하거나 더 흥미로운 속성을 찾기 위해 상승 값당 이동 곡선을 분석하십시오.

  2. 일치하는 필터를 사용하여 표준 피크 모양과의 유사성 점수를 매깁니다. (기본적으로 일부 모양에 대해 정규화된 내적을 사용하여 유사성의 코사인 메트릭을 얻습니다.)

  3. 표준 피크 모양에 대해 디콘볼루션하고 높은 값을 확인합니다(간단한 계측 출력의 경우 2가 노이즈에 덜 민감한 경우가 종종 있습니다).

  4. 데이터를 평활화하고 등간격 점의 삼중항을 확인합니다. x0 < x1 < x2, y1 > 0.5 * (y0 + y2), 또는 다음과 같이 유클리드 거리를 확인하세요. D((x0, y0), (x1, y1)) + D((x1, y1), (x2, y2)) > D((x0, y0),(x2, y2)), 이는 삼각형 부등식에 의존합니다.간단한 비율을 사용하면 다시 점수 매기기 메커니즘이 제공됩니다.

  5. 매우 간단한 2-가우스 혼합 모델을 데이터에 맞춥니다(예를 들어 Numerical Recipes에는 미리 만들어진 멋진 코드 덩어리가 있습니다).더 이른 정점을 찍으세요.이는 겹치는 피크를 올바르게 처리합니다.

  6. 데이터에서 단순 가우스, 코시, 포아송 또는 보유 곡선과 가장 잘 일치하는 항목을 찾습니다.넓은 범위에 걸쳐 이 곡선을 평가하고 피크 위치를 확인한 후 데이터 복사본에서 이를 뺍니다.반복하다.모델 매개변수(표준편차일 수 있지만 일부 응용 프로그램에서는 첨도 또는 기타 기능에 관심이 있을 수 있음)가 일부 기준을 충족하는 가장 빠른 피크를 선택합니다.데이터에서 피크를 뺄 때 남겨지는 아티팩트에 주의하십시오.최고의 일치는 위의 #2에서 제안된 일치 점수 종류에 따라 결정될 수 있습니다.

나는 전에 당신이 하고 있는 일을 해본 적이 있습니다:DNA 서열 데이터에서 피크 찾기, 측정된 곡선에서 추정된 도함수에서 피크 찾기, 히스토그램에서 피크 찾기.

적절한 기준 설정에 주의 깊게 참석하시기 바랍니다.위너 필터링이나 기타 필터링 또는 간단한 히스토그램 분석은 노이즈가 있는 경우 기준선을 쉽게 찾을 수 있는 방법인 경우가 많습니다.

마지막으로, 데이터에 일반적으로 잡음이 많고 참조되지 않은 단일 종단 출력(또는 차등이 아닌 참조)으로 카드에서 데이터를 가져오는 경우, 그리고 각 데이터 포인트에 대한 많은 관측값의 평균을 구하는 경우 해당 항목을 정렬해 보세요. 관찰하고 첫 번째와 마지막 사분위수를 버리고 남은 것을 평균화합니다.정말 유용할 수 있는 이상치 제거 전술이 많이 있습니다.

이 문제는 어느 정도 자세히 연구되었습니다.

매우 최신의 구현 세트가 있습니다. TSpectrum* 클래스 뿌리 (핵/입자 물리학 분석 도구).코드는 1차원에서 3차원 데이터까지 작동합니다.

ROOT 소스 코드를 사용할 수 있으므로 원하는 경우 이 구현을 가져올 수 있습니다.

로부터 T스펙트럼 수업 문서:

이 수업에 사용된 알고리즘은 다음 참고 자료에 게시되어 있습니다.

[1] M.Morhac 외:다차원적인 일치 감마선 스펙트럼을위한 배경 제거 방법.물리 연구의 핵기구 및 방법 A 401 (1997) 113-132.

[2] M.Morhac 외:효율적인 1 차원 및 2 차원 금 디컨 볼 루션 및 감마선 스펙트럼 분해에 대한 적용.물리 연구의 핵기구 및 방법 401 (1997) 385-408.

[3] M.Morhac 외:다차원적인 일치 감마선 스펙트럼에서 피크 식별.연구 물리학 A 443 (2000), 108-125의 핵기구 및 방법.

논문은 NIM 온라인 구독이 없는 분들을 위해 수업 문서에서 링크되었습니다.


수행되는 작업의 간략한 버전은 노이즈를 제거하기 위해 히스토그램을 평탄화한 다음 평탄화된 히스토그램에서 무차별 대입 방식으로 로컬 최대값을 감지하는 것입니다.

나는 이 스레드에 다음과 같은 알고리즘을 기여하고 싶습니다. 나는 나 자신을 발전시켰다:

이는 의 원리에 기초합니다. 분산:새로운 데이터 포인트가 이동 평균으로부터 주어진 x 표준 편차만큼 떨어져 있으면 알고리즘은 신호를 보냅니다(또한 z-점수).알고리즘은 다음을 구성하기 때문에 매우 강력합니다. 분리된 신호가 임계값을 손상시키지 않도록 이동 평균 및 편차.따라서 미래 신호는 이전 신호의 양에 관계없이 거의 동일한 정확도로 식별됩니다.알고리즘은 3가지 입력을 사용합니다. lag = the lag of the moving window, threshold = the z-score at which the algorithm signals 그리고 influence = the influence (between 0 and 1) of new signals on the mean and standard deviation.예를 들어, lag of 5에서는 마지막 5개의 관측치를 사용하여 데이터를 평활화합니다.ㅏ threshold 3.5는 데이터 포인트가 이동 평균에서 3.5 표준 편차 떨어져 있으면 신호를 보냅니다.그리고 influence 0.5는 신호를 제공합니다 일반 데이터 포인트가 미치는 영향.마찬가지로, influence 0이면 새 임계값을 다시 계산하기 위해 신호를 완전히 무시합니다.따라서 영향력이 0인 것이 가장 강력한 옵션입니다.

다음과 같이 작동합니다:

의사코드

# Let y be a vector of timeseries data of at least length lag+2
# Let mean() be a function that calculates the mean
# Let std() be a function that calculates the standard deviaton
# Let absolute() be the absolute value function

# Settings (the ones below are examples: choose what is best for your data)
set lag to 5;          # lag 5 for the smoothing functions
set threshold to 3.5;  # 3.5 standard deviations for signal
set influence to 0.5;  # between 0 and 1, where 1 is normal influence, 0.5 is half

# Initialise variables
set signals to vector 0,...,0 of length of y;   # Initialise signal results
set filteredY to y(1,...,lag)                   # Initialise filtered series
set avgFilter to null;                          # Initialise average filter
set stdFilter to null;                          # Initialise std. filter
set avgFilter(lag) to mean(y(1,...,lag));       # Initialise first value
set stdFilter(lag) to std(y(1,...,lag));        # Initialise first value

for i=lag+1,...,t do
  if absolute(y(i) - avgFilter(i-1)) > threshold*stdFilter(i-1) then
    if y(i) > avgFilter(i-1)
      set signals(i) to +1;                     # Positive signal
    else
      set signals(i) to -1;                     # Negative signal
    end
    # Adjust the filters
    set filteredY(i) to influence*y(i) + (1-influence)*filteredY(i-1);
    set avgFilter(i) to mean(filteredY(i-lag,i),lag);
    set stdFilter(i) to std(filteredY(i-lag,i),lag);
  else
    set signals(i) to 0;                        # No signal
    # Adjust the filters
    set filteredY(i) to y(i);
    set avgFilter(i) to mean(filteredY(i-lag,i),lag);
    set stdFilter(i) to std(filteredY(i-lag,i),lag);
  end
end

데모

Demonstration of robust thresholding algorithm

> 원래 답변

이 방법은 기본적으로 David Marr의 책 "Vision"에 나와 있습니다.

가우시안은 예상되는 피크 폭으로 신호를 흐리게 합니다.이렇게 하면 노이즈 스파이크가 제거되고 위상 데이터가 손상되지 않습니다.

그런 다음 가장자리를 감지합니다(LOG가 수행함).

그런 다음 가장자리는 피처(예: 피크)의 가장자리였습니다.모서리 사이에서 피크를 찾고 크기별로 피크를 정렬하면 작업이 완료됩니다.

나는 이것에 대한 변형을 사용해 보았고 매우 잘 작동했습니다.

내 생각에는 당신이 원하는 것 같아요 상호 상관 예상되는 모범적인 신호로 신호를 보냅니다.하지만 신호처리를 공부한 지 너무 오래됐고 그때도 크게 주목하지 않았습니다.

나는 계측에 대해 잘 모르기 때문에 완전히 비실용적일 수 있지만 다시 한 번 도움이 되는 다른 방향이 될 수 있습니다.판독이 실패할 수 있는 방법을 알고 있고 그러한 실패가 발생한 피크 사이에 특정 간격이 있는 경우 각 간격에서 경사하강법을 수행해 보는 것은 어떨까요?하강을 통해 이전에 검색한 지역으로 다시 돌아오게 되면 해당 지역을 포기할 수 있습니다.샘플링된 표면의 모양에 따라 검색보다 더 빠르게 피크를 찾는 데 도움이 될 수도 있습니다.

원하는 피크와 원하지 않는 두 번째 피크 사이에 질적인 차이가 있습니까?두 피크가 모두 "날카로운" 경우 - 즉짧은 시간 - 주파수 영역에서 신호를 볼 때(FFT를 수행하여) 대부분의 대역에서 에너지를 얻습니다.그러나 "양호한" 피크에 "나쁜" 피크에 존재하지 않는 주파수에 에너지가 안정적으로 존재하거나 그 반대의 경우 자동으로 그런 방식으로 차별화할 수 있습니다.

일부를 적용할 수 있습니다. 표준 편차 논리에 맞게 x%가 넘는 피크를 확인하세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top