cwt
연속 1차원 웨이블릿 변환
구문
설명
는 wt = cwt(x)x의 CWT(연속 웨이블릿 변환)를 반환합니다. CWT는 대칭성 파라미터인 감마()가 3이고 시간과 대역폭의 곱이 60인 해석적 Morse 웨이블릿을 사용하여 구합니다. cwt는 옥타브당 10개의 음을 사용합니다. 최소 스케일과 최대 스케일은 주파수와 시간에 따른 웨이블릿의 에너지 산포를 기반으로 자동으로 결정됩니다.
cwt 함수는 L1 정규화를 사용합니다. L1 정규화를 사용할 때 서로 다른 스케일에서 데이터에 동일한 진폭의 진동 성분이 있는 경우 CWT에서 이들은 동일한 크기를 갖게 됩니다. L1 정규화를 사용하면 신호 표현이 더 정확해집니다. CWT에 대한 L1 노름 및 두 복소수 지수의 연속 웨이블릿 변환 항목을 참조하십시오.
[___,는 CWT에 사용되는 필터 뱅크를 반환합니다. coi,fb] = cwt(___)cwtfilterbank 항목을 참조하십시오.
[___,는 웨이블릿 변환의 스케일링 계수를 반환합니다.fb,scalingcfs] = cwt(___)
[___] = cwt(___,는 하나 이상의 추가 이름-값 인수를 지정합니다. 예를 들어, Name=Value)wt = cwt(x,TimeBandwidth=40,VoicesPerOctave=20)은 시간과 대역폭의 곱 40과 옥타브당 20개의 음을 지정합니다.
cwt(___)를 출력 인수를 지정하지 않고 사용하면, 현재 Figure 창 또는 지정된 대상 부모 컨테이너에 CWT 스케일로그램을 플로팅합니다. 스케일로그램은 시간과 주파수의 함수로 플로팅된 CWT의 절댓값입니다. 주파수는 로그 스케일로 플로팅됩니다. 가장자리 효과가 유의미해지는 위치를 나타내는 영향 원뿔(cone of influence)도 플로팅됩니다. 흰색 파선 밖의 회색 영역이 가장자리 효과가 유의미한 영역을 나타냅니다.
복소수 값을 갖는 입력 신호의 경우, 대상 부모 컨테이너를 지정하지 않으면 함수는 현재 Figure 창에서 양수(반시계 방향) 성분과 음수(시계 방향) 성분을 개별 스케일로그램에 플로팅합니다. 그렇지 않으면 함수는 대상 부모 컨테이너에 양수 성분과 음수 성분을 결합하여 플로팅합니다.
샘플링 주파수 또는 샘플링 주기를 지정하지 않으면 주파수는 샘플당 주기로 플로팅됩니다. 샘플링 주파수를 지정할 경우 주파수는 헤르츠 단위입니다. 샘플링 주기를 지정할 경우 스케일로그램은 시간과 주기의 함수로 플로팅됩니다. 입력 신호가 타임테이블인 경우 스케일로그램은 시간과 주파수(단위: 헤르츠)의 함수로 플로팅되고 RowTimes를 시간 축의 기반으로 사용합니다.
스케일로그램 점의 크기, 시간 및 주파수를 보려면 Figure 좌표축 도구 모음에서 데이터팁을 활성화하고 스케일로그램에서 원하는 점을 클릭하십시오.

참고
cwt 함수는 스케일로그램을 플로팅하기 전에 현재 Figure를 지웁니다. 스케일로그램을 서브플롯에 표시하는 방법을 알아보려면 서브플롯에 CWT 스케일로그램 플로팅하기 항목을 참조하십시오.
예제
파일 mtlb를 불러옵니다. 이 파일에는 음성 샘플 mtlb와 샘플 레이트 Fs가 들어 있습니다.
load mtlb해석적 Morlet 웨이블릿을 사용하여 얻은 음성 샘플의 스케일로그램을 표시합니다.
cwt(mtlb,"amor",Fs)
디폴트 Morse 웨이블릿을 사용하여 얻은 스케일로그램과 비교합니다.
cwt(mtlb,Fs)

고베 지진 데이터의 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

CWT, 주파수, 영향 원뿔을 구합니다.
[wt,f,coi] = cwt(kobe,1);
영향 원뿔을 포함하여 스케일로그램을 확인합니다.
cwt(kobe,1)

샘플링 주파수 대신 샘플링 주기를 지정하여 CWT, 시간 주기 및 영향 원뿔을 구합니다.
[wt,periods,coi] = cwt(kobe,minutes(1/60));
샘플링 주기를 지정할 때 생성된 스케일로그램을 확인합니다.
cwt(kobe,minutes(1/60))

32Hz 및 64Hz의 주파수를 갖고 진폭이 서로 다른 두 개의 복소수 지수를 생성합니다. 데이터는 1초 동안 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*randn(size(t))); z = z+wgnNoise;
Morse 웨이블릿을 사용하여 CWT를 구하고 플로팅합니다.
cwt(z,Fs)

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

