Main Content

wdenoise

웨이블릿 신호 잡음 제거

설명

예제

XDEN = wdenoise(X)는 Cauchy prior와 함께 경험적인 Bayesian 방법을 사용하여 X의 데이터의 잡음을 제거합니다. 기본적으로 sym4 웨이블릿은 사후 중앙값 임계값 규칙과 함께 사용됩니다. 잡음 제거는 floor(log2N)wmaxlev(N,"sym4")의 최솟값까지 수행됩니다. 여기서 N은 데이터의 샘플 개수입니다. (자세한 내용은 wmaxlev 항목을 참조하십시오.) X는 실수 값 벡터, 행렬 또는 타임테이블입니다.

  • X가 행렬이면 wdenoiseX의 각 열의 잡음을 제거합니다.

  • X가 타임테이블인 경우 wdenoise는 별도의 변수에 실수 값 벡터 또는 1개의 실수 값 데이터 행렬을 포함해야 합니다.

  • X는 균일하게 샘플링되는 것으로 가정합니다.

  • X가 타임테이블이고 타임스탬프가 선형 간격이 아니면 wdenoise는 경고를 표시합니다.

XDEN = wdenoise(X,LEVEL)XLEVEL까지 잡음 제거합니다. LEVELfloor(log2N)보다 작거나 같은 양의 정수입니다. 여기서 N은 데이터의 샘플 개수입니다. 지정되지 않은 경우, LEVEL은 기본적으로 floor(log2N)wmaxlev(N,"sym4")의 최솟값으로 지정됩니다.

예제

XDEN = wdenoise(___,Name,Value)는 위에 열거된 구문에 나와 있는 입력 인수 중 하나와 함께 이름-값 인수를 사용하여 1개 이상의 옵션을 지정합니다. 예를 들어, xden = wdenoise(x,3,Wavelet="db2")는 Daubechies db2 웨이블릿을 사용하여 x를 레벨 3까지 잡음 제거합니다.

[XDEN,DENOISEDCFS] = wdenoise(___)는 잡음이 제거된 웨이블릿 및 스케일링 계수를 셀형 배열 DENOISEDCFS로 반환합니다. DENOISEDCFS의 요소는 분해능이 감소하는 순서대로 위치합니다. DENOISEDCFS의 마지막 요소는 근사(스케일링) 계수를 포함합니다.

[XDEN,DENOISEDCFS,ORIGCFS] = wdenoise(___)는 원래 웨이블릿 및 스케일링 계수를 셀형 배열 ORIGCFS로 반환합니다. ORIGCFS의 요소는 분해능이 감소하는 순서대로 위치합니다. ORIGCFS의 마지막 요소는 근사(스케일링) 계수를 포함합니다.

예제

모두 축소

디폴트 값을 사용하여 잡음이 있는 신호의 잡음 제거된 버전을 구합니다.

load noisdopp
xden = wdenoise(noisdopp);

원래 신호 및 잡음 제거된 신호를 플로팅합니다.

plot([noisdopp' xden'])
legend("Original Signal","Denoised Signal")

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original Signal, Denoised Signal.

블록 임계값 적용을 사용하여 잡음이 있는 데이터의 타임테이블을 레벨 5까지 잡음 제거합니다.

잡음이 있는 데이터셋을 불러옵니다.

load wnoisydata

블록 임계값 적용을 사용하여 데이터를 레벨 5까지 잡음 제거합니다.

xden = wdenoise(wnoisydata,5,DenoisingMethod="BlockJS");

원래 데이터와 잡음 제거된 데이터를 플로팅합니다.

h1 = plot(wnoisydata.t,[wnoisydata.noisydata(:,1) xden.noisydata(:,1)]);
h1(2).LineWidth = 2;
legend("Original","Denoised")

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original, Denoised.

여러 가지 방법으로 신호의 잡음을 제거하고 결과를 비교합니다.

신호의 정리된 버전과 잡음이 있는 버전을 포함하는 데이터 파일을 불러옵니다. 신호를 플로팅합니다.

load fdata
plot(fNoisy)
hold on
plot(fClean)
grid on
legend("Noisy","Clean")
hold off

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Noisy, Clean.

9-레벨 웨이블릿 분해와 함께 sym4db1 웨이블릿을 사용하여 신호의 잡음을 제거합니다. 결과를 플로팅합니다.

