deconv
최소제곱 디컨벌루션(Deconvolution)과 다항식(Polynomial) 나눗셈
설명
다항식의 장제법
최소제곱 디컨벌루션
R2023b 이후
[
는 위에 열거된 구문에 나와 있는 입력 인수 조합 외에, 이름-값 인수를 하나 이상 사용하여 옵션을 지정합니다.x
,r
] = deconv(___,Name=Value
)
deconv(__,Method=algorithm)
을 사용하여 디컨벌루션 방법을 지정할 수 있습니다. 여기서algorithm
은"long-division"
또는"least-squares"
일 수 있습니다.deconv(__,RegularizationFactor=alpha)
를 사용하여 디컨벌루션 방법의 최소제곱해에 대한 Tikhonov 정규화 인자를 지정할 수도 있습니다.
예제
다항식 나눗셈
각각 다항식 와 의 계수를 포함하는 벡터 y
와 h
를 만듭니다. y
에서 h
를 디컨벌루션하여 첫 번째 다항식을 두 번째 다항식으로 나눕니다. 디컨벌루션 결과는 몫 계수 다항식 과 나머지 계수 다항식 입니다.
y = [2 7 4 9]; h = [1 0 1]; [x,r] = deconv(y,h)
x = 1×2
2 7
r = 1×4
0 0 2 2
완전히 컨벌루션된 신호에 대한 최소제곱 디컨벌루션
R2023b 이후
가우스 형태를 가진 신호 x
를 만듭니다. 이 신호를 랜덤 잡음으로 구성된 임펄스 응답 h
와 컨벌루션합니다.
N = 200;
n = 0.1*(1:N);
rng("default")
x = 2*exp(-0.5*((n-10)).^2);
h = 0.1*randn(1,length(x));
y = conv(x,h);
원래 신호, 임펄스 응답, 컨벌루션된 신호를 플로팅합니다.
figure tiledlayout(3,1) nexttile plot(n,x) title("Original Signal") nexttile plot(n,h) title("Impulse Response") nexttile plot(0.1*(1:length(y)),y) title("Convolved Signal")
다음으로, 디폴트 다항식의 장제법을 사용하여 임펄스 응답 h
에 대해 신호 y
의 디컨벌루션을 구합니다. 이 방법을 사용할 경우 디컨벌루션 계산이 불안정하므로, 결과가 빠르게 증가할 수 있습니다.
[x1,r1] = deconv(y,h); x1(end)
ans = 7.5992e+90
수치적으로 안정된 계산을 위해 대신 최소제곱 방법을 사용하여 디컨벌루션을 구합니다.
[x2,r2] = deconv(y,h,Method="least-squares");
두 개의 디컨벌루션 결과를 플로팅합니다. 여기에서는 최소제곱 방법이 가우스 형태를 갖는 원래 신호를 정확하게 반환합니다.
figure tiledlayout(2,1) nexttile plot(n,x1) title("Deconvolved Signal Using ""long-division"" Method") nexttile plot(n,x2) title("Deconvolved Signal Using ""least-squares"" Method")
컨벌루션된 신호의 중앙부에 대한 최소제곱 디컨벌루션
R2023b 이후
두 개의 벡터를 만듭니다. xin
과 h
와의 컨벌루션에서 크기가 xin
과 같은 중앙부를 구합니다. 컨벌루션된 신호 y의 중앙부는 전체 길이(length(xin)+length(h)-1
또는 10) 대신 길이 7을 가집니다.
xin = [-1 2 3 -2 0 1 2];
h = [2 4 -1 1];
y = conv(xin,h,"same")
y = 1×7
15 5 -9 7 6 7 -1
임펄스 응답 h
에 대해 신호 y
의 최소제곱 디컨벌루션을 구합니다. 컨벌루션된 신호 y
가 중앙부에 한정됨을 지정하려면 "same"
옵션을 사용하십시오. 여기서 y = conv(x,h,"same") + r
입니다. deconv
가 반올림 오차 범위 내에서 원래 신호를 x
로 복구하는지 확인합니다.
[x,r] = deconv(y,h,"same",Method="least-squares")
x = 1×7
-1.0000 2.0000 3.0000 -2.0000 0.0000 1.0000 2.0000
r = 1×7
10-15 ×
0 0.8882 0 0 0 0 0
무한한 해를 갖는 최소제곱 디컨벌루션 문제
R2023b 이후
두 개의 요소를 갖는 벡터 두 개를 만들고 "valid"
옵션을 사용하여 이들 벡터를 컨벌루션합니다. 이 옵션은 모서리를 0으로 채우지 않고, 계산한 컨벌루션의 일부만 반환합니다. 이 경우 컨벌루션된 신호 y
는 요소를 하나만 갖습니다.
xin = [-1 2];
h = [2 5];
y = conv(xin,h,"valid")
y = -1
임펄스 응답 h
에 대해 컨벌루션된 신호 y
의 최소제곱 디컨벌루션을 구합니다. "valid"
옵션을 사용하는 경우 deconv
가 항상 원래 신호를 x
에 반환하지는 않습니다. 하지만 대신에 norm(x)
를 최소화하는 디컨벌루션 문제의 해를 반환합니다.
[x,r] = deconv(y,h,"valid",Method="least-squares")
x = 1×2
-0.1724 -0.0690
r = 0
해를 검사하려면 h
를 사용하여 계산된 신호 x
의 전체 컨벌루션을 구할 수 있습니다. 이 컨벌루션된 신호의 중앙부는 디컨벌루션 문제를 정의한 원래 y
와 동일합니다.
yfull = conv(x,h,"full")
yfull = 1×3
-0.3448 -1.0000 -0.3448
이 문제에서 deconv
는 두 개의 변수를 갖는 하나의 방정식()을 풀기 때문에 원래 신호와 다른 신호를 반환합니다. 이는 부족 결정 시스템으로, 방정식보다 더 많은 변수를 가짐을 의미합니다. 이 시스템은 최소제곱 방법을 사용하여 잔차 노름 즉, norm(y - conv(x,h,"valid"))
를 0으로 최소화할 경우 무한한 해를 갖습니다. 이러한 이유로 인해 deconv
는 norm(x)
를 최소화하는 해도 구합니다.
다음 그림에서는 이 부족 결정 문제에 대한 상황을 보여줍니다. 파란색 선은 방정식 에 대한 무한한 개수의 해를 나타냅니다. 주황색 원은 원점에서 해의 선까지의 최소 거리를 나타냅니다. deconv
에서 반환된 해는 선과 원 사이의 접점에 놓여, 이것이 원점과 가장 가까운 해임을 나타냅니다.
잡음이 있는 신호에 대한 정규화 인자 지정하기
R2023b 이후
두 개의 신호 x
와 h
를 만들고 이들 신호를 컨벌루션합니다. y
에 컨벌루션된 신호에 일부 랜덤 잡음을 추가합니다.
N = 200;
n = 0.1*(1:N);
rng("default")
x = 2*exp(-0.8*(n - 8).^2) - 4*exp(-2*(n - 10).^2);
h = 2.*exp(-1*(n - 5).^2).*cos(4*n);
y = conv(x,h);
y = y + max(y)*0.05*randn(1,length(y));
원래 신호, 임펄스 응답, 컨벌루션된 신호를 플로팅합니다.
figure tiledlayout(3,1) nexttile plot(n,x) title("Original Signal") nexttile plot(n,h) title("Impulse Response") nexttile plot(0.1*(1:length(y)),y) title("Convolved Signal with Added Noise")
다음으로, 정규화 인자 없이 최소제곱 방법을 사용하여 임펄스 응답 h
에 대해, 잡음 있는 신호 y
의 디컨벌루션을 구합니다. 기본적으로 정규화 인자는 0입니다.
[x1,r1] = deconv(y,h,Method="least-squares");
원래 신호와 디컨벌루션된 신호를 플로팅합니다. 여기에서의 정규화 인자가 없는 deconv
함수는 잡음 있는 신호에서 원래 신호를 복구할 수 없습니다.
figure; tiledlayout(3,1); nexttile plot(n,x) title("Original Signal") nexttile plot(n,x1) title("Deconvolved Signal Without Regularization");
대신 최소제곱 방법에 정규화 인자 1
을 사용하여 h
에 대한 y
의 디컨벌루션을 구합니다. 조건이 나쁜 디컨벌루션 문제(예: 잡음 있는 신호가 포함된 문제)의 경우 정규화 인자를 지정하여 최소제곱해에 과적합이 발생하지 않도록 할 수 있습니다.
[x2,r2] = deconv(y,h,Method="least-squares",RegularizationFactor=1);
이 디컨벌루션된 신호를 플로팅합니다. 여기에서의 정규화 인자가 지정된 deconv
함수는 원래 신호를 복원합니다.
nexttile
plot(n,x2)
title("Deconvolved Signal Using Regularization")
입력 인수
y
— 디컨벌루션할 입력 신호
행 벡터 또는 열 벡터
디컨벌루션할 입력 신호로, 행 벡터 또는 열 벡터로 지정됩니다.
데이터형: double
| single
복소수 지원 여부: 예
h
— 디컨벌루션에 사용되는 임펄스 응답 또는 필터
행 벡터 또는 열 벡터
디컨벌루션에 사용되는 임펄스 응답 또는 필터로, 행 벡터 또는 열 벡터로 지정됩니다. y
와 h
는 길이와 데이터형이 서로 다를 수 있습니다.
y
와h
중 하나 또는 둘 모두single
형이면 출력값도single
형입니다. 그렇지 않은 경우 출력값은double
형입니다.입력값의 길이는
length(h) <= length(y)
를 충족해야 합니다. 그러나length(h) > length(y)
이면deconv
는 출력값을x = 0
과r = y
로 반환합니다.
데이터형: double
| single
복소수 지원 여부: 예
shape
— 컨벌루션된 신호의 하위 섹션
"full"
(디폴트 값) | "same"
| "valid"
R2023b 이후
컨벌루션된 신호의 하위 섹션으로, 다음 값 중 하나로 지정됩니다.
"full"
(디폴트 값) —y
는h
와 함께x
의 전체 컨벌루션을 포함합니다."same"
—y
는 컨벌루션에서 크기가x
와 같은 중앙부를 포함합니다."valid"
—y
는 모서리를 0으로 채우지 않고 계산한 컨벌루션의 부분만 포함합니다. 이 옵션을 사용하면length(h)
가 0일 때를 제외하고length(y)
는max(length(x)-length(h)+1,0)
입니다.length(h) = 0
이면length(y) = length(x)
입니다.
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
예: [x,r] = deconv(y,h,Method="least-squares",RegularizationFactor=1e-3)
Method
— 디컨벌루션 방법
"long-division"
(디폴트 값) | "least-squares"
R2023b 이후
디컨벌루션 방법으로, 다음 값 중 하나로 지정됩니다.
"long-division"
— 다항식의 장제법을 사용한 디컨벌루션(디폴트 값)."least-squares"
— 최소제곱을 사용한 디컨벌루션. 여기에서 잔차 신호(또는 나머지)r
의 노름을 최소화하기 위해 디컨벌루션된 신호x
가 계산됩니다. 즉,x
는norm(y - conv(x,h))
를 최소화하는 해입니다.
RegularizationFactor
— Tikhonov 정규화 인자
0
(디폴트 값) | 실수
R2023b 이후
최소제곱 디컨벌루션을 위한 Tikhonov 정규화 인자로, 실수로 지정됩니다. 최소제곱 디컨벌루션 방법을 사용할 때 정규화 인자를 alpha
로 지정하면 norm(r)^2 + norm(alpha*x)^2
을 최소화하는 벡터 x
가 반환됩니다. 조건이 나쁜 문제에 정규화 인자를 지정하면 노름이 더 작은 해 x
가 더 우선시됩니다.
디폴트 장제법 디컨벌루션 방법을 사용하는 경우 RegularizationFactor
는 0
이어야 합니다.
데이터형: double
| single
출력 인수
x
— 디컨벌루션된 신호 또는 나눗셈의 몫
행 벡터 또는 열 벡터
디컨벌루션된 신호 또는 나눗셈의 몫으로, y = conv(x,h) + r
이 되는 행 벡터나 열 벡터로 반환됩니다.
데이터형: double
| single
r
— 잔차 신호 또는 나눗셈의 나머지
행 벡터 또는 열 벡터
잔차 신호 또는 나눗셈의 나머지로, y = conv(x,h) + r
이 되는 행 벡터나 열 벡터로 반환됩니다.
데이터형: double
| single
참고 문헌
[1] Nagy, James G. “Fast Inverse QR Factorization for Toeplitz Matrices.” SIAM Journal on Scientific Computing 14, no. 5 (September 1993): 1174–93. https://doi.org/10.1137/0914070.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder) 항목을 참조하십시오.
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고 및 제한 사항:
최소제곱(
"least-squares"
) 디컨벌루션 방법은 지원되지 않습니다.
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
분산 배열
Parallel Computing Toolbox™를 사용하여 대규모 배열을 클러스터의 결합된 메모리에 걸쳐 분할할 수 있습니다.
사용법 관련 참고 및 제한 사항:
최소제곱(
"least-squares"
) 디컨벌루션 방법은 지원되지 않습니다.
자세한 내용은 분산 배열을 사용하여 MATLAB 함수 실행 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨R2023b: 컨벌루션된 하위 섹션을 다르게 지정하며 최소제곱 디컨벌루션 수행
이제 Method
이름-값 인수를 "least-squares"
로 지정하여 최소제곱 디컨벌루션을 수행할 수 있습니다. 또한 최소제곱 디컨벌루션을 사용할 때 컨벌루션된 하위 섹션을 다르게 지정할 수 있으며 Tikhonov 정규화 인자를 지정할 수도 있습니다.
이전 릴리스에서 deconv
는 다항식의 장제법만 사용하여 디컨벌루션을 수행할 수 있습니다. 새 인수를 사용하면 최소제곱 디컨벌루션(Method="least-squares"
)을 수행할 수 있으며, 그러면 디폴트 장제법 디컨벌루션(Method="long-division"
)보다 더 안정된 해가 반환됩니다.
최소제곱 방법을 사용하여 임펄스 응답 h
에 대해 신호 y
를 디컨벌루션하면, deconv
는 잔차 신호(또는 나머지) r = y - conv(x,h)
의 노름을 최소화하는 신호 x
를 반환합니다. 즉, x
는 norm(r)
을 최소화하는 해입니다. 또는, 조건이 나쁜 문제에 대해 Tikhonov 정규화 인자 alpha
를 지정하여 norm(r)^2 + norm(alpha*x)^2
을 최소화하는 해 x
를 반환할 수도 있습니다.
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)