R2026a 이후
NPG2006 데이터셋[5]을 불러옵니다. 이 데이터는 복소수 값을 가지며, 와류에 갇힌 수중 부유체의 궤적입니다. 동쪽 방향 및 북쪽 방향 변위를 플로팅합니다. 삼각형은 초기 위치를 표시합니다.
load npg2006 plot(npg2006.cx) hold on plot(npg2006.cx(1),"^",MarkerSize=11,Color="r", ... MarkerFaceColor="r") hold off grid on xlabel("Eastward Displacement (km)") ylabel("Northward Displacement (km)")

데이터의 연속 웨이블릿 변환을 시각화합니다. 샘플링 주기는 4시간입니다. 데이터가 복소수 값이므로, 함수는 양수(반시계 방향) 성분과 음수(시계 방향) 성분을 개별 스케일로그램에 플로팅합니다. 부유체의 시계 방향 회전은 시계 방향 회전 스케일로그램에서 캡처됩니다.
cwt(npg2006.cx,hours(4))

이 예제에서는 신호에서 진동 성분의 진폭이 그에 대응하는 웨이블릿 계수의 진폭과 일치함을 보여줍니다.
시간적으로 서로 겹치지 않는 지지 범위를 갖는 두 개의 정현파로 구성된 신호를 생성합니다. 한 정현파는 주파수가 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")

신호에 적용할 수 있는 CWT 필터 뱅크를 만듭니다. 신호 성분 주파수를 알고 있으므로 필터 뱅크의 주파수 제한을 알려진 주파수가 포함된 좁은 범위로 설정합니다. 범위를 확인하기 위해 필터 뱅크에 대한 크기 주파수 응답을 플로팅합니다.
fb = cwtfilterbank(SignalLength=numel(x),SamplingFrequency=Fs,...
FrequencyLimits=[20 100]);
freqz(fb)
cwt 및 필터 뱅크를 사용하여 신호의 스케일로그램을 플로팅합니다.
cwt(x,FilterBank=fb)

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

R2026a 이후
이 예제에서는 서로 다른 경계 확장이 스케일로그램에 어떤 영향을 미칠 수 있는지 보여줍니다.
시간적으로 서로 겹치지 않는 지지 범위를 갖는 두 개의 정현파로 구성된 신호를 생성합니다. 정현파의 주파수는 각각 100Hz와 400Hz입니다. 신호는 1/10초 동안 10kHz로 샘플링됩니다.
frq1 = 100; frq2 = 400; Fs = 10e3; tm = 0:1/Fs:0.1-1/Fs; len = length(tm); brk = tm(floor(len/2)+1); sig = sin(2*pi*frq1*tm).*(tm>=0 & tm<brk)+ ... sin(2*pi*frq2*tm).*(tm>=brk & tm<=tm(end)); plot(tm,sig) grid on title("Signal") xlabel("Time (s)") ylabel("Amplitude")

지원되는 각 경계 확장 방식에 대해, 해당 확장을 사용하여 신호의 CWT를 구합니다.
[wtr,f] = cwt(sig,Fs,Boundary="reflection"); wtp = cwt(sig,Fs,Boundary="periodic"); wtz = cwt(sig,Fs,Boundary="zeropad");
각 CWT의 스케일로그램을 플로팅합니다. 경계에서 서로 다른 주파수가 발생하기 때문에, 주기적 경계 확장("periodic")을 사용하면 래핑 효과(wrap-around effect)가 발생합니다. 대칭 경계 확장("reflection")을 사용하면 정현파가 반사되므로 아티팩트가 생성됩니다. 이 신호의 경우 0 채우기("zeropad")를 사용하면 경계 아티팩트가 생성되지 않습니다.
figure(Position=[0 0 600 600]); t=tiledlayout(3,1); nexttile pcolor(tm,f,abs(wtp),EdgeColor="none") xticks([]) yscale("log") ylabel("Frequency (Hz)") title("Boundary Extension: Periodic") nexttile pcolor(tm,f,abs(wtr),EdgeColor="none") xticks([]) yscale("log") ylabel("Frequency (Hz)") title("Boundary Extension: Reflection") nexttile pcolor(tm,f,abs(wtz),EdgeColor="none") yscale("log") title("Boundary Extension: Zero Padding") xlabel("Time (s)") ylabel("Frequency (Hz)") title(t,"Scalograms")

이 예제에서는 여러 시계열에 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 컴파일러가 있는지 확인하십시오. 구성이 적절한지 확인하려면 GPU 환경 검사 및 설정 앱 (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)

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;
CWT에서 주파수는 2의 거듭제곱으로 계산됩니다. 주파수 눈금과 눈금 레이블을 2의 거듭제곱 단위로 만들려면 다음을 수행하면 됩니다.
newplot
cwt(x,1000)
AX = gca;
freq = 2.^(round(log2(minf)):round(log2(maxf)));
AX.YTickLabelMode = "auto";
AX.YTick = freq;
이 예제에서는 플로팅을 위해 각 수준의 최대 절댓값으로 스케일로그램 값을 스케일링하는 방법을 보여줍니다.
신호를 불러오고 디폴트 스케일로그램을 표시합니다. 컬러맵을 pink(240)으로 변경합니다.
load noisdopp
cwt(noisdopp)
colormap(pink(240))
신호에 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

