주요 콘텐츠

findpeaks

국소 최댓값 구하기

설명

pks = findpeaks(y)는 입력 신호 벡터 y의 국소 최댓값(피크)을 가진 벡터를 반환합니다. 국소 피크는 두 인접하는 샘플보다 큰 데이터 샘플이거나 Inf 값과 동일한 데이터 샘플입니다. 이 함수는 피크가 발생하는 순서대로 출력하며 Inf가 아닌 신호 끝점을 제외합니다. 피크가 평탄하면 이 함수는 가장 작은 인덱스를 가진 점만 반환합니다.

예제

[pks,locs] = findpeaks(y)는 피크가 나타나는 지점의 인덱스도 추가로 반환합니다.

예제

[pks,locs,w,p] = findpeaks(y)는 추가로 벡터 w로 피크의 폭을 반환하고 벡터 p로 피크의 돌출부를 반환합니다.

예제

[___] = findpeaks(y,x)x를 위치 벡터로 지정하고 위에 열거된 구문에 나와 있는 출력 인수 중 하나를 반환합니다. locswx의 값으로 표현됩니다.

예제

[___] = findpeaks(y,Fs)는 데이터의 샘플 레이트 Fs를 지정합니다. 이 함수는 y의 첫 번째 샘플을 시간 0에서 가져온 것으로 간주합니다. locsw는 시간 단위로 변환됩니다.

예제

[___] = findpeaks(___,Name=Value)는 위에 열거된 구문에 나와 있는 입력 인수 중 하나와 함께 이름-값 인수를 사용하여 옵션을 지정합니다.

예제

findpeaks(___)(출력 인수 없음)는 신호를 플로팅하고 피크 값을 겹칩니다.

예제

예제

모두 축소

3개의 피크를 갖는 벡터를 정의합니다.

data = [25 8 15 5 6 10 10 3 1 20 7];

국소 최댓값을 구합니다. findpeaks 함수는 피크가 발생하는 순서대로 반환합니다. data의 양 끝점에는 왼쪽 또는 오른쪽 이웃이 없어 비교할 수 없기 때문에, 피크를 찾을 때 끝점을 포함하지 않습니다.

pks = findpeaks(data)
pks = 1×3

    15    10    20

출력 인수 없이 findpeaks를 사용하여 피크를 표시합니다. 평탄한 피크의 경우, 이 함수는 가장 작은 인덱스를 갖는 점만 강조 표시합니다.

findpeaks(data)

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

가우스 곡선의 합으로 구성된 신호를 생성합니다. 각 곡선의 위치, 높이, 폭을 지정합니다.

x = linspace(0,1,1000);

Pos = [1 2 3 5 7 8]'/10;
Hgt = [3 4 4 2 2 3]';
Wdt = [2 6 3 3 4 6]'/100;

y = sum(Hgt.*(exp(-((x-Pos)./Wdt).^2)),1);

findpeaks를 디폴트 설정과 함께 사용하여 신호의 피크와 해당 피크의 위치를 찾습니다.

[pks,locs] = findpeaks(y,x);

findpeaks를 사용하여 피크를 플로팅합니다. 각 피크에 레이블을 지정합니다.

