Main Content

cwt

연속 1차원 웨이블릿 변환

설명

예제

wt = cwt(x)x의 CWT(연속 웨이블릿 변환)를 반환합니다. CWT는 대칭성 파라미터인 감마(γ)가 3이고 시간과 대역폭의 곱이 60인 해석적 Morse 웨이블릿을 사용하여 구합니다. cwt는 옥타브당 10개의 음을 사용합니다. 최소 스케일과 최대 스케일은 주파수와 시간에 따른 웨이블릿의 에너지 산포를 기반으로 자동으로 결정됩니다.

cwt 함수는 L1 정규화를 사용합니다. L1 정규화를 사용할 때 서로 다른 스케일에서 데이터에 동일한 진폭의 진동 성분이 있는 경우 CWT에서 이들은 동일한 크기를 갖게 됩니다. L1 정규화를 사용하면 신호 표현이 더 정확해집니다. CWT에 대한 L1 노름두 복소수 지수의 연속 웨이블릿 변환 항목을 참조하십시오.

wt = cwt(x,wname)wname으로 지정된 해석적 웨이블릿을 사용하여 CWT를 계산합니다.

예제

[wt,f] = cwt(___,fs)는 샘플링 주파수 fs(단위: 헤르츠)를 지정하고 스케일에서 주파수로의 변환 f(단위: 헤르츠)을 반환합니다. 샘플링 주파수를 지정하지 않으면 cwtf를 샘플당 주기로 반환합니다.

[wt,period] = cwt(___,ts)는 샘플링 주기 ts를 양의 duration형 스칼라로 지정합니다. cwtts를 사용하여 스케일에서 주기로의 변환인 period를 계산합니다. periodts와 동일한 Format 속성을 가진 duration형으로 구성된 배열입니다.

예제

[wt,f,coi] = cwt(___)는 영향 원뿔(cone of influence) coi를 샘플당 주기로 반환합니다. 영향 원뿔을 헤르츠로 반환하려면 샘플링 주파수 fs를 헤르츠로 지정합니다.

[wt,period,coi] = cwt(___,ts)는 영향 원뿔 coits와 동일한 Format 속성을 가진 duration형으로 구성된 배열로 반환합니다.

[___,coi,fb] = cwt(___)는 CWT에 사용되는 필터 뱅크를 반환합니다. cwtfilterbank 항목을 참조하십시오.

[___,fb,scalingcfs] = cwt(___)는 웨이블릿 변환의 스케일링 계수를 반환합니다.

[___] = cwt(___,Name=Value)는 하나 이상의 추가 이름-값 인수를 지정합니다. 예를 들어, wt = cwt(x,TimeBandwidth=40,VoicesPerOctave=20)은 시간과 대역폭의 곱 40과 옥타브당 20개의 음을 지정합니다.

예제

cwt(___)에 출력 인수를 지정하지 않으면 CWT 스케일로그램이 플로팅됩니다. 스케일로그램은 시간과 주파수의 함수로 플로팅된 CWT의 절댓값입니다. 주파수는 로그 스케일로 플로팅됩니다. 가장자리 효과가 유의미해지는 위치를 나타내는 영향 원뿔(cone of influence)도 플로팅됩니다. 흰색 파선 밖의 회색 영역이 가장자리 효과가 유의미한 영역을 나타냅니다. 입력 신호가 복소수 값이면 양수(반시계 방향) 성분과 음수(시계 방향) 성분이 개별 스케일로그램에 플로팅됩니다.

샘플링 주파수 또는 샘플링 주기를 지정하지 않으면 주파수는 샘플당 주기로 플로팅됩니다. 샘플링 주파수를 지정할 경우 주파수는 헤르츠 단위입니다. 샘플링 주기를 지정할 경우 스케일로그램은 시간과 주기의 함수로 플로팅됩니다. 입력 신호가 타임테이블인 경우 스케일로그램은 시간과 주파수(단위: 헤르츠)의 함수로 플로팅되고 RowTimes를 시간 축의 기반으로 사용합니다.

스케일로그램 점의 크기, 시간 및 주파수를 보려면 Figure 좌표축 도구 모음에서 데이터팁을 활성화하고 스케일로그램에서 원하는 점을 클릭하십시오.

참고

플로팅하기 전에 cwt는 현재 Figure를 지웁니다(clf). 스케일로그램을 서브플롯에 플로팅하려면 플로팅 함수를 사용하십시오. 서브플롯에 CWT 스케일로그램 플로팅하기 항목을 참조하십시오.

예제

모두 축소

디폴트 값을 사용하여 음성 샘플의 연속 웨이블릿 변환을 구합니다.

load mtlb;
w = cwt(mtlb);

음성 샘플을 불러옵니다.

load mtlb

파일 mtlb.mat를 불러오면 음성 신호 mtlb와 샘플 레이트 Fs가 작업 공간으로 들어옵니다. 범프 웨이블릿을 사용하여 얻은 음성 샘플의 스케일로그램을 표시합니다.

load mtlb
cwt(mtlb,"bump",Fs)

Figure contains an axes object. The axes object with title Magnitude Scalogram, xlabel Time (ms), ylabel Frequency (kHz) contains 3 objects of type image, line, area.

디폴트 Morse 웨이블릿을 사용하여 얻은 스케일로그램과 비교합니다.

cwt(mtlb,Fs)

Figure contains an axes object. The axes object with title Magnitude Scalogram, xlabel Time (ms), ylabel Frequency (kHz) contains 3 objects of type image, line, area.

고베 지진 데이터의 CWT를 구합니다. 이 데이터는 1995년 1월 16일 20:56:51(GMT)부터 51분 동안 호주 Tasmania University, Hobart에서 기록한 지진계(수직 가속도, nm/sq.sec) 측정값입니다. 샘플링 주파수는 1Hz입니다.