이 예제에서는 Morse 웨이블릿의 시간과 대역폭의 곱 을 증가시키면 포락선 아래에 더 많은 진동을 갖는 웨이블릿이 생성된다는 것을 알 수 있습니다. 이 증가하면 주파수 영역에서 웨이블릿이 좁아집니다.
두 개의 필터 뱅크를 생성합니다. 첫 번째 필터 뱅크의 디폴트 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 웨이블릿보다 포락선 아래에 더 많은 진동을 갖는다는 사실을 확인합니다.
tiledlayout(2,1) nexttile 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") nexttile 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")

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 서브플롯에 CWT 스케일로그램을 플로팅하는 방법을 보여줍니다.
음성 샘플을 불러옵니다. 데이터는 7418Hz로 샘플링됩니다. 디폴트 CWT 스케일로그램을 플로팅합니다.
load mtlb
cwt(mtlb,Fs)
신호의 CWT와, CWT의 스케일을 주파수로 변환한 결과를 구합니다.
[cfs,frq] = cwt(mtlb,Fs);
cwt 함수는 스케일로그램에 시간 좌표축과 주파수 좌표축을 설정합니다. 샘플 시간을 나타내는 벡터를 생성합니다.
tms = (0:numel(mtlb)-1)/Fs;
새 Figure에서 원래 신호를 상부 서브플롯에, 스케일로그램을 하부 서브플롯에 플로팅합니다. 주파수를 로그 스케일로 플로팅합니다.
figure tiledlayout(2,1) nexttile plot(tms,mtlb) axis tight title("Signal and Scalogram") xlabel("Time (s)") ylabel("Amplitude") nexttile surface(tms,frq,abs(cfs)) axis tight shading flat xlabel("Time (s)") ylabel("Frequency (Hz)") set(gca,"yscale","log")

R2026a 이후
4개 신호에 대한 CWT 스케일로그램을 지정된 대상 좌표축과 패널 컨테이너에 플로팅합니다.
CWT 스케일로그램을 대상 좌표축에 플로팅하기
음성 샘플을 불러옵니다. 샘플 레이트는 7418Hz입니다. 고베 지진 데이터를 불러옵니다. 샘플 레이트는 1Hz입니다.
load mtlb FsSpeech = 7418; load kobe FsKobe = 1;
새 Figure 창의 남서쪽 코너와 북동쪽 코너에 두 개의 좌표축을 만듭니다.
fig = figure(Position=[100 100 600 600]); ax1 = axes(fig,Position=[0.1 0.1 0.55 0.35]); ax2 = axes(fig,Position=[0.4 0.6 0.55 0.35]);
음성 데이터와 고베 데이터의 CWT 스케일로그램을 각각 Figure의 남서쪽 좌표축과 북동쪽 좌표축에 플로팅합니다.
cwt(mtlb,FsSpeech,Parent=ax1) title(ax1,"Magnitude Scalogram - Speech") cwt(kobe,FsKobe,Parent=ax2) title(ax2,"Magnitude Scalogram - Kobe")

CWT 스케일로그램을 대상 UI 좌표축에 플로팅하기
잡음이 있는 도플러 신호를 불러옵니다.
load noisdopp새 UI Figure 창의 남서쪽 코너에 좌표축을 만듭니다.
uif = uifigure(Position=[100 100 720 540]); ax3 = uiaxes(uif,Position=[60 70 400 200]);
잡음이 있는 도플러 신호의 CWT 스케일로그램을 Figure 좌표축에 플로팅합니다.
cwt(noisdopp,Parent=ax3)
title(ax3,"Magnitude Scalogram - Doppler")
CWT 스케일로그램을 대상 패널 컨테이너에 플로팅하기
시간적으로 서로 겹치지 않는 지지 범위를 갖는 두 개의 정현파로 구성된 신호를 생성합니다. 한 정현파는 주파수가 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);
UI Figure 창의 북동쪽 코너에 패널 컨테이너를 추가합니다.
p = uipanel(uif,Position=[310 330 350 200], ... Title="CWT Scalogram in Panel Container");
정현파 신호의 CWT 스케일로그램을 패널 컨테이너에 플로팅합니다.
cwt(x,Fs,Parent=p)

R2026a 이후
1초 동안 1kHz로 샘플링된 신호를 생성합니다. 이 신호는 세 개의 복소수 값 정현파와 백색 잡음으로 구성됩니다. 각 정현파는 서로 다른 주파수를 갖습니다. 두 개의 주파수는 음수입니다. 이 정현파들은 시간적으로 서로 겹치지 않는 지지 범위를 갖습니다.
Fs = 1e3; t = 0:1/Fs:1; z = exp(1i*2*pi*150*t).*(t>=0.1 & t<0.3) + ... exp(-1i*2*pi*300*t).*(t>=0.3 & t<0.7) + ... exp(-1i*2*pi*100*t).*(t>0.7); wgnNoise = 0.05/sqrt(2)*(randn(size(t)) + ... 1i*randn(size(t))); sig = z + wgnNoise;
대상 부모 컨테이너를 지정하지 않고 신호의 스케일로그램을 플로팅합니다. 신호가 복소수 값이므로 함수는 양수 성분과 음수 성분을 개별 스케일로그램에 플로팅합니다. 함수는 주파수에 로그 스케일을 사용합니다.
cwt(sig,Fs)