cleansym = wdenoise(fNoisy,9,Wavelet="sym4");
cleandb = wdenoise(fNoisy,9,Wavelet="db1");
figure
subplot(2,1,1)
plot(cleansym)
title("Denoised - sym")
grid on
subplot(2,1,2)
plot(cleandb)
title("Denoised - db")
grid on

Figure contains 2 axes objects. Axes object 1 with title Denoised - sym contains an object of type line. Axes object 2 with title Denoised - db contains an object of type line.

각 잡음 제거된 신호의 SNR을 계산합니다. sym4 웨이블릿을 사용하면 더 나은 결과가 생성되는지 확인합니다.

snrsym = -20*log10(norm(abs(fClean-cleansym))/norm(fClean))
snrsym = 35.9623
snrdb = -20*log10(norm(abs(fClean-cleandb))/norm(fClean))
snrdb = 32.2672

100개 시계열의 잡음이 있는 데이터를 포함하는 파일을 불러옵니다. 모든 시계열은 fClean의 잡음이 있는 버전입니다. 각각의 경우 잡음 분산을 서로 다르게 추정하여 시계열을 두 번 잡음 제거합니다.

load fdataTS
cleanTSld = wdenoise(fdataTS,9,NoiseEstimate="LevelDependent");
cleanTSli = wdenoise(fdataTS,9,NoiseEstimate="LevelIndependent");

잡음이 있는 시계열 중 1개를 2개의 잡음 제거된 버전과 비교합니다.

figure
plot(fdataTS.Time,fdataTS.fTS15)
title("Original")
grid on

Figure contains an axes object. The axes object with title Original contains an object of type line.

figure
subplot(2,1,1)
plot(cleanTSli.Time,cleanTSli.fTS15)
title("Level Independent")
grid on
subplot(2,1,2)
plot(cleanTSld.Time,cleanTSld.fTS15)
title("Level Dependent")
grid on

Figure contains 2 axes objects. Axes object 1 with title Level Independent contains an object of type line. Axes object 2 with title Level Dependent contains an object of type line.

입력 인수

모두 축소

입력 데이터로, 실수 값으로 구성된 행렬, 벡터 또는 타임테이블로 지정됩니다. X가 벡터이면 적어도 두 개의 샘플을 가져야 합니다. X가 행렬 또는 타임테이블이면 적어도 두 개의 행을 가져야 합니다.

데이터형: double

웨이블릿 분해 레벨로, 양의 정수로 지정됩니다. LEVELfloor(log2N)보다 작거나 같은 양의 정수입니다. 여기서 N은 데이터의 샘플 개수입니다.

  • 지정되지 않은 경우, LEVEL은 기본적으로 floor(log2N)wmaxlev(N,"sym4")의 최솟값으로 지정됩니다.

  • James-Stein 블록 임계값 적용 "BlockJS"의 경우, 가장 성긴 분해능 수준 LEVELfloor(log2N) 계수가 있어야 합니다.

데이터형: double

이름-값 인수

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

예: xden = wdenoise(x,4,Wavelet="db6")은 Daubechies db6 웨이블릿을 사용하여 x를 레벨 4까지 잡음 제거합니다.

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

예: "Wavelet","db6","DenoisingMethod","Bayes"는 Daubechies db6 웨이블릿과 경험적 베이즈 방법을 사용하여 잡음을 제거합니다.

웨이블릿으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. 웨이블릿은 직교 또는 쌍직교여야 합니다. 직교 및 쌍직교 웨이블릿은 웨이블릿 관리자 wavemngr에서 각각 유형 1과 유형 2 웨이블릿으로 지정됩니다.

  • 유효한 내장 직교 웨이블릿 패밀리는 다음과 같습니다. 최선 국소화 Daubechies("bl"), Beylkin("beyl"), Coiflets("coif"), Daubechies("db"), Fejér-Korovkin("fk"), Haar("haar"), Han 선형 위상 모멘트("han"), Morris 최소 대역폭("mb"), Symlets("sym") 및 Vaidyanathan("vaid").

  • 유효한 내장 쌍직교 웨이블릿 패밀리는 다음과 같습니다. 쌍직교 스플라인("bior") 및 역 쌍직교 스플라인("rbio").