load kobe

지진 데이터를 플로팅합니다.

plot((1:numel(kobe))./60,kobe)
xlabel("Time (mins)")
ylabel("Vertical Acceleration (nm/s^2)")
title("Kobe Earthquake Data")
grid on
axis tight

Figure contains an axes object. The axes object with title Kobe Earthquake Data, xlabel Time (mins), ylabel Vertical Acceleration (nm/s Squared baseline ) contains an object of type line.

CWT, 주파수, 영향 원뿔을 구합니다.

[wt,f,coi] = cwt(kobe,1);

영향 원뿔을 포함하여 스케일로그램을 확인합니다.

cwt(kobe,1)

Figure contains an axes object. The axes object with title Magnitude Scalogram, xlabel Time (mins), ylabel Frequency (mHz) contains 3 objects of type image, line, area.

샘플링 주파수 대신 샘플링 주기를 지정하여 CWT, 시간 주기 및 영향 원뿔을 구합니다.

[wt,periods,coi] = cwt(kobe,minutes(1/60));

샘플링 주기를 지정할 때 생성된 스케일로그램을 확인합니다.

cwt(kobe,minutes(1/60))

Figure contains an axes object. The axes object with title Magnitude Scalogram, xlabel Time (mins), ylabel Period (mins) contains 3 objects of type image, line, area.

32Hz 및 64Hz의 주파수를 갖고 진폭이 서로 다른 두 개의 복소수 지수를 생성합니다. 데이터는 1000Hz로 샘플링됩니다. 두 복소수 지수는 시간적으로 서로 겹치지 않는 지지 범위를 갖습니다.

Fs = 1e3;
t = 0:1/Fs:1;
z = exp(1i*2*pi*32*t).*(t>=0.1 & t<0.3)+2*exp(-1i*2*pi*64*t).*(t>0.7);

표준편차가 0.05인 복소수 백색 가우스 잡음을 추가합니다.

wgnNoise = 0.05/sqrt(2)*randn(size(t))+1i*0.05/sqrt(2)*randn(size(t));
z = z+wgnNoise;

Morse 웨이블릿을 사용하여 cwt를 구하고 플로팅합니다.

cwt(z,Fs)

Figure contains 2 axes objects. Axes object 1 with title Magnitude Scalogram Positive Component (Counterclockwise Rotation), ylabel Frequency (Hz) contains 3 objects of type image, line, area. Axes object 2 with title Negative Component (Clockwise Rotation), xlabel Time (secs), ylabel Frequency (Hz) contains 3 objects of type image, line, area.

컬러바에 있는 복소수 지수 성분의 크기는 스케일이 다르더라도 본질적으로 진폭입니다. 이는 L1 정규화의 직접적인 결과입니다. 스크립트를 실행하고 데이터 커서로 각 서브플롯을 탐색하여 이를 확인할 수 있습니다.

이 예제에서는 신호에서 진동 성분의 진폭이 그에 대응하는 웨이블릿 계수의 진폭과 일치함을 보여줍니다.

시간적으로 서로 겹치지 않는 지지 범위를 갖는 두 개의 정현파로 구성된 신호를 생성합니다. 한 정현파는 주파수가 32Hz이고 진폭이 1입니다. 다른 정현파는 주파수가 64Hz이고 진폭이 2입니다. 이 신호는 1000Hz에서 1초 동안 샘플링됩니다. 신호를 플로팅합니다.

frq1 = 32;
amp1 = 1;
frq2 = 64;
amp2 = 2;

Fs = 1e3;
t = 0:1/Fs:1;
x = amp1*sin(2*pi*frq1*t).*(t>=0.1 & t<0.3)+... 
    amp2*sin(2*pi*frq2*t).*(t>0.6 & t<0.9);

plot(t,x)
grid on
xlabel("Time (sec)")
ylabel("Amplitude")
title("Signal")

Figure contains an axes object. The axes object with title Signal, xlabel Time (sec), ylabel Amplitude contains an object of type line.

신호에 적용할 수 있는 CWT 필터 뱅크를 만듭니다. 신호 성분 주파수를 알고 있으므로 필터 뱅크의 주파수 제한을 알려진 주파수가 포함된 좁은 범위로 설정합니다. 범위를 확인하기 위해 필터 뱅크에 대한 크기 주파수 응답을 플로팅합니다.

fb = cwtfilterbank(SignalLength=numel(x),SamplingFrequency=Fs,...
    FrequencyLimits=[20 100]);
freqz(fb)

Figure contains an axes object. The axes object with title CWT Filter Bank, xlabel Frequency (Hz), ylabel Magnitude contains 24 objects of type line.

cwt 및 필터 뱅크를 사용하여 신호의 스케일로그램을 플로팅합니다.

cwt(x,FilterBank=fb)

Figure contains an axes object. The axes object with title Magnitude Scalogram, xlabel Time (secs), ylabel Frequency (Hz) contains 3 objects of type image, line, area.

데이터 커서를 사용하여 웨이블릿 계수의 진폭이 본질적으로 정현파 성분의 진폭과 같은지 확인합니다. 결과는 다음 그림과 유사해야 합니다.

이 예제에서는 여러 시계열에 CWT를 수행할 때 CWT 필터 뱅크를 사용하여 계산 효율성을 개선할 수 있는 방법을 보여줍니다.

100×1024 행렬 x를 생성합니다. 1024개의 샘플이 있는 신호에 적합한 CWT 필터 뱅크를 생성합니다.

x = randn(100,1024);
fb = cwtfilterbank;