findpeaks(y,x)
text(locs+.02,pks,num2str((1:numel(pks))'))

Figure contains an axes object. The axes object contains 8 objects of type line, text. One or more of the lines displays its values using only markers

가장 높은 피크부터 가장 짧은 피크로 피크를 정렬합니다.

[psor,lsor] = findpeaks(y,x,SortStr="descend");
findpeaks(y,x)
text(lsor+.02,psor,num2str((1:numel(psor))'))

Figure contains an axes object. The axes object contains 8 objects of type line, text. One or more of the lines displays its values using only markers

한 주기 전체의 코사인 위에 놓인 가우스 곡선의 합으로 구성된 신호를 생성합니다. 각 곡선의 위치, 높이, 폭을 지정합니다.

x = linspace(0,1,1000);

base = 4*cos(2*pi*x);

Pos = [1 2 3 5 7 8]'/10;
Hgt = [3 7 5 5 4 5]';
Wdt = [1 3 3 4 2 3]'/100;

y = sum(Hgt.*(exp(-((x-Pos)./Wdt).^2)),1) + base;

findpeaks를 사용하여 돌출부가 최소 4인 피크를 찾아 플로팅합니다. 가장 높은 피크와 가장 낮은 피크만 최소 돌출부 조건을 충족합니다.

[~,locs4,~,proms4] = findpeaks(y,x,MinPeakProminence=4)
locs4 = 1×2

    0.1982    0.4995

proms4 = 1×2

    5.5773    4.4171

findpeaks(y,x,MinPeakProminence=4,Annotate="extents")

Figure contains an axes object. The axes object contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent signal, peak, prominence, width (half-prominence).

모든 피크의 돌출부 절반에서의 위치, 돌출부, 폭을 표시합니다. 두 번째 피크와 네 번째 피크가 4보다 크거나 같은 돌출부를 가진 피크입니다.

[~,locs,widths,proms] = findpeaks(y,x)
locs = 1×6

    0.1001    0.1982    0.2983    0.4995    0.7017    0.8018

widths = 1×6

    0.0154    0.0431    0.0377    0.0625    0.0274    0.0409

proms = 1×6

    2.6816    5.5773    3.1448    4.4171    2.9191    3.6363

태양 흑점 평균 개수 데이터에서 피크를 추출하고 평균 흑점 주기를 추정합니다.

1700년부터 1987년까지 매년 관측된 태양 흑점의 평균 개수가 포함된 파일 sunspot.dat를 불러옵니다. 태양 흑점 수를 연도별로 플로팅하고 그 위에 최댓값을 표시합니다. 1855년에서 1920년 사이의 기간을 확대합니다.

load sunspot.dat

year = sunspot(:,1);
avSpots = sunspot(:,2);

findpeaks(avSpots,year)
xlabel("Year")
xlim([1855 1920])

Figure contains an axes object. The axes object with xlabel Year contains 2 objects of type line. One or more of the lines displays its values using only markers

태양 흑점은 주기적 현상입니다. 태양 흑점의 수는 대략 11년마다 피크에 도달한다고 알려져 있습니다.

피크 사이의 평균 간격을 구하여 주기 기간을 추정합니다. 먼저 최댓값이 아닌 피크를 무시하도록 합니다. 피크 간 간격이 6년보다 큰 경우만 허용하도록 제한합니다.

findpeaks(avSpots,year,MinPeakDistance=6)
xlabel("Year")
xlim([1855 1920])

Figure contains an axes object. The axes object with xlabel Year contains 2 objects of type line. One or more of the lines displays its values using only markers

연도 데이터를 사용하여 datetime형 배열을 생성합니다. 매년 춘분에 가까운 3월 20일에 태양 흑점의 수를 세었다고 가정합니다. 태양 흑점 개수가 피크에 도달한 연도를 구합니다. years 함수를 사용하여 duration형으로 최소 피크 간격을 지정합니다.

ty = datetime(year,3,20);
[pk,lk] = findpeaks(avSpots,ty,MinPeakDistance=years(6));
plot(ty,avSpots,lk,pk,"o")
xlabel("Year")

Figure contains an axes object. The axes object with xlabel Year contains 2 objects of type line. One or more of the lines displays its values using only markers

평균 태양 흑점 주기를 계산합니다. 추정된 평균 태양 흑점 주기가 알려진 11년 주기와 거의 일치합니다.

dttmCycle = years(mean(diff(lk)))
dttmCycle = 
10.9600

최소 또는 최대 피크 간 거리나 높이, 돌출부, 이웃과의 피크 차이 임계값 등과 같은 특정 특징 기준을 충족하는 피크를 찾을 수 있습니다. 피크 특징을 하나 또는 여러 개로 제한하려면 findpeaks를 사용하십시오.

오디오 신호에서 특징을 기준으로 피크 제한하기

7418Hz로 샘플링된 오디오 신호를 불러옵니다. 200개 샘플을 선택합니다.

load mtlb
select = mtlb(1001:1200);

오디오 신호에서 모든 피크를 찾아 강조 표시합니다. 그런 다음, 서로 최소 5ms 이상 떨어져 있는 피크를 찾아 강조 표시합니다. 최소 분리 간격 제약 조건을 적용하기 위해, findpeaks는 신호에서 가장 높은 피크를 선택하고 이로부터 5ms 이내에 있는 모든 피크를 제거합니다. 그런 다음 이 함수는 남아 있는 가장 높은 피크에 대해 절차를 반복하고, 더 이상 고려할 피크가 없을 때까지 이 작업을 반복합니다.

figure
tiledlayout("vertical")
nexttile
findpeaks(select,Fs)
legend("No Constraints",Location="southwest")
nexttile
lgn = @(txt) legend(txt,FontName="FixedWidth",Location="southwest");
findpeaks(select,Fs,MinPeakDistance=0.005)
lgn("MinPeakDistance")

Figure contains 2 axes objects. Axes object 1 contains 2 objects of type line. One or more of the lines displays its values using only markers This object represents No Constraints. Axes object 2 contains 2 objects of type line. One or more of the lines displays its values using only markers This object represents MinPeakDistance.

다음 각 제약 조건을 개별적으로 충족하는 피크를 찾아서 플로팅합니다.

  • 진폭이 최소 1V인 피크를 구합니다.

  • 인접 샘플보다 최소 1V 더 높은 피크를 구합니다.

  • 신호가 더 높은 값에 도달하기 전에 어느 쪽에서든 최소 1V 하강한 피크를 구합니다.

figure
tiledlayout("vertical")
nexttile
findpeaks(select,Fs,MinPeakHeight=1)
lgn("MinPeakHeight")
nexttile
findpeaks(select,Fs,Threshold=1)
lgn("Threshold")
nexttile
findpeaks(select,Fs,MinPeakProminence=1)
lgn("MinPeakProminence")

Figure contains 3 axes objects. Axes object 1 contains 2 objects of type line. One or more of the lines displays its values using only markers This object represents MinPeakHeight. Axes object 2 contains 2 objects of type line. One or more of the lines displays its values using only markers This object represents Threshold. Axes object 3 contains 2 objects of type line. One or more of the lines displays its values using only markers This object represents MinPeakProminence.

처프 신호에서 여러 피크 특징 제한하기

1000개 샘플로 구성된 처프 신호에서 폭이 2.5ms에서 4ms 사이인 모든 피크를 찾아 강조 표시합니다.

N = 1000;
x = sin(2*pi*(1:N)/N + (10*(1:N)/N).^2);
figure
findpeaks(x,Fs,Annotate="extents", ...
    MinPeakWidth=2.5e-3,MaxPeakWidth=4e-3)
title("Peaks with Multiple Constraints")

Figure contains an axes object. The axes object with title Peaks with Multiple Constraints contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent signal, peak, prominence, width (half-prominence).

데이터가 지정된 포화 지점보다 큰 경우 센서는 잘린 측정값을 반환할 수 있습니다. 이러한 극값을 무의미한 값으로 무시할 수도 있고 분석에 포함할 수도 있습니다.

분산이 0.1²인 백색 가우스 잡음에 포함되어 있는, 5Hz와 3Hz 주파수의 삼각 함수의 곱으로 구성된 신호를 생성합니다. 신호를 100Hz의 속도로 1초 동안 샘플링합니다. 재현 가능한 결과를 얻기 위해 난수 생성기를 재설정합니다.

rng("default")

Fs = 100;
t = 0:1/Fs:1;

s = sin(2*pi*5*t).*sin(2*pi*3*t) + randn(size(t))/10;

절댓값이 지정된 경계인 0.32보다 큰 모든 측정값을 잘라서 포화된 측정값을 합성합니다. 그런 다음 신호를 정규화하여 0.1에서 1 사이의 범위로 만듭니다. 정규화된 크기를 데시벨로 변환하고 결과를 플로팅합니다.

bnd = 0.32;
s(s>bnd) = bnd;
s(s<-bnd) = -bnd;
sNorm = 0.1+0.9*(s-min(s))/(max(s)-min(s));
sig = mag2db(sNorm);

plot(t,sig)
xlabel("Time (s)")
ylabel("Magnitude (dB)")
ylim([-25 5])

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Magnitude (dB) contains an object of type line.

신호의 피크와 밸리를 찾습니다. findpeaks는 평탄한 각 피크에서는 상승 에지만 식별합니다.

[pk,lcp] = findpeaks(sig,t);  % Peaks
[vl,lcv] = findpeaks(-sig,t); % Valleys

hold on
plot(lcp,pk,"x",lcv,-vl,"*")

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Magnitude (dB) contains 3 objects of type line. One or more of the lines displays its values using only markers

Threshold 이름-값 인수를 사용하여 평탄한 피크와 평탄한 밸리를 제외시킵니다. 피크 또는 밸리와 해당 이웃 사이에는 최소 0.1dB의 크기 차이가 필요합니다.

[pkt,lctp] = findpeaks(sig,t,Threshold=0.1);
[vlt,lctv] = findpeaks(-sig,t,Threshold=0.1);
plot(lctp,pkt,"o",LineWidth=1.2)
plot(lctv,-vlt,"d",LineWidth=1.2)

Figure contains an axes object. The axes object with xlabel Time (s), ylabel Magnitude (dB) contains 5 objects of type line. One or more of the lines displays its values using only markers

가우스 곡선의 합으로 구성된 신호를 생성합니다. 각 곡선의 위치, 높이, 폭을 지정합니다.

x = linspace(0,1,1000);

Pos = [1 2 3 5 7 8]'/10;
Hgt = [7 6 3 2 2 3]';
Wdt = [3 8 4 3 4 6]'/100;

y = sum(Hgt.*(exp(-((x-Pos)./Wdt).^2)),1);

돌출부의 절반과 높이의 절반을 기준으로 사용하여 피크의 폭을 측정합니다.

tiledlayout("flow")
nexttile
findpeaks(y,x,Annotate="extents")
title("Half-Prominence Peak Widths")
nexttile
findpeaks(y,x,Annotate="extents",WidthReference="halfheight")
title("Half-Height Peak Widths")

Figure contains 2 axes objects. Axes object 1 with title Half-Prominence Peak Widths contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent signal, peak, prominence, width (half-prominence). Axes object 2 with title Half-Height Peak Widths contains 6 objects of type line. One or more of the lines displays its values using only markers These objects represent signal, peak, height, width (half-height), border.

x축에서 최소 0.5 단위 이상의 간격으로 분리된 가장 높은 피크를 선택합니다. 돌출부의 절반과 높이의 절반을 기준으로 사용하여 피크의 폭을 측정합니다.

figure
tiledlayout("flow")
nexttile
findpeaks(y,x,MinPeakDistance=0.5,Annotate="extents")
title("Half-Prominence Peak Widths")
nexttile
findpeaks(y,x,MinPeakDistance=0.5,Annotate="extents", ...
    WidthReference="halfheight")
title("Half-Height Peak Widths")

Figure contains 2 axes objects. Axes object 1 with title Half-Prominence Peak Widths contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent signal, peak, prominence, width (half-prominence). Axes object 2 with title Half-Height Peak Widths contains 6 objects of type line. One or more of the lines displays its values using only markers These objects represent signal, peak, height, width (half-height), border.

첫 번째 피크와 마지막 피크만 최소 분리 조건을 충족하므로, 플롯에 표시된 폭은 이 두 피크에 해당합니다. 각 피크의 범위는 변경되지 않으므로, 지정된 조건과 피크 선택 여부에 관계없이 피크의 폭 값은 그대로 유지됩니다.

sinc 함수 커널을 사용하는 비선형 최소제곱법을 사용하여 신호의 주요 피크 두 개에 대한 미세 조정된 피크 위치 추정치를 구합니다.

신호 생성

선형 FM 파형의 레이다 펄스 압축은 sinc 형태의 스펙트럼을 생성하며, 여기서 피크의 주파수 위치는 레이다와 탐지된 물체 사이의 거리에 비례합니다. 먼저 findpeaks로 피크 위치와 진폭을 추정한 다음 refinepeaks로 추정값을 향상시킬 수 있습니다. 이 예제에서는 잡음이 없는 합성 펄스 압축 신호의 피크 진폭과 위치를 찾은 다음, refinepeaks를 사용하여 추정값을 개선합니다.

각각 4.76kHz와 35.8kHz에서 피크 1과 1.5를 갖는 두 개의 sinc 형태 파형으로 구성된 신호를 생성합니다. 주파수 간격을 2.5Hz로 설정합니다.

aTg = [1 1.5];
fTg = 1e3*[4.76 35.8];
freqkHzFull = (0:0.0025:50)';
waveFull = abs(sinc([1 0.5].*(freqkHzFull-fTg/1e3)))*aTg';

신호를 인자 200으로 다운샘플링하여 샘플 간 주파수 간격이 0.5kHz가 되도록 합니다. 이 예제에서는 다운샘플링된 신호 피크의 진폭과 위치 추정값을 미세 조정하고, 미세 조정된 추정값을 원래 신호의 값과 비교합니다.

freq = downsample(freqkHzFull,200);
wave = downsample(waveFull,200);

plot(freqkHzFull,waveFull,freq,wave,"*")
legend(["Full signal" "Selected samples"],Location="northwest")
xlabel("Frequency (kHz)")
ylabel("Magnitude")

Figure contains an axes object. The axes object with xlabel Frequency (kHz), ylabel Magnitude contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Full signal, Selected samples.

비선형 최소제곱을 사용한 피크 미세 조정

findpeaks를 사용하여 신호의 가장 높은 피크 두 개의 진폭, 위치, 폭(높이의 절반)에 대한 초기 추정치를 만듭니다.

[PV,PL,PW] = findpeaks(wave,NPeaks=2, ...
    SortStr="descend",WidthReference="halfheight");
table(PV,freq(PL), RowNames="Peak estimate "+(1:numel(PV)), ...
    VariableNames=["Amplitude" "Frequency (kHz)"])
ans=2×2 table
                       Amplitude    Frequency (kHz)
                       _________    _______________

    Peak estimate 1     1.4824            36       
    Peak estimate 2     0.9374             5       

refinepeaks를 사용하여 비선형 최소제곱(NLS)법으로 피크 추정치를 향상시킵니다. 신호의 주파수 지점과 피크 폭을 지정합니다. 피크 값은 예상 값인 1.5와 1에 상당히 가깝고 주파수 위치는 각각 35.8kHz와 4.76kHz에 근접합니다.

LW = max(PW,2);
[Ypk,Xpk] = refinepeaks(wave,PL,freq,Method="NLS",LobeWidth=LW);
table(Ypk,Xpk, RowNames="Refined peak "+(1:numel(Ypk)), ...
    VariableNames=["Amplitude" "Frequency (kHz)"])
ans=2×2 table
                      Amplitude    Frequency (kHz)
                      _________    _______________

    Refined peak 1     1.5063            35.8     
    Refined peak 2     1.0163          4.7628     

미세 조정된 피크의 진폭을 y축에, 업데이트된 피크 위치를 x축에 초기 피크 추정치와 비교하여 플로팅합니다. 처음 추정된 두 개의 피크와 그 주변의 두 샘플은 서로 0.5kHz 간격만큼 분리되어 있습니다. 채워진 원으로 표시된 미세 조정된 피크는 수정된 진폭뿐만 아니라, 처음 추정된 피크 위치와 비교하여 실제 피크 위치를 보여줍니다.

refinepeaks(wave,PL,freq,Method="NLS",LobeWidth=LW)
yline(aTg) % Theoretical peak amplitudes
errorBounds = aTg.*(1+0.03*[-1;1]);
yline(errorBounds(:),":") % ±3% error bounds
legend("Peak "+[1 2])

Figure contains an axes object. The axes object with title Refined Peaks, xlabel Update to Peak Location, ylabel Amplitude contains 13 objects of type scatter, line, constantline. These objects represent Peak 1, Peak 2.

입력 인수

모두 축소

입력 데이터로, 벡터로 지정됩니다. y는 실수 값이어야 하며 적어도 3개의 요소를 가져야 합니다.

데이터형: double | single

위치로, 벡터나 datetime형 배열로 지정됩니다. x는 단조 증가(Monotonically Increasing)해야 하고 y와 길이가 같아야 합니다. x를 생략하는 경우 이 함수는 y의 인덱스를 위치로 사용합니다.

데이터형: double | single | datetime

샘플 레이트로, 양의 스칼라로 지정됩니다. 샘플 레이트는 단위 시간당 샘플 개수입니다. 시간 단위가 초이면 샘플 레이트의 단위는 헤르츠입니다.

데이터형: double | single

이름-값 인수

모두 축소

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

예: findpeaks(y,x,SortStr="descend",NPeaks=3)y 신호에서 가장 높은 피크 3개를 찾습니다.

반환할 피크의 최대 개수로, 양의 정수 스칼라로 지정됩니다.

  • 이 인수를 지정하지 않으면 findpeaks 함수는 입력 데이터 y에서 식별된 모든 피크를 반환합니다.

  • 이 인수를 NPeaks=np로 지정하면 findpeaks 함수는 입력 데이터 y에서 최대 np개 피크를 반환합니다. SortStr도 지정할 경우 findpeaks 함수는 피크를 다음과 같이 반환합니다.

    • SortStr="none"이면 findpeaks 함수는 입력 데이터에서 처음 np개 피크를 반환합니다.

    • SortStr="ascend"findpeaks 함수는 입력 데이터에서 가장 짧은 피크부터 오름차순으로 np개 피크를 반환합니다.

    • SortStr="descend"findpeaks 함수는 입력 데이터에서 가장 높은 피크부터 내림차순으로 np개 피크를 반환합니다.

데이터형: double | single

피크 정렬로, 다음 값 중 하나로 지정됩니다.

  • "none"은 피크를 입력 데이터에서 나타나는 순서대로 반환합니다.

  • "ascend"는 피크를 가장 작은 값부터 가장 큰 값으로, 오름차순으로 반환합니다.

  • "descend"는 피크를 가장 큰 값부터 가장 작은 값으로, 내림차순으로 반환합니다.

최소 피크 높이로, 실수 값 스칼라로 지정됩니다. findpeaks 함수가 이 인수에 지정된 값보다 큰 피크만 반환하도록 하려면 MinPeakHeight를 사용하십시오. 최소 피크 높이를 지정하면 처리 시간을 줄일 수 있습니다.

데이터형: double | single

최소 피크 돌출부로, 음이 아닌 스칼라로 지정됩니다. findpeaks가 상대적 중요도가 최소 이 인수에 지정된 값인 피크만 반환하도록 하려면 MinPeakProminence를 사용하십시오. 자세한 내용은 돌출부 항목을 참조하십시오.

데이터형: double | single

피크와 그 이웃 사이의 최소 높이 차이로, 음이 아닌 스칼라로 지정됩니다. findpeaks가 바로 인접한 값들을 최소한 이 인수에 지정된 값만큼 초과하는 피크만 반환하도록 하려면 Threshold를 사용하십시오.

데이터형: double | single

최소 피크 분리 간격으로, 양의 스칼라로 지정됩니다. MinPeakDistance=d로 값을 지정하면 findpeaks 함수는 신호에서 가장 높은 피크를 선택한 다음, 그 피크로부터 d개 샘플 또는 시간 단위 내에 있는 모든 피크를 무시합니다. 그런 다음 이 함수는 남아 있는 가장 높은 피크에 대해 절차를 반복하고, 더 이상 고려할 피크가 없을 때까지 이 작업을 반복합니다.

  • 위치 벡터 x를 지정하는 경우 MinPeakDistancex의 값으로 표현되어야 합니다. xdatetime형 배열이면 MinPeakDistanceduration형 스칼라나 일수로 표현된 숫자형 스칼라로 지정합니다.

  • 샘플 레이트 Fs를 지정하는 경우 MinPeakDistance는 시간 단위로 표현되어야 합니다.

  • xFs를 모두 지정하지 않을 경우 MinPeakDistance는 샘플 단위로 표현되어야 합니다.

findpeaks가 크기가 상대적으로 큰 피크의 근방에서 나타나는 작은 피크를 무시하도록 하려면 이 인수를 사용하십시오.

데이터형: double | single | duration

폭 측정값의 기준 높이로, "halfprom" 또는 "halfheight"로 지정됩니다.

findpeaks 함수는 하강하는 신호가 가로 기준선을 교차하는 점 사이의 거리로 피크의 너비를 추정합니다. 이 함수는 이 인수에 지정된 기준을 사용하여 선의 높이를 선택합니다.

  • "halfprom"은 피크 아래로 피크 돌출부의 절반에 해당하는 세로 거리에 기준선을 배치합니다. 자세한 내용은 돌출부 항목을 참조하십시오.

  • "halfheight"는 피크 높이의 절반에 기준선을 배치합니다. 이 함수는 MinPeakHeight 인수, MinPeakProminence 인수, Threshold 인수의 값을 사용하여 결정한 피크의 경계 밖에 있는 교차점이 있으면 선을 잘라냅니다. 피크 사이의 경계는 피크 사이에 있는 가장 낮은 골의 가로 위치로 정의됩니다. 이 값이 선택된 경우 함수는 높이가 0보다 작은 피크를 삭제합니다.

이 함수는 선형 보간으로 교차점의 위치를 계산합니다.

최소 피크 폭으로, 양의 스칼라로 지정됩니다. 폭이 최소 minPW개 샘플 또는 시간 단위인 피크만 선택하려면 MinPeakWidth=minPW를 지정하십시오.

  • 위치 벡터 x를 지정하는 경우 MinPeakWidthx의 값으로 표현되어야 합니다. xdatetime형 배열이면 MinPeakWidthduration형 스칼라나 일수로 표현된 숫자형 스칼라로 지정합니다.

  • 샘플 레이트 Fs를 지정하는 경우 MinPeakWidth는 시간 단위로 표현되어야 합니다.

  • xFs를 모두 지정하지 않을 경우 MinPeakWidth는 샘플 단위로 표현되어야 합니다.

데이터형: double | single | duration

최대 피크 폭으로, 양의 스칼라로 지정됩니다. 폭이 최대 maxPW개 샘플 또는 시간 단위인 피크만 선택하려면 MaxPeakWidth=maxPW를 지정하십시오.

  • 위치 벡터 x를 지정하는 경우 MaxPeakWidthx의 값으로 표현되어야 합니다. xdatetime형 배열이면 MaxPeakWidthduration형 스칼라나 일수로 표현된 숫자형 스칼라로 지정합니다.

  • 샘플 레이트 Fs를 지정하는 경우 MaxPeakWidth는 시간 단위로 표현되어야 합니다.

  • xFs를 모두 지정하지 않을 경우 MaxPeakWidth는 샘플 단위로 표현되어야 합니다.

데이터형: double | single | duration

플롯 스타일로, 다음 값 중 하나로 지정됩니다.

  • "peaks"는 신호를 플로팅하고 모든 피크의 위치와 값에 대한 주석을 추가합니다.

  • "extents"는 신호를 플로팅하고 모든 피크의 위치, 값, 폭, 돌출부에 대한 주석을 추가합니다.

출력 인수와 함께 findpeaks 함수를 호출하면 이 인수는 무시됩니다.

출력 인수

모두 축소

국소 최댓값으로, 신호 값으로 구성된 벡터로 반환됩니다. 국소 최댓값이 없을 경우 pks가 비어 있습니다.

피크 위치로, 벡터로 반환됩니다.

  • 위치 벡터 x를 지정할 경우 locs는 피크 인덱스에서 x의 값을 포함합니다.

  • 샘플 레이트 Fs를 지정할 경우 locs는 연속 샘플 간에 시간 차 1/Fs을 갖는 시점으로 구성된 숫자형 벡터입니다.

  • xFs를 모두 지정하지 않을 경우 locs는 정수 인덱스로 구성된 벡터입니다.

피크 폭으로, 실수 값 숫자로 구성된 벡터로 반환됩니다. 각 피크의 폭은 높이가 WidthReference로 지정된 기준선과 신호과 교차하는 피크의 왼쪽과 오른쪽에 있는 점 사이의 거리로 계산됩니다. 이 점 자체는 선형 보간으로 구합니다.

  • 위치 벡터 x를 지정하면 폭이 x의 값으로 표현됩니다.

  • 샘플 레이트 Fs를 지정하면 폭이 시간 단위로 표현됩니다.

  • xFs를 모두 지정하지 않을 경우 폭은 샘플 단위로 표현됩니다.

피크 돌출부로, 실수 값 숫자로 구성된 벡터로 반환됩니다. 피크의 돌출부는 신호가 피크보다 높은 수준으로 다시 올라가거나 끝점에 도달하기 전에, 피크의 어느 한 쪽이든 하강해야 하는 최소 세로 거리입니다. 자세한 내용은 돌출부 항목을 참조하십시오.

세부 정보

모두 축소

findpeaks 함수로 신호 피크를 먼저 추정한 다음 refinepeaks로 진폭과 위치를 향상시킬 수 있습니다.

진폭이 y이고 위치가 x인 신호가 있다고 가정해 보겠습니다. 다음 코드 조각은 yx의 피크를 추정하고 미세 조정하는 방법을 보여줍니다.

[yPeaks,xPeaksIdx] = findpeaks(y);
[yRPeaks,xRPeaks] = refinepeaks(y,xPeaksIdx,x)

확장 기능

모두 확장

버전 내역

R2007b에 개발됨

모두 확장