새 Figure 창에 좌표축을 만듭니다. Parent 이름-값 인수 구문을 사용하여 좌표축에 스케일로그램을 플로팅합니다. 또한 CWT 계수와 주파수를 구합니다. 음수 성분은 플롯에서 음수 주파수에 해당합니다. 함수는 주파수에 선형 스케일을 사용합니다.
fig = figure; ax = axes(fig,Position=[0.1 0.1 0.5 0.6]); [cfs,f] = cwt(sig,Fs,Parent=ax);

함수는 CWT 계수를 3차원 배열로 반환합니다. 첫 번째 페이지는 양수(반시계 방향) 성분에 해당하고, 두 번째 페이지는 음수(시계 방향) 성분에 해당합니다.
계수와 주파수를 사용하여 새 Figure에 대상 좌표축 플롯을 다시 만들 수 있습니다. 두 페이지를 재배열하고 결합합니다.
flpdp = flip(cfs(:,:,2)); cfs2 = cat(1,cfs(:,:,1),flpdp);
주파수 벡터를 재배열하고 결합하여 주파수가 양수 값에서 음수 값으로 이어지도록 합니다.
flpdv = flip(-f); f2 = cat(1,f,flpdv);
새 Figure에 좌표축 ax2를 추가합니다. surf 함수를 사용하여, 결합된 계수의 절댓값을 ax2에 플로팅합니다.
ax2 = axes(figure); surf(ax2,t,f2,abs(cfs2),EdgeColor="none") view(ax2,[0,90]) axis(ax2,"tight") set(ax2,YDir="normal") xlabel(ax2,"Time (secs)") ylabel(ax2,"Frequency (Hz)") c = colorbar(ax2); c.Label.String = "Magnitude"; title(ax2,"Recreated Scalogram")

R2026a 이후
NPG2006 데이터 세트를 불러옵니다. 복소수 값 데이터는 와류에 갇힌 수중 부유체의 궤적입니다. 샘플 주기는 4시간입니다. 동쪽 방향 및 북쪽 방향 변위를 플로팅합니다. 삼각형은 초기 위치를 표시합니다.
load npg2006 sig = npg2006.cx; plot(sig) hold on plot(npg2006.cx(1),"^",MarkerSize=11,Color="r", ... MarkerFaceColor=[1 0 0 ]) hold off grid on xlabel("Eastward Displacement (km)") ylabel("Northward Displacement (km)")

새 UI Figure 창에 좌표축을 만듭니다. Parent 이름-값 인수를 사용하여 좌표축에 스케일로그램을 플로팅하고, 주기 p와 영향 원뿔 coi도 구합니다. 샘플 주기를 시간 단위로 지정하면 p와 coi도 시간 단위의 duration형 배열이 됩니다. p와 coi가 duration형 배열이더라도, 대상 부모 컨테이너와 복소수 값 신호를 지정하여 cwt를 호출하면, 함수는 스케일로그램을 주파수 기준으로 플로팅한다는 점에 유의하십시오.
uif = uifigure(Position=[100 100 720 540]); axf = uiaxes(uif,Position=[15 105 575 400]); [cfs,p,coi] = cwt(sig,hours(4),Parent=axf);

스케일로그램의 시계 방향 성분과 반시계 방향 성분을 주기 기준으로 시각화하려면, 대상 부모 컨테이너 또는 출력 인수를 지정하지 않고 cwt를 사용하십시오.
figure cwt(sig,hours(4))