디폴트 설정의 cwt를 사용하여 1024개의 샘플이 있는 신호의 CWT를 구합니다. 각각 1024개의 샘플이 있는 신호 100개의 CWT 계수를 포함할 수 있는 3차원 배열을 생성합니다.

cfs = cwt(x(1,:));
res = zeros(100,size(cfs,1),size(cfs,2));

cwt 함수를 사용하여 행렬 x의 각 행에 CWT를 수행합니다. 경과 시간을 표시합니다.

tic
for k=1:100
    res(k,:,:) = cwt(x(k,:));
end
toc
Elapsed time is 0.928160 seconds.

이제 필터 뱅크의 wt 객체 함수를 사용하여 x의 각 행에 CWT를 수행합니다. 경과 시간을 표시합니다.

tic
for k=1:100
    res(k,:,:) = wt(fb,x(k,:));
end
toc
Elapsed time is 0.393524 seconds.

이 예제에서는 생성된 CUDA® 코드를 사용하여 CWT(연속 웨이블릿 변환)를 수행하기 위해 MEX 파일을 생성하는 방법을 보여줍니다.

먼저 CUDA 지원 GPU와 NVCC 컴파일러가 있는지 확인하십시오. 구성이 적절한지 확인하려면 The GPU Environment Check and Setup App (GPU Coder) 항목을 참조하십시오.

GPU 코더 구성 객체를 만듭니다.

cfg = coder.gpuConfig("mex");

1,000Hz에서 100,000개 샘플의 신호를 생성합니다. 신호는 시간적으로 서로 겹치지 않는 지지 범위를 갖는 두 개의 코사인파로 구성됩니다.

t = 0:.001:(1e5*0.001)-0.001;
x = cos(2*pi*32*t).*(t > 10 & t<=50)+ ...
    cos(2*pi*64*t).*(t >= 60 & t < 90)+ ...
    0.2*randn(size(t));

단정밀도를 사용하도록 신호를 형변환합니다. GPU 계산은 단정밀도에서 더 효율적인 경우가 많습니다. 그러나 NVIDIA® GPU가 배정밀도를 지원하는 경우 배정밀도 코드를 생성할 수도 있습니다.

x = single(x);

GPU MEX 파일과 코드 생성 리포트를 생성합니다. MEX 파일 생성을 허용하려면 다음 입력 파라미터 3개의 속성(클래스, 크기, 실수/복소수 여부)을 지정해야 합니다.

  • coder.typeof(single(0),[1 1e5])single형 실수 값을 포함하는 길이가 100,000인 행 벡터를 지정합니다.

  • coder.typeof('c',[1 inf])는 임의 길이의 문자형 배열을 지정합니다.

  • coder.typeof(0)double형 실수 값을 지정합니다.

sig = coder.typeof(single(0),[1 1e5]);
wav = coder.typeof('c',[1 inf]);
sfrq = coder.typeof(0);
codegen cwt -config cfg -args {sig,wav,sfrq} -report
Code generation successful: View report

-report 플래그는 선택 사항입니다. -report를 사용하면 코드 생성 리포트가 생성됩니다. 리포트의 요약 탭에서 GPU 코드 메트릭 링크를 찾을 수 있습니다. 이 링크에서는 생성된 CUDA 커널의 개수 및 할당된 메모리 양과 같은 자세한 정보를 제공합니다.

데이터에 대해 MEX 파일을 실행하고 스케일로그램을 플로팅합니다. 플롯이 서로 겹치지 않는 두 코사인파와 일치하는지 확인합니다.

[cfs,f] = cwt_mex(x,'morse',1e3);
image("XData",t,"YData",f,"CData",abs(cfs),"CDataMapping","scaled")
set(gca,"YScale","log")
axis tight
xlabel("Time (Seconds)")
ylabel("Frequency (Hz)")
title("Scalogram of Two-Tone Signal")

_mex를 추가하지 않고 위의 CWT 명령을 실행합니다. MATLAB® 스케일로그램과 GPU MEX 스케일로그램이 동일한지 확인합니다.

[cfs2,f2] = cwt(x,'morse',1e3);
max(abs(cfs2(:)-cfs(:)))
ans = single
    7.3380e-07

이 예제에서는 출력 인수 없이 플롯을 얻을 때 CWT의 디폴트 주파수 축 레이블을 변경하는 방법을 보여줍니다.

32Hz 및 64Hz 주파수를 갖는 두 개의 사인파를 생성합니다. 데이터는 1000Hz로 샘플링됩니다. 두 사인파는 시간적으로 서로 겹치지 않는 지지 범위를 갖습니다. 표준편차가 0.05인 백색 가우스 잡음을 추가합니다. 디폴트 Morse 웨이블릿을 사용하여 CWT를 얻고 플로팅합니다.

Fs = 1e3;
t = 0:1/Fs:1;
x = cos(2*pi*32*t).*(t>=0.1 & t<0.3)+sin(2*pi*64*t).*(t>0.7);
wgnNoise = 0.05*randn(size(t));
x = x+wgnNoise;
cwt(x,1000)

Figure contains an axes object. The axes object with title Magnitude Scalogram, xlabel Time (secs), ylabel Frequency (Hz) contains 3 objects of type image, line, area.

CWT의 주파수가 로그이므로 플롯은 로그 주파수 축을 사용합니다. MATLAB에서 로그 좌표축의 단위는 10의 거듭제곱(디케이드)입니다. cwtfreqbounds를 사용하여, 주어진 신호 길이, 샘플링 주파수, 웨이블릿에 대한 최소 및 최대 웨이블릿 대역통과 주파수를 확인할 수 있습니다.

[minf,maxf] = cwtfreqbounds(numel(x),1000);