각 패밀리의 웨이블릿 목록을 보려면 wfilters 항목을 참조하십시오. 또한 waveinfo를 웨이블릿 패밀리의 짧은 이름과 함께 사용할 수도 있습니다. 예를 들면 waveinfo("db")와 같습니다. wavemngr("type",wn)을 사용하여 웨이블릿 wn이 직교인지(1 반환) 또는 쌍직교인지(2 반환) 결정합니다. 예를 들면 wavemngr("type","db6")은 1을 반환합니다.

데이터 X에 잡음 제거 임계값 적용을 결정하는 데 사용되는 잡음 제거 방법입니다.

  • Bayes — 경험적 Bayes

    이 방법은 측정값이 혼합 모델에 의해 주어진 독립적인 이전의 분포를 가진다는 가정을 기반으로 임계값 규칙을 사용합니다. 측정값은 혼합 모델에서 가중치를 추정하는 데 사용되기 때문에 이 방법은 더 많은 샘플에서 더 잘 작동하는 경향이 있습니다. 기본적으로 위험을 측정하기 위해 사후 중앙값 규칙이 사용됩니다 [8].

  • BlockJS — 블록 James-Stein

    이 방법은 최적의 블록 크기와 임계값 결정을 기반으로 합니다. 결과로 얻는 블록 임계값 적용 추정기는 최적의 전역 적응성과 로컬 적응성을 동시에 산출합니다 [3].

  • FDR — 오발견율

    이 방법은 모든 양성 검출에 대한 거짓양성 검출의 예상 비율 제어를 기반으로 임계값 규칙을 사용합니다. FDR 방법은 성긴 데이터에서 가장 잘 작동합니다. 비율 또는 1/2보다 작은 Q-값을 선택하면 점근적으로 최대최소화(minimax) 추정량이 산출됩니다 [1].

  • Minimax — 최대최소화 추정

    이 방법은 선택된 고정 임계값을 사용하여 이상적 절차에 대해 평균제곱오차에 대한 최대최소화 성능을 산출합니다. 최대최소화 원리가 추정기 설계를 위한 통계에 사용됩니다. 자세한 내용은 thselect 항목을 참조하십시오.

  • SURE — Stein의 무편향 위험 추정

    이 방법은 Stein의 무편향 위험 추정(2차 손실 함수)를 기반으로 임계값 선택 규칙을 사용합니다. 1은 특정 임계값(t)에 대한 위험 추정을 얻습니다. (t)의 위험을 최소화하면 임계값 선택이 부여됩니다.

  • UniversalThreshold - 통합 임계값 2ln(length(x)).

    이 방법은 log(length(X))에 비례하는 작은 인자로 곱한 최대최소화 성능을 산출하는 고정 형식 임계값을 사용합니다.

참고

"FDR"의 경우, 거짓양성의 비율인 Q-값에 대한 선택 사항 인수가 있습니다. Q는 01/2 사이의 실수 값 스칼라(0 < Q <= 1/2)입니다. Q-값으로 "FDR"을 지정하려면 두 번째 요소가 Q-값인 셀형 배열을 사용합니다. 예를 들면 "DenoisingMethod",{"FDR",0.01}과 같습니다. 지정되지 않은 경우, Q는 기본적으로 0.05입니다.

임계값 규칙으로, 웨이블릿 계수를 축소하는 데 사용하기 위해 문자형 배열로 지정됩니다. "ThresholdRule"은 모든 잡음 제거 방법에 유효하지만, 유효한 옵션과 디폴트 값은 잡음 제거 방법에 따라 달라집니다. 각 잡음 제거 방법에 사용할 수 있는 규칙은 다음과 같이 지정됩니다.

  • "BlockJS" — 유일하게 지원되는 옵션은 "James-Stein"입니다. "BlockJS"의 경우 ThresholdRule는 지정할 필요가 없습니다.

  • "SURE", "Minimax", "UniversalThreshold" — 유효한 옵션은 "Soft" 또는 "Hard"입니다. 디폴트 값은 "Soft"입니다.

  • "Bayes" — 유효한 옵션은 "Median", "Mean", "Soft" 또는 "Hard"입니다. 디폴트 값은 "Median"입니다.

  • "FDR" — 유일하게 지원되는 옵션은 "Hard"입니다. "FDR"의 경우 ThresholdRule는 정의할 필요가 없음

데이터의 잡음 분산을 추정하는 방법입니다.

  • "LevelIndependent" — 가장 세밀한 스케일(가장 높은 분해능) 웨이블릿 계수를 기반으로 잡음의 분산을 추정합니다.

  • "LevelDependent" — 각 분해능 수준의 웨이블릿 계수를 기반으로 잡음의 분산을 추정합니다.