입력 인수
입력 신호로, 벡터로 지정되거나 단일 변수가 규칙적으로 샘플링된 timetable형으로 지정됩니다. 입력값 x는 적어도 4개의 샘플을 가져야 합니다.
데이터형: single | double
복소수 지원 여부: 예
CWT를 계산하는 데 사용되는 해석적 웨이블릿입니다. wname에 유효한 옵션은 "morse", "amor", "bump"이며, 각각 Morse, Morlet(Gabor), 범프 웨이블릿을 지정합니다.
디폴트 Morse 웨이블릿은 대칭성 파라미터인 감마()가 3이고 시간과 대역폭의 곱이 60입니다.
데이터형: char | string
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
예: wt = cwt(x,"bump",VoicesPerOctave=10)은 범프 웨이블릿과 옥타브당 10개의 음을 사용하여 x의 CWT를 반환합니다.
CWT에 사용할 주파수 제한으로, 양의 요소 2개를 가진 순증가하는 벡터로 지정됩니다.
첫 번째 요소는 가장 낮은 피크 통과대역 주파수를 지정합니다. 이 요소는 시간 표준편차의 두 배를 신호 길이로 나눈 값에 웨이블릿 피크 주파수(단위: 헤르츠)를 곱한 값보다 크거나 같아야 합니다.
두 번째 요소는 가장 높은 피크 통과대역 주파수를 지정합니다. 이 요소는 나이퀴스트 주파수보다 작거나 같아야 합니다.
주파수 상한
freqMax와 주파수 하한freqMin비율의 밑이 2인 로그는1/NV보다 크거나 같아야 합니다. 여기서NV는 옥타브당 음의 개수입니다.log2(freqMax/freqMin) ≥ 1/NV.
복소수 값 신호의 경우 (-1) × flimits가 비해석적(anti-analytic) 부분에 사용되며, 여기서 flimits는 FrequencyLimits로 지정된 벡터입니다.
참고
허용 가능한 범위를 벗어난 주파수 제한을 지정할 경우 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) 부분에 사용되며, 여기서 plimits는 PeriodLimits로 지정된 벡터입니다.
참고
허용 가능한 범위를 벗어난 주기 제한을 지정하면 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)입니다.
기본적으로 cwt 함수는 웨이블릿에 따라 달라지는 주파수 제한을 사용합니다. 이 제한은 주파수와 시간에 따른 웨이블릿의 에너지 산포를 기반으로 합니다. 시간과 대역폭의 곱을 변경하면 디폴트 주파수 제한도 변경됩니다. (마찬가지로, 디폴트 주기 제한도 변경됩니다.) 서로 다른 시간과 대역폭의 곱을 사용하여 얻은 신호의 연속 웨이블릿 변환을 비교하려면, 서로 다른 변환에 대해 FrequencyLimits를 동일한 값으로 설정하십시오.
TimeBandwidth를 지정할 경우 WaveletParameters는 지정할 수 없습니다. 대칭성 및 시간과 대역폭의 곱을 모두 지정하려면 대신 WaveletParameters를 사용하십시오.
Morse Wavelets 표기법에서 TimeBandwidth는 P2입니다.
Morse 웨이블릿의 대칭성 및 시간과 대역폭의 곱으로, 스칼라로 구성된 요소를 2개 가진 벡터로 지정됩니다. 첫 번째 요소는 대칭성 이며 1보다 크거나 같아야 합니다. 두 번째 요소는 시간과 대역폭의 곱이며 보다 크거나 같아야 합니다. 에 대한 시간과 대역폭의 곱의 비는 40을 초과할 수 없습니다.
가 3인 경우 Morse 웨이블릿은 주파수 영역에서 완벽하게 대칭이고 왜도가 0입니다. 가 3보다 큰 경우 왜도는 양수입니다. 가 3보다 작은 경우 왜도는 음수입니다. 자세한 내용은 Morse Wavelets 항목을 참조하십시오.
기본적으로 cwt 함수는 웨이블릿에 따라 달라지는 주파수 제한을 사용합니다. 이 제한은 주파수와 시간에 따른 웨이블릿의 에너지 산포를 기반으로 합니다. 웨이블릿 파라미터를 변경하면 디폴트 주파수 제한도 변경됩니다. (마찬가지로, 디폴트 주기 제한도 변경됩니다.) 서로 다른 웨이블릿 파라미터를 사용하여 얻은 신호의 연속 웨이블릿 변환을 비교하려면, 서로 다른 변환에 대해 FrequencyLimits를 동일한 값으로 설정하십시오.
WaveletParameters를 지정할 경우 TimeBandwidth는 지정할 수 없습니다.
R2026a 이후
신호의 경계 확장으로, 다음 값 중 하나로 지정됩니다.
"reflection"— 신호를 좌우 경계에서 대칭적으로 확장합니다."periodic"— 신호를 주기적으로 확장합니다."zeropad"— 신호를 좌우 경계에서 0 채우기로 확장합니다.
"reflection" 또는 "zeropad"를 지정할 경우 cwt 함수는 내부적으로 입력 신호를 원래 크기의 두 배로 확장합니다. 반면 "periodic"을 지정하면 함수는 신호를 주기 신호로 취급합니다. 신호 크기는 변경되지 않습니다.
참고
스케일링 계수 및 근사 합성 필터와 함께 icwt를 사용하여 CWT를 역변환하려면 Boundary를 "periodic"으로 설정하십시오.
CWT를 계산하는 데 사용할 CWT 필터 뱅크로, cwtfilterbank 객체로 지정됩니다. FilterBank를 설정하면 다른 옵션은 지정할 수 없습니다. CWT 계산을 위한 모든 옵션은 필터 뱅크의 속성으로 정의됩니다. 자세한 내용은 cwtfilterbank 항목을 참조하십시오.
x가 타임테이블인 경우 fb의 샘플링 주파수 또는 샘플링 주기는 타임테이블의 RowTimes에 의해 결정된 샘플링 주파수 또는 샘플링 주기와 일치해야 합니다.
예: wt = cwt(x,FilterBank=cfb)
R2026a 이후
대상 부모 컨테이너로, Axes 객체, UIAxes 객체 또는 Panel 객체로 지정됩니다.
를 지정하고 Parent=PP가 비어 있지 않으면, 출력 인수를 지정한 경우에도 cwt 함수는 지정된 대상 부모 컨테이너에 시간과 주파수의 함수로 스케일로그램을 플로팅합니다. CWT 스케일로그램을 대상 좌표축 및 패널 컨테이너에 플로팅하기 항목을 참조하십시오.
입력 신호가 복소수 값이면 cwt는 양수(반시계 방향) 성분과 음수(시계 방향) 성분을 결합하고 그 결과를 대상 부모에 플로팅합니다. 음수 성분은 플롯에서 음수 주파수에 해당합니다. 복소수 값 신호의 CWT 스케일로그램을 대상 좌표축에 플로팅하기 항목을 참조하십시오. 웨이블릿 시간-주파수 분석기 앱에서 복소수 값 신호의 스케일로그램에 대한 동일한 시각화를 얻을 수 있습니다. 이렇게 하려면 분석기 탭의 기본 설정 아래에서 복소 신호에서 양의 성분 및 음의 성분 구분 체크박스의 선택을 해제하십시오.
복소수 값 신호에 대해 샘플링 주기와 비어 있지 않은 부모를 지정할 경우 cwt는 플롯에 주파수를 사용합니다. 그러나 이 함수는 관련된 출력 인수를 여전히 duration형 배열로 반환합니다. 복소수 값 신호의 샘플 주기 및 Parent 이름-값 인수 지정하기 항목을 참조하십시오.
MATLAB® 그래픽스의 대상 컨테이너와 부모-자식 관계에 대한 자세한 내용은 그래픽스 객체 계층 구조 항목을 참조하십시오. 앱 설계 시 UIAxes 객체와 Panel 객체에서 Parent를 사용하는 방법에 대한 자세한 내용은 Plot Spectral Representations of Signal in App Designer 항목을 참조하십시오.
출력 인수
연속 웨이블릿 변환으로, 복소수 값으로 구성된 행렬로 반환됩니다. 기본적으로 cwt는 해석적 Morse (3,60) 웨이블릿을 사용합니다. 여기서 3은 대칭성이고 60은 시간과 대역폭의 곱입니다. cwt는 옥타브당 10개의 음을 사용합니다.
x가 실수 값인 경우wt는 Na×N 행렬입니다. 여기서 Na는 스케일 수이고 N은x의 샘플 수입니다.x가 복소수 값인 경우wt는 3차원 행렬입니다. 여기서 첫 번째 페이지는 양의 스케일(해석적 부분 또는 반시계 방향 성분)에 대한 CWT이고 두 번째 페이지는 음의 스케일(비해석적 부분 또는 시계 방향 성분)에 대한 CWT입니다.
최소 스케일과 최대 스케일은 주파수와 시간에 따른 웨이블릿의 에너지 산포를 기반으로 자동으로 결정됩니다. 스케일이 결정되는 방법에 대한 자세한 내용은 알고리즘 항목을 참조하십시오.
데이터형: single | double
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로 시간-주파수 분석을 수행할 때 좋습니다. 웨이블릿 계수가 복소수 값이므로 계수는 분석 중인 신호의 위상과 진폭 정보를 제공합니다. 해석적 웨이블릿은 실제 비정상 신호의 주파수 성분이 시간의 함수로 어떻게 전개되는지 연구하는 데 적합합니다.
해석적 웨이블릿은 급격히 감소하는 함수에 거의 전적으로 기반합니다. 가 시간 영역에서 급격히 감소하는 해석적 함수인 경우 푸리에 변환 는 주파수 영역에서 급격히 감소하는 함수이며 인 일부 구간 밖에서는 작은 값을 갖습니다. 직교 및 쌍직교 웨이블릿은 일반적으로 시간 영역에서 콤팩트(compact)한 지지 범위를 갖도록 설계됩니다. 시간 영역에서 콤팩트(compact)한 지지 범위를 갖는 웨이블릿은 시간 영역에서 급격히 감소하는 웨이블릿보다 주파수 영역에서의 에너지 농도가 상대적으로 떨어집니다. 대부분의 직교 및 쌍직교 웨이블릿은 푸리에 영역에서 대칭이 아닙니다.
신호의 시간-주파수 결합 표현을 얻는 것이 목표라면 cwt 또는 cwtfilterbank를 사용하는 것이 좋습니다. 두 함수 모두 다음의 해석적 웨이블릿을 지원합니다.
Morse 웨이블릿 패밀리(디폴트 값)
해석적 Morlet(Gabor) 웨이블릿
범프 웨이블릿
Morse 웨이블릿에 관한 자세한 내용은 Morse Wavelets 항목을 참조하십시오. 푸리에 영역에서 각주파수에 대해 정의되는 내용은 다음과 같습니다.
해석적 Morlet은 다음과 같이 정의됩니다.