기본적으로 주파수 눈금은 최소 주파수와 최대 주파수 사이의 10의 거듭제곱이기 때문에 10과 100에 배치되었음을 알 수 있습니다. 주파수 축 눈금을 추가하려면 다음을 사용하여 최소 주파수와 최대 주파수 사이의 로그 간격 주파수 집합을 얻으면 됩니다.

numfreq = 10;
freq = logspace(log10(minf),log10(maxf),numfreq);

그런 다음, 다음과 같은 방법으로 현재 좌표축에 대한 핸들을 가져오고 주파수 축 눈금과 레이블을 바꿉니다.

AX = gca;
AX.YTickLabelMode = "auto";
AX.YTick = freq;

Figure contains an axes object. The axes object with title Magnitude Scalogram, xlabel Time (secs), ylabel Frequency (Hz) contains 3 objects of type image, line, area.

CWT에서 주파수는 2의 거듭제곱으로 계산됩니다. 주파수 눈금과 눈금 레이블을 2의 거듭제곱 단위로 만들려면 다음을 수행하면 됩니다.

newplot
cwt(x,1000)
AX = gca;
freq = 2.^(round(log2(minf)):round(log2(maxf)));
AX.YTickLabelMode = "auto";
AX.YTick = freq;

Figure contains an axes object. The axes object with title Magnitude Scalogram, xlabel Time (secs), ylabel Frequency (Hz) contains 3 objects of type image, line, area.

이 예제에서는 플로팅을 위해 각 수준의 최대 절댓값으로 스케일로그램 값을 스케일링하는 방법을 보여줍니다.

신호를 불러오고 디폴트 스케일로그램을 표시합니다. 컬러맵을 pink(240)으로 변경합니다.

load noisdopp
cwt(noisdopp)
colormap(pink(240))

Figure contains an axes object. The axes object with title Magnitude Scalogram, xlabel Time (Samples), ylabel Normalized Frequency (cycles/sample) contains 3 objects of type image, line, area.

신호에 CWT를 수행하고 웨이블릿 계수와 주파수를 구합니다.

[cfs,frq] = cwt(noisdopp);

각 주파수(수준)에서 계수의 최댓값을 효율적으로 구하려면 먼저 계수의 절댓값을 전치합니다. 모든 수준에서 최솟값을 구합니다. 각 수준에서 해당 수준의 최솟값을 뺍니다.

tmp1 = abs(cfs);
t1 = size(tmp1,2);
tmp1 = tmp1';
minv = min(tmp1);
tmp1 = (tmp1-minv(ones(1,t1),:));

tmp1의 모든 수준에서 최댓값을 구합니다. 각 수준에 대해 모든 값을 해당 수준의 최댓값으로 나눕니다. 그 결과에 컬러맵의 색 개수를 곱합니다. 0인 요소를 모두 1로 설정합니다. 결과를 전치합니다.

maxv = max(tmp1);
maxvArray = maxv(ones(1,t1),:);
indx = maxvArray<eps;
tmp1 = 240*(tmp1./maxvArray);
tmp2 = 1+fix(tmp1);
tmp2(indx) = 1;
tmp2 = tmp2';

결과를 표시합니다. 스케일로그램 값은 이제 각 수준의 최대 절댓값으로 스케일링됩니다. 주파수는 선형 스케일로 표시됩니다.

t = 0:length(noisdopp)-1;
pcolor(t,frq,tmp2)
shading interp
xlabel("Time (Samples)")
ylabel("Normalized Frequency (cycles/sample)")
title("Scalogram Scaled By Level")
colormap(pink(240))
colorbar

Figure contains an axes object. The axes object with title Scalogram Scaled By Level, xlabel Time (Samples), ylabel Normalized Frequency (cycles/sample) contains an object of type surface.

이 예제에서는 Morse 웨이블릿의 시간과 대역폭의 곱 P2을 증가시키면 포락선 아래에 더 많은 진동을 갖는 웨이블릿이 생성된다는 것을 알 수 있습니다. P2이 증가하면 주파수 영역에서 웨이블릿이 좁아집니다.

두 개의 필터 뱅크를 생성합니다. 첫 번째 필터 뱅크의 디폴트 TimeBandwidth 값은 60입니다. 두 번째 필터 뱅크의 TimeBandwidth 값은 10입니다. 두 필터 뱅크의 SignalLength는 4096개 샘플입니다.

sigLen = 4096;
fb60 = cwtfilterbank(SignalLength=sigLen);
fb10 = cwtfilterbank(SignalLength=sigLen,TimeBandwidth=10);

필터 뱅크에 대한 시간 영역 웨이블릿을 구합니다.

[psi60,t] = wavelets(fb60);
[psi10,~] = wavelets(fb10);

scales 함수를 사용하여 각 필터 뱅크에 대한 모 웨이블릿(mother wavelet)을 구합니다.

sca60 = scales(fb60);
sca10 = scales(fb10);
[~,idx60] = min(abs(sca60-1));
[~,idx10] = min(abs(sca10-1));
m60 = psi60(idx60,:);
m10 = psi10(idx10,:);

fb60 필터 뱅크의 시간과 대역폭의 곱이 더 크므로 m60 웨이블릿이 m10 웨이블릿보다 포락선 아래에 더 많은 진동을 갖는다는 사실을 확인합니다.

subplot(2,1,1)
plot(t,abs(m60))
grid on
hold on
plot(t,real(m60))
plot(t,imag(m60))
hold off
xlim([-30 30])
legend("abs(m60)","real(m60)","imag(m60)")
title("TimeBandwidth = 60")
subplot(2,1,2)
plot(t,abs(m10))
grid on
hold on
plot(t,real(m10))
plot(t,imag(m10))
hold off
xlim([-30 30])
legend("abs(m10)","real(m10)","imag(m10)")
title("TimeBandwidth = 10")