"BlockJS" 잡음 제거 방법과 함께 NoiseEstimate를 지정하면 아무 영향도 없습니다. 블록 James-Stein 추정기는 항상 "LevelIndependent" 잡음 추정을 사용합니다.

출력 인수

모두 축소

X의 잡음 제거된 벡터, 행렬 또는 타임테이블 버전입니다. 타임테이블 입력값의 경우, XDEN은 원래 타임테이블과 동일한 변수 이름 및 타임스탬프를 갖습니다.

데이터형: double

잡음 제거된 데이터 XDEN의 잡음 제거된 웨이블릿 및 스케일링 계수로, 셀형 배열로 반환됩니다. DENOISEDCFS의 요소는 분해능이 감소하는 순서대로 위치합니다. DENOISEDCFS의 마지막 요소는 근사(스케일링) 계수를 포함합니다.

데이터형: double

데이터 X의 원래 웨이블릿 및 스케일링 계수로, 셀형 배열로 반환됩니다. ORIGCFS의 요소는 분해능이 감소하는 순서대로 위치합니다. ORIGCFS의 마지막 요소는 근사(스케일링) 계수를 포함합니다.

데이터형: double

알고리즘

잡음이 있는 신호에 가장 일반적인 모델은 다음과 같은 형태를 갖습니다.

s(n)=f(n)+σe(n),

여기서 시간 n은 균일한 간격으로 되어 있습니다. 가장 단순한 모델에서 e(n)이 가우스 백색 잡음 N(0,1)이고, 잡음 수준 σ가 1과 같다고 가정합니다. 잡음 제거 목표는 신호 s의 잡음 부분을 억제하고 f를 복구하는 것입니다.

잡음 제거 절차는 3단계로 구성됩니다.

  1. 분해 — 웨이블릿을 선택하고 레벨 N을 선택합니다. 레벨 N에서 신호 s의 웨이블릿 분해를 계산합니다.

  2. 세부성분 계수 임계값 적용 — 1부터 N까지 각 레벨에 대해 임계값을 선택하고 세부성분 계수에 소프트 임계값을 적용합니다.

  3. 복원 — 레벨 N의 원래 근사 계수와 1부터 N까지 레벨의 수정된 세부성분 계수를 기반으로 웨이블릿 복원을 계산합니다.

임계값 선택 규칙에 대한 더 자세한 정보는 Wavelet Denoising and Nonparametric Function Estimation 항목 및 thselect 함수의 도움말을 참조하십시오.

참고 문헌

[1] Abramovich, F., Y. Benjamini, D. L. Donoho, and I. M. Johnstone. “Adapting to Unknown Sparsity by Controlling the False Discovery Rate.” Annals of Statistics, Vol. 34, Number 2, pp. 584–653, 2006.

[2] Antoniadis, A., and G. Oppenheim, eds. Wavelets and Statistics. Lecture Notes in Statistics. New York: Springer Verlag, 1995.

[3] Cai, T. T. “On Block Thresholding in Wavelet Regression: Adaptivity, Block size, and Threshold Level.” Statistica Sinica, Vol. 12, pp. 1241–1273, 2002.

[4] Donoho, D. L. “Progress in Wavelet Analysis and WVD: A Ten Minute Tour.” Progress in Wavelet Analysis and Applications (Y. Meyer, and S. Roques, eds.). Gif-sur-Yvette: Editions Frontières, 1993.

[5] Donoho, D. L., I. M. Johnstone. “Ideal Spatial Adaptation by Wavelet Shrinkage.” Biometrika, Vol. 81, pp. 425–455, 1994.

[6] Donoho, D. L. “De-noising by Soft-Thresholding.” IEEE Transactions on Information Theory, Vol. 42, Number 3, pp. 613–627, 1995.

[7] Donoho, D. L., I. M. Johnstone, G. Kerkyacharian, and D. Picard. “Wavelet Shrinkage: Asymptopia?” Journal of the Royal Statistical Society, series B, Vol. 57, No. 2, pp. 301–369, 1995.

[8] Johnstone, I. M., and B. W. Silverman. “Needles and Straw in Haystacks: Empirical Bayes Estimates of Possibly Sparse Sequences.” Annals of Statistics, Vol. 32, Number 4, pp. 1594–1649, 2004.

확장 기능

버전 내역

R2017b에 개발됨