여기서
는 구간 [0,∞)의 표시 함수입니다.범프 웨이블릿은 다음과 같이 정의됩니다.

여기서 ϵ = 2.2204×10-16입니다.
직교 또는 쌍직교 웨이블릿을 사용하여 시간-주파수 분석을 수행하려면 modwpt를 사용하는 것이 좋습니다.
시간-주파수 분석에 웨이블릿을 사용하는 경우 일반적으로 결과 해석을 위해 스케일을 주파수 또는 주기로 변환합니다. cwt 와 cwtfilterbank가 그 변환을 수행합니다. cwt의 선택적 출력 인수 fb에 scales를 사용하여 대응하는 관련 스케일을 구할 수 있습니다.
응용 사례에 적합한 웨이블릿을 선택하는 방법에 대한 지침은 Choose a Wavelet 항목을 참조하십시오.
팁
이전
cwt함수에 대한 구문이 계속 작동하지만, 더 이상 권장되지 않습니다. 현재 버전의cwt를 사용하십시오. 이전 버전과 현재 버전이 모두 동일한 함수 이름을 사용합니다. 함수에 대한 입력값에 따라 함수의 버전이 자동으로 결정됩니다. cwt 함수 구문이 변경됨 항목을 참조하십시오.예를 들어, for 루프 내에서 CWT를 여러 번 수행하는 경우 권장되는 워크플로는 먼저
cwtfilterbank객체를 만든 다음wt객체 함수를 사용하는 것입니다. 이 워크플로는 오버헤드를 최소화하고 성능을 최대화합니다. 여러 시계열에 CWT 필터 뱅크 사용하기 항목을 참조하십시오.
알고리즘
cwt 함수에서 지원되는 해석적 웨이블릿의 경우 푸리에 변환은 실수 값이고, 크기 주파수 응답과 동일합니다(해석적 웨이블릿 항목 참조). cwt 함수에 사용되는 웨이블릿 필터는 모든 통과대역의 피크 크기가 대략 2가 되도록 정규화됩니다. 이는 데이터의 단위 크기 진동이 스케일로그램에서 크기 1로 나타나도록 하기 위함입니다.
가 푸리에 영역에서 모 웨이블릿(mother wavelet)을 나타낸다고 하겠습니다. 0과 1 사이의 고정된 실수 값 스칼라 c에 대해 주파수 ξ가 다음과 같이 존재합니다.
최소 스케일 은 입니다.
기본적으로 cwt 함수는 Morse 웨이블릿에 대해서는 나이퀴스트 주파수의 피크 크기 비율을 50%(c가 0.5임)로, 해석적 Morlet 웨이블릿과 범프 웨이블릿에 대해서는 10%(c가 0.1임)로 설정합니다. 이 비율은 CWT에 사용되는 주파수 제한 또는 주기 제한을 변경하여 조정할 수 있습니다. 자세한 내용은 cwtfreqbounds 항목과 특히 Cutoff 이름-값 인수를 참조하십시오. cwtfilterbank 객체 함수 scales도 참조하십시오.
cwt 함수는 시간에 따른 웨이블릿의 에너지 산포를 기준으로 최대 스케일을 결정합니다.
최대 스케일을 결정하기 위해 cwt 함수는 먼저 웨이블릿의 시간 표준편차인 를 구합니다. 웨이블릿이 시간 표준편차 를 가지는 경우, 그 웨이블릿을 만큼 팽창시키면 표준편차 가 구해집니다.
최대 스케일은 을 충족하는 값 입니다. 여기서 N은 신호 길이입니다. cwt 함수는 가장 큰 스케일을 이 값으로 제한하여, 웨이블릿의 두 개의 시간 표준편차가 데이터 길이를 포괄하도록 합니다. 이렇게 하면 가장 큰 스케일에서 웨이블릿이 진동하고 cwt가 유효한 웨이블릿을 사용하도록 할 수 있습니다.
Morse 웨이블릿의 시간 표준편차에 대한 해석적 표현이 있습니다. 범프 웨이블릿과 해석적 Morlet 웨이블릿의 경우, cwt 함수는 푸리에 역변환을 구하고 이를 유효한 확률 밀도 함수로 정규화한 다음 두 번째 중심 모멘트의 제곱근을 구하여 시간에 따른 모 웨이블릿(mother wavelet)의 표준편차를 추정합니다.
웨이블릿 변환 스케일은 2의 거듭제곱이며 로 나타냅니다. NV는 옥타브당 음의 개수이고, j의 범위는 0에서 가장 큰 스케일까지입니다. 특정한 작은 스케일의 경우 은 다음과 같습니다.
밑이 2인 로그로 변환됩니다.
따라서 최대 스케일은 다음과 같습니다.
적분식에서 CWT는 에너지를 보존합니다. 그러나 CWT를 수치적으로 구현하면 에너지가 보존되지 않습니다. 이 경우 사용하는 정규화에 관계없이 CWT는 정규 직교 변환이 아닙니다. cwt 함수는 L1 정규화를 사용합니다.
웨이블릿 변환은 일반적으로 웨이블릿의 L2 정규화를 사용합니다. L2 노름의 경우 신호를 1/s만큼 팽창시키는 것(여기서 s는 0보다 큼)은 다음과 같이 정의됩니다.
에너지는 이제 원래 에너지의 s배입니다. 푸리에 변환에 포함된 경우 을 곱하면 각각의 스케일에 서로 다른 가중치가 생성되어 적용되므로 높은 주파수의 피크가 낮은 주파수의 피크보다 더 많이 감소합니다.
많은 응용 사례에서 L1 정규화가 더 적합합니다. L1 노름 정의에는 값을 제곱하는 부분이 없기 때문에 보존 인자는 대신 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.
[5] Lilly, J. M., and J.-C. Gascard. “Wavelet Ridge Diagnosis of Time-Varying Elliptical Signals with Application to an Oceanic Eddy.” Nonlinear Processes in Geophysics 13, no. 5 (September 14, 2006): 467–83. https://doi.org/10.5194/npg-13-467-2006.
확장 기능
사용법 관련 참고 및 제한 사항:
코드를 생성하려면 3개의 입력 인수, 즉 입력 신호, 샘플 레이트, 웨이블릿 이름이 필요합니다.
타임테이블 입력 신호는 지원되지 않습니다.
해석적 Morse(
"morse") 및 Morlet("amor") 웨이블릿만 지원됩니다. 웨이블릿 이름은 컴파일타임 상수로 지정해야 합니다.coder.Constant(MATLAB Coder)를 사용하십시오.Boundary의 값은 컴파일타임 상수로 지정해야 합니다. (R2026a 이후)샘플링 주기(
ts)는 지원되지 않습니다.PeriodLimits이름-값 인수,NumOctave이름-값 인수,FilterBank,Parent는 지원되지 않습니다.스케일링 계수 출력 및 필터 뱅크 출력은 지원되지 않습니다.
플로팅은 지원되지 않습니다.
cwt 함수는 GPU 배열을 완전히 지원합니다. GPU에서 함수를 실행하려면 입력 데이터를 gpuArray (Parallel Computing Toolbox)로 지정합니다. 자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2016b에 개발됨이제 플롯 만들기 라이브 편집기 작업을 사용하여 cwt 함수의 출력값을 대화형 방식으로 시각화할 수 있습니다. 다양한 차트 유형을 선택하고 선택적 파라미터를 설정할 수 있습니다. 또한 이 작업을 통해 라이브 스크립트의 일부가 되는 코드가 자동으로 생성됩니다. 자세한 내용은 Create Plot 항목을 참조하십시오.
cwt 함수는 Parent 이름-값 인수를 사용하여 부모 좌표축 또는 패널 컨테이너에 스케일로그램을 플로팅할 수 있습니다.
cwt 함수는 이제 경계 확장 모드로 0 채우기를 지원합니다. 확장 모드를 지정하려면 새로운 이름-값 인수 Boundary를 사용하십시오. 0 채우기를 지원하는 것 외에도, 이 새로운 이름-값 인수는 cwt 함수가 cwtfilterbank, dwpt 등의 다른 웨이블릿 변환 API와 보다 일관된 방식으로 동작하게 해 줍니다.
이름-값 인수 ExtendSignal은 향후 릴리스에서 제거될 예정입니다. 새로운 이름-값 인수 Boundary를 대신 사용하십시오. Boundary와 ExtendSignal을 동시에 지정할 수 없습니다.
| 기능 | 결과 | 대신 사용할 구문 |
|---|---|---|
ExtendSignal=0 | 여전히 실행됨 | Boundary="periodic" |
ExtendSignal=1 | 여전히 실행됨 | Boundary="reflection" |
cwt 함수는 GPU 배열을 완전히 지원합니다. GPU에서 함수를 실행하려면 입력 데이터를 gpuArray (Parallel Computing Toolbox)로 지정합니다. 자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
단정밀도 입력 데이터를 지원하는 cwt 함수에서 CUDA® 코드를 생성할 수 있습니다. CUDA 코드를 생성하려면 MATLAB Coder™와 GPU Coder™가 필요합니다.
NumOctaves 이름-값 인수는 향후 릴리스에서 제거될 예정입니다. 다음 중 하나를 사용하십시오.
CWT의 주파수 범위를 수정하는 이름-값 인수
FrequencyLimitsCWT의 주기 범위를 수정하는 이름-값 인수
PeriodLimits
자세한 내용은 cwtfreqbounds 항목을 참조하십시오.
이 릴리스에서는 업데이트된 버전의 연속 웨이블릿 변환 cwt를 제공합니다. 단순화된 새 구문을 사용하여 연속 웨이블릿 분석, 주파수 범위 또는 주기 범위, 옥타브당 음의 개수에 가장 적합한 웨이블릿을 쉽게 선택할 수 있습니다. 웨이블릿 및 스케일링의 디폴트 값이 제공되므로, 별도로 지정할 필요가 없습니다.
이전 cwt 함수에 대한 구문이 계속 작동하지만, 더 이상 권장되지 않습니다. 업데이트된 버전의 cwt를 사용하십시오. 이전 버전과 업데이트된 버전이 모두 동일한 함수 이름을 사용합니다. 함수에 대한 입력값에 따라 함수의 버전이 자동으로 결정됩니다.
| 기능 | 대신 사용할 기능 | 호환성 관련 고려 사항 |
|---|---|---|
이전 cwt | 업데이트된 cwt | 업데이트된 |
참고 항목
앱
함수
dlcwt|icwt|cwtfreqbounds
객체
도움말 항목
- Practical Introduction to Time-Frequency Analysis Using the Continuous Wavelet Transform
- Using Wavelet Time-Frequency Analyzer App
- Continuous and Discrete Wavelet Transforms
- CWT-Based Time-Frequency Analysis
- Boundary Effects and the Cone of Influence
- Morse Wavelets
- Time-Frequency Gallery
- Plot Spectral Representations of Signal in App Designer
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)