Figure contains 2 axes objects. Axes object 1 with title TimeBandwidth = 60 contains 3 objects of type line. These objects represent abs(m60), real(m60), imag(m60). Axes object 2 with title TimeBandwidth = 10 contains 3 objects of type line. These objects represent abs(m10), real(m10), imag(m10).

m60 크기 주파수 응답과 m10 크기 주파수 응답의 피크를 정렬합니다. m60 웨이블릿의 주파수 응답이 m10 웨이블릿의 주파수 응답보다 좁은지 확인합니다.

cf60 = centerFrequencies(fb60);
cf10 = centerFrequencies(fb10);

m60cFreq = cf60(idx60);
m10cFreq = cf10(idx10);

freqShift = 2*pi*(m60cFreq-m10cFreq);
x10 = m10.*exp(1j*freqShift*(-sigLen/2:sigLen/2-1));

figure
plot([abs(fft(m60)).' abs(fft(x10)).'])
grid on
legend("Time-bandwidth = 60","Time-bandwidth = 10")
title("Magnitude Frequency Responses")

Figure contains an axes object. The axes object with title Magnitude Frequency Responses contains 2 objects of type line. These objects represent Time-bandwidth = 60, Time-bandwidth = 10.

이 예제에서는 Figure 서브플롯에 CWT 스케일로그램을 플로팅하는 방법을 보여줍니다.

음성 샘플을 불러옵니다. 데이터는 7418Hz로 샘플링됩니다. 디폴트 CWT 스케일로그램을 플로팅합니다.

load mtlb
cwt(mtlb,Fs)

Figure contains an axes object. The axes object with title Magnitude Scalogram, xlabel Time (ms), ylabel Frequency (kHz) contains 3 objects of type image, line, area.

신호의 연속 웨이블릿 변환과 CWT의 주파수를 구합니다.

[cfs,frq] = cwt(mtlb,Fs);

cwt 함수는 스케일로그램에 시간 좌표축과 주파수 좌표축을 설정합니다. 샘플 시간을 나타내는 벡터를 생성합니다.

tms = (0:numel(mtlb)-1)/Fs;

새 Figure에서 원래 신호를 상부 서브플롯에, 스케일로그램을 하부 서브플롯에 플로팅합니다. 주파수를 로그 스케일로 플로팅합니다.

figure
subplot(2,1,1)
plot(tms,mtlb)
axis tight
title("Signal and Scalogram")
xlabel("Time (s)")
ylabel("Amplitude")
subplot(2,1,2)
surface(tms,frq,abs(cfs))
axis tight
shading flat
xlabel("Time (s)")
ylabel("Frequency (Hz)")
set(gca,"yscale","log")

Figure contains 2 axes objects. Axes object 1 with title Signal and Scalogram, xlabel Time (s), ylabel Amplitude contains an object of type line. Axes object 2 with xlabel Time (s), ylabel Frequency (Hz) contains an object of type surface.

입력 인수

모두 축소

입력 신호로, 실수 값 벡터 또는 복소수 값 벡터로 지정되거나 단일 변수가 규칙적으로 샘플링된 timetable형으로 지정됩니다. 입력값 x는 적어도 4개의 샘플을 가져야 합니다.

cwt 함수는 GPU 배열 입력값도 받습니다. 자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.

데이터형: single | double
복소수 지원 여부:

CWT를 계산하는 데 사용되는 해석적 웨이블릿입니다. wname에 유효한 옵션은 "morse", "amor", "bump"이며, 각각 Morse, Morlet(Gabor), 범프 웨이블릿을 지정합니다.

디폴트 Morse 웨이블릿은 대칭성 파라미터인 감마(γ)가 3이고 시간과 대역폭의 곱이 60입니다.

데이터형: char | string

샘플링 주파수(단위: 헤르츠)로, 양의 스칼라로 지정됩니다. fs를 지정할 경우 ts는 지정할 수 없습니다. x가 타임테이블인 경우 fs를 지정할 수 없습니다. fs는 타임테이블의 RowTimes에서 결정됩니다.

데이터형: single | double

샘플링 주기(지속 시간이라고도 함)로, duration형 스칼라로 지정됩니다. 유효한 duration형은 years, days, hours, minutes, seconds입니다. calendarDuration형은 사용할 수 없습니다. ts를 지정할 경우 fs는 지정할 수 없습니다. x가 타임테이블인 경우 ts를 지정할 수 없습니다. tsPeriodLimits 이름-값 인수를 설정할 때 타임테이블의 RowTimes에서 결정됩니다.

예: wt = cwt(x,hours(12))

데이터형: duration

이름-값 인수

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

예: wt = cwt(x,"bump",VoicesPerOctave=10)은 범프 웨이블릿과 옥타브당 10개의 음을 사용하여 x의 CWT를 반환합니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: wt = cwt(x,"ExtendedSignal",true,"FrequencyLimits",[0.1 0.2])는 입력 신호를 대칭적으로 확장하고 주기당 0.1~0.2개 샘플의 주파수 제한을 지정합니다.

반사를 통해 입력 신호를 대칭적으로 확장하는 옵션으로, 다음 중 하나로 지정됩니다.

  • 1 (true) — 대칭적으로 확장

  • 0 (false) — 대칭적으로 확장하지 않음

ExtendSignalfalse인 경우 신호는 주기적으로 확장됩니다. 신호를 대칭적으로 확장하면 경계 효과를 최소화할 수 있습니다.

참고

스케일링 계수 및 근사 합성 필터와 함께 icwt를 사용하여 CWT를 반전하려면 ExtendSignalfalse로 설정하십시오.

데이터형: logical

CWT에 사용할 주파수 제한으로, 양의 요소 2개를 가진 순증가하는 벡터로 지정됩니다.

  • 첫 번째 요소는 가장 낮은 피크 통과대역 주파수를 지정합니다. 이 요소는 시간 표준편차의 두 배를 신호 길이로 나눈 값에 웨이블릿 피크 주파수(단위: 헤르츠)를 곱한 값보다 크거나 같아야 합니다.

  • 두 번째 요소는 가장 높은 피크 통과대역 주파수를 지정합니다. 이 요소는 나이퀴스트 주파수보다 작거나 같아야 합니다.

  • 주파수 상한 freqMax와 주파수 하한 freqMin 비율의 밑이 2인 로그는 1/NV보다 크거나 같아야 합니다. 여기서 NV는 옥타브당 음의 개수입니다.

    log2(freqMax/freqMin) ≥ 1/NV.

복소수 값 신호의 경우 (-1) × flimits가 비해석적(anti-analytic) 부분에 사용되며, 여기서 flimitsFrequencyLimits로 지정된 벡터입니다.

참고

허용 가능한 범위를 벗어난 주파수 제한을 지정할 경우 cwt는 유효한 최솟값 및 최댓값으로 제한을 자릅니다. CWT의 다양한 파라미터화에 대해 주파수 제한을 결정하려면 cwtfreqbounds를 사용하십시오.

예: wt = cwt(x,1000,VoicesPerOctave=10,FrequencyLimits=[80 90])

데이터형: double

CWT에 사용할 주기 제한으로, 양의 요소 2개를 가진 순증가하는 duration형 배열로 지정됩니다.

  • 첫 번째 요소는 2 × ts보다 크거나 같아야 합니다. 여기서 ts는 샘플링 주기입니다.

  • 최대 주기는 신호 길이를 웨이블릿의 시간 표준편차의 2배와 웨이블릿 피크 주파수의 곱으로 나눈 값을 초과할 수 없습니다.

  • 최소 주기 minP와 최대 주기 maxP의 비율에 대한 밑이 2인 로그는 -1/NV보다 작거나 같아야 합니다. 여기서 NV는 옥타브당 음의 개수입니다.

    log2(pMin/pMax) ≤ -1/NV.

복소수 값 신호의 경우 (-1) × plimits가 비해석적(anti-analytic) 부분에 사용되며, 여기서 plimitsPeriodLimits로 지정된 벡터입니다.

참고

허용 가능한 범위를 벗어난 주기 제한을 지정하면 cwt는 유효한 최솟값 및 최댓값으로 제한을 자릅니다. 웨이블릿 변환의 다양한 파라미터화에 대해 주기 제한을 결정하려면 cwtfreqbounds를 사용하십시오.

예: wt = cwt(x,seconds(0.1),VoicesPerOctave=10,PeriodLimits=[seconds(0.2) seconds(3)])

데이터형: duration

CWT에 사용할 옥타브당 음의 개수로, 1과 48 사이의 정수로 지정됩니다. CWT 스케일은 옥타브당 지정된 음의 개수를 사용하여 이산화됩니다. 주파수와 시간에 따른 웨이블릿의 에너지 산포에 의해 최소 스케일과 최대 스케일이 자동으로 결정됩니다.

Morse 웨이블릿의 시간과 대역폭의 곱으로, 3보다 크거나 같고 120보다 작거나 같은 스칼라로 지정됩니다. 대칭성 파라미터인 감마(γ)는 3에 고정되어 있습니다. 웨이블릿의 시간과 대역폭의 곱이 클수록 시간에 따른 산포는 더 넓고 주파수에 따른 산포는 더 좁습니다. 시간에 따른 Morse 웨이블릿의 표준편차는 약 sqrt(TimeBandwidth/2)입니다. 주파수에 따른 Morse 웨이블릿의 표준편차는 약 1/2 × sqrt(2/TimeBandwidth)입니다.

TimeBandwidth를 지정할 경우 WaveletParameters는 지정할 수 없습니다. 대칭성 및 시간과 대역폭의 곱을 모두 지정하려면 대신 WaveletParameters를 사용하십시오.

Morse Wavelets 표기법에서 TimeBandwidth는 P2입니다.

Morse 웨이블릿의 대칭성 및 시간과 대역폭의 곱으로, 스칼라로 구성된 요소를 2개 가진 벡터로 지정됩니다. 첫 번째 요소는 대칭성 γ이며 1보다 크거나 같아야 합니다. 두 번째 요소는 시간과 대역폭의 곱이며 γ보다 크거나 같아야 합니다. γ에 대한 시간과 대역폭의 곱의 비는 40을 초과할 수 없습니다.

γ가 3인 경우 Morse 웨이블릿은 주파수 영역에서 완벽하게 대칭이고 왜도가 0입니다. γ가 3보다 큰 경우 왜도는 양수입니다. γ가 3보다 작은 경우 왜도는 음수입니다.

자세한 내용은 Morse Wavelets 항목을 참조하십시오.

WaveletParameters를 지정할 경우 TimeBandwidth는 지정할 수 없습니다.

CWT를 계산하는 데 사용할 CWT 필터 뱅크로, cwtfilterbank 객체로 지정됩니다. FilterBank를 설정하면 다른 옵션은 지정할 수 없습니다. CWT 계산을 위한 모든 옵션은 필터 뱅크의 속성으로 정의됩니다. 자세한 내용은 cwtfilterbank 항목을 참조하십시오.

x가 타임테이블인 경우 fb의 샘플링 주파수 또는 샘플링 주기는 타임테이블의 RowTimes에 의해 결정된 샘플링 주파수 또는 샘플링 주기와 일치해야 합니다.

예: wt = cwt(x,FilterBank=cfb)

출력 인수

모두 축소

연속 웨이블릿 변환으로, 복소수 값으로 구성된 행렬로 반환됩니다. 기본적으로 cwt는 해석적 Morse (3,60) 웨이블릿을 사용합니다. 여기서 3은 대칭성이고 60은 시간과 대역폭의 곱입니다. cwt는 옥타브당 10개의 음을 사용합니다.

  • x가 실수 값인 경우 wt는 Na×N 행렬입니다. 여기서 Na는 스케일 수이고 N은 x의 샘플 수입니다.

  • x가 복소수 값인 경우 wt는 3차원 행렬입니다. 여기서 첫 번째 페이지는 양의 스케일(해석적 부분 또는 반시계 방향 성분)에 대한 CWT이고 두 번째 페이지는 음의 스케일(비해석적 부분 또는 시계 방향 성분)에 대한 CWT입니다.

최소 스케일과 최대 스케일은 주파수와 시간에 따른 웨이블릿의 에너지 산포를 기반으로 자동으로 결정됩니다. 스케일이 결정되는 방법에 대한 자세한 내용은 알고리즘 항목을 참조하십시오.

데이터형: single | double

스케일에서 주파수로의 CWT 변환으로, 벡터로 반환됩니다. 샘플링 주파수 fs를 지정할 경우 f는 헤르츠 단위입니다. fs를 지정하지 않으면 cwtf를 샘플당 주기로 반환합니다. 입력값 x가 복소수인 경우 스케일에서 주파수로의 변환은 wt의 두 페이지 모두에 적용됩니다.

스케일에서 주기로의 변환으로, ts와 동일한 Format 속성을 가진 duration형으로 구성된 배열로 반환됩니다. 각 행은 주기에 대응됩니다. 입력값 x가 복소수인 경우 스케일에서 주기로의 변환은 wt의 두 페이지 모두에 적용됩니다.

CWT의 영향 원뿔입니다. 샘플링 주파수 fs를 지정할 경우 영향 원뿔은 헤르츠 단위입니다. duration형 스칼라 ts를 지정할 경우 영향 원뿔은 ts와 동일한 Format 속성을 가진 duration형으로 구성된 배열입니다. 입력값 x가 복소수인 경우 영향 원뿔은 wt의 두 페이지 모두에 적용됩니다.

영향 원뿔은 CWT에서 가장자리 효과가 발생하는 위치를 나타냅니다. 영향 원뿔을 벗어나거나 영향 원뿔과 겹치는 영역은 가장자리 효과로 인해 신뢰도가 낮습니다. 자세한 내용은 Boundary Effects and the Cone of Influence 항목을 참조하십시오.

CWT에 사용되는 CWT 필터 뱅크로, cwtfilterbank 객체로 반환됩니다. cwtfilterbank 항목을 참조하십시오.

CWT의 스케일링 계수로, 실수 값 벡터 또는 복소수 값 벡터로 반환됩니다. scalingcfs의 길이는 입력값 x의 길이와 같습니다.

세부 정보

모두 축소

해석적 웨이블릿

해석적 웨이블릿은 음수 주파수에 대한 푸리에 변환이 0이 되는 복소수 값 웨이블릿입니다. 해석적 웨이블릿은 CWT로 시간-주파수 분석을 수행할 때 좋습니다. 웨이블릿 계수가 복소수 값이므로 계수는 분석 중인 신호의 위상과 진폭 정보를 제공합니다. 해석적 웨이블릿은 실제 비정상 신호의 주파수 성분이 시간의 함수로 어떻게 전개되는지 연구하는 데 적합합니다.

해석적 웨이블릿은 급격히 감소하는 함수에 거의 전적으로 기반합니다. ψ(t)가 시간 영역에서 급격히 감소하는 해석적 함수인 경우 푸리에 변환 ψ^(ω)는 주파수 영역에서 급격히 감소하는 함수이며 0<α<β인 일부 구간 α<ω<β 밖에서는 작은 값을 갖습니다. 직교 및 쌍직교 웨이블릿은 일반적으로 시간 영역에서 콤팩트(compact)한 지지 범위를 갖도록 설계됩니다. 시간 영역에서 콤팩트(compact)한 지지 범위를 갖는 웨이블릿은 시간 영역에서 급격히 감소하는 웨이블릿보다 주파수 영역에서의 에너지 농도가 상대적으로 떨어집니다. 대부분의 직교 및 쌍직교 웨이블릿은 푸리에 영역에서 대칭이 아닙니다.

신호의 시간-주파수 결합 표현을 얻는 것이 목표라면 cwt 또는 cwtfilterbank를 사용하는 것이 좋습니다. 두 함수 모두 다음의 해석적 웨이블릿을 지원합니다.

  • Morse 웨이블릿 패밀리(디폴트 값)

  • 해석적 Morlet(Gabor) 웨이블릿

  • 범프 웨이블릿

Morse 웨이블릿에 관한 자세한 내용은 Morse Wavelets 항목을 참조하십시오. 푸리에 영역에서 각주파수에 대해 정의되는 내용은 다음과 같습니다.

  • 해석적 Morlet은 다음과 같이 정의됩니다.

    여기서 는 구간 [0,∞)의 표시 함수입니다.

  • 범프 웨이블릿은 다음과 같이 정의됩니다.

    여기서 ϵ = 2.2204×10-16입니다.

직교 또는 쌍직교 웨이블릿을 사용하여 시간-주파수 분석을 수행하려면 modwpt를 사용하는 것이 좋습니다.

시간-주파수 분석에 웨이블릿을 사용하는 경우 일반적으로 결과 해석을 위해 스케일을 주파수 또는 주기로 변환합니다. cwtcwtfilterbank가 그 변환을 수행합니다. cwt의 선택적 출력 인수 fbscales를 사용하여 대응하는 관련 스케일을 구할 수 있습니다.

응용 사례에 적합한 웨이블릿을 선택하는 방법에 대한 지침은 Choose a Wavelet 항목을 참조하십시오.

  • 이전 cwt 함수에 대한 구문이 계속 작동하지만, 더 이상 권장되지 않습니다. 현재 버전의 cwt를 사용하십시오. 이전 버전과 현재 버전이 모두 동일한 함수 이름을 사용합니다. 함수에 대한 입력값에 따라 함수의 버전이 자동으로 결정됩니다. cwt 함수 구문이 변경됨 항목을 참조하십시오.

  • 예를 들어, for 루프 내에서 CWT를 여러 번 수행하는 경우 권장되는 워크플로는 먼저 cwtfilterbank 객체를 만든 다음 wt 객체 함수를 사용하는 것입니다. 이 워크플로는 오버헤드를 최소화하고 성능을 최대화합니다. 여러 시계열에 CWT 필터 뱅크 사용하기 항목을 참조하십시오.

알고리즘

모두 축소

최소 스케일

최소 스케일을 결정하려면 기저 웨이블릿의 피크 주파수 ωx를 구해야 합니다. Morse 웨이블릿의 경우 π 라디안에서 웨이블릿의 푸리에 변환이 피크 주파수의 10%와 같도록 웨이블릿을 팽창시킵니다. 가장 작은 스케일은 가장 큰 주파수에서 발생합니다.

s0=ωx'π

결과적으로 가장 작은 스케일은 (2, s0)의 최솟값입니다. Morse 웨이블릿의 경우 가장 작은 스케일은 일반적으로 s0입니다. Morlet 웨이블릿의 경우 가장 작은 스케일은 일반적으로 2입니다.

최대 스케일

CWT의 최소 스케일과 최대 스케일은 모두 주파수와 시간에 따른 웨이블릿의 에너지 산포를 기반으로 자동으로 결정됩니다. 최대 스케일을 결정하기 위해 CWT는 다음 알고리즘을 사용합니다.

시간에 따른 Morse 웨이블릿의 표준편차 σt는 약 P22이며, 여기서 P2은 시간과 대역폭의 곱입니다. 주파수에 따른 Morse 웨이블릿의 표준편차 σf는 약 122P2입니다. 웨이블릿을 s>1로 스케일링하면 지속 시간이 2sσt=N으로 변경되고, 이는 입력값의 전체 길이(N개 샘플)와 같도록 늘어난 웨이블릿입니다. 이 웨이블릿을 평행 이동하거나 범위 초과에 의한 순환을 일으키는 일 없이 더 늘릴 수 없으므로 가장 큰 스케일은 floor(N2σt)입니다.

웨이블릿 변환 스케일은 2의 거듭제곱이며 s0(21NV)j로 나타냅니다. NV는 옥타브당 음의 개수이고, j의 범위는 0에서 가장 큰 스케일까지입니다. 특정한 작은 스케일의 경우 s0은 다음과 같습니다.

s0(21NV)jN2σt

log2로 변환됩니다.

jlog2(21NV)log2(N2σts0)

jNVlog2(N2σts0)

따라서 최대 스케일은 다음과 같습니다.

s0(21NV)floor(NVlog2(N2σts0))

CWT에 대한 L1 노름

적분식에서 CWT는 에너지를 보존합니다. 그러나 CWT를 수치적으로 구현하면 에너지가 보존되지 않습니다. 이 경우 사용하는 정규화에 관계없이 CWT는 정규 직교 변환이 아닙니다. cwt 함수는 L1 정규화를 사용합니다.

웨이블릿 변환은 일반적으로 웨이블릿의 L2 정규화를 사용합니다. L2 노름의 경우 신호를 1/s만큼 팽창시키는 것(여기서 s는 0보다 큼)은 다음과 같이 정의됩니다.

x(ts)22=sx(t)22

에너지는 이제 원래 에너지의 s배입니다. 푸리에 변환에 포함된 경우 1s을 곱하면 각각의 스케일에 서로 다른 가중치가 생성되어 적용되므로 높은 주파수의 피크가 낮은 주파수의 피크보다 더 많이 감소합니다.

많은 응용 사례에서 L1 정규화가 더 적합합니다. L1 노름 정의에는 값을 제곱하는 부분이 없기 때문에 보존 인자는 1s 대신 1/s입니다. L2 노름에서와 같이 고주파수 진폭이 줄어드는 대신 L1 정규화에서는 모든 주파수 진폭이 동일한 값으로 정규화됩니다. 따라서 L1 노름을 사용하면 신호 표현이 더 정확해집니다. 두 복소수 지수의 연속 웨이블릿 변환 예제를 참조하십시오.

참고 문헌

[1] Lilly, J. M., and S. C. Olhede. “Generalized Morse Wavelets as a Superfamily of Analytic Wavelets.” IEEE Transactions on Signal Processing 60, no. 11 (November 2012): 6036–6041. https://doi.org/10.1109/TSP.2012.2210890.

[2] Lilly, J.M., and S.C. Olhede. “Higher-Order Properties of Analytic Wavelets.” IEEE Transactions on Signal Processing 57, no. 1 (January 2009): 146–160. https://doi.org/10.1109/TSP.2008.2007607.

[3] Lilly, J. M. jLab: A data analysis package for MATLAB®, version 1.6.2. 2016. http://www.jmlilly.net/jmlsoft.html.

[4] Lilly, Jonathan M. “Element Analysis: A Wavelet-Based Method for Analysing Time-Localized Events in Noisy Time Series.” Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences 473, no. 2200 (April 30, 2017): 20160776. https://doi.org/10.1098/rspa.2016.0776.

확장 기능

버전 내역

R2016b에 개발됨

모두 확장