cconv
모듈로-n 원형 컨벌루션
설명
예제
원형 컨벌루션과 선형 컨벌루션
길이가 서로 다른 두 신호를 생성합니다. 이에 대한 원형 컨벌루션과 선형 컨벌루션을 비교합니다. n
에는 디폴트 값을 사용합니다.
a = [1 2 -1 1]; b = [1 1 2 1 2 2 1 1]; c = cconv(a,b); % Circular convolution cref = conv(a,b); % Linear convolution dif = norm(c-cref)
dif = 9.7422e-16
결과로 생성되는 노름(Norm)은 사실상 0입니다. 이는 두 컨벌루션이 기계 정밀도 범위 내에서 동일한 결과를 생성한다는 것을 보여줍니다.
원형 컨벌루션
두 벡터를 생성하고 이에 대한 모듈로-4 원형 컨벌루션을 계산합니다.
a = [2 1 2 1]; b = [1 2 3 4]; c = cconv(a,b,4)
c = 1×4
14 16 14 16
원형 상호상관
두 개의 복소수 시퀀스를 생성합니다. cconv
를 사용하여 이에 대한 원형 상호상관을 계산합니다. 상호상관 정의를 따르도록 두 번째 피연산자를 뒤집고 이에 대한 켤레 복소수를 구합니다. 출력 벡터 길이를 7로 지정합니다.
a = [1 2 2 1]+1i; b = [1 3 4 1]-2*1i; c = cconv(a,conj(fliplr(b)),7);
이 결과를 xcorr
을 사용하여 계산된 상호상관 결과와 비교합니다.
cref = xcorr(a,b); dif = norm(c-cref)
dif = 3.3565e-15
다양한 출력 길이를 가지는 원형 컨벌루션
5개 샘플로 구성된 삼각 파형 신호와 응답 을 갖는 1차 FIR 필터 신호 등 총 두 개의 신호를 생성합니다.
x1 = conv([1 1 1],[1 1 1])
x1 = 1×5
1 2 3 2 1
x2 = [-1 1]
x2 = 1×2
-1 1
디폴트 출력 길이를 사용하여 이에 대한 원형 컨벌루션을 계산합니다. 이 결과는 두 신호의 선형 컨벌루션과 동일합니다.
ccnv = cconv(x1,x2)
ccnv = 1×6
-1.0000 -1.0000 -1.0000 1.0000 1.0000 1.0000
lcnv = conv(x1,x2)
lcnv = 1×6
-1 -1 -1 1 1 1
모듈로-2 원형 컨벌루션은 선형 컨벌루션을 요소를 2개 가진 배열로 분할한 후 배열의 합을 구하는 것과 동일합니다.
ccn2 = cconv(x1,x2,2)
ccn2 = 1×2
-1 1
nl = numel(lcnv); mod2 = sum(reshape(lcnv,2,nl/2)')
mod2 = 1×2
-1 1
모듈로-3 원형 컨벌루션을 계산하고 이를 에일리어싱된 선형 컨벌루션과 비교합니다.
ccn3 = cconv(x1,x2,3)
ccn3 = 1×3
0 0 0
mod3 = sum(reshape(lcnv,3,nl/3)')
mod3 = 1×3
0 0 0
출력 길이가 컨벌루션 길이보다 작고 컨벌루션 길이가 출력 길이로 정확히 나누어 떨어지지 않는 경우, 더하기 전에 컨벌루션에서 부족한 만큼의 분량을 0으로 채웁니다.
c = 5; z = zeros(c*ceil(nl/c),1); z(1:nl) = lcnv; ccnc = cconv(x1,x2,c)
ccnc = 1×5
0.0000 -1.0000 -1.0000 1.0000 1.0000
modc = sum(reshape(z,c,numel(z)/c)')
modc = 1×5
0 -1 -1 1 1
출력 길이가 컨벌루션 길이보다 크거나 같으면 컨벌루션을 채우되 더하지 않습니다.
d = 13; z = zeros(d*ceil(nl/d),1); z(1:nl) = lcnv; ccnd = cconv(x1,x2,d)
ccnd = 1×13
-1.0000 -1.0000 -1.0000 1.0000 1.0000 1.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000
modd = z'
modd = 1×13
-1 -1 -1 1 1 1 0 0 0 0 0 0 0
GPU를 사용한 원형 컨벌루션
다음 예제를 수행하려면 Parallel Computing Toolbox™가 필요합니다. 지원되는 GPU를 보려면 GPU 연산 요구 사항 (Parallel Computing Toolbox) 항목을 참조하십시오.
가산성 백색 가우스 잡음(AWGN)이 있는 1kHz의 사인파로 구성된 두 신호를 생성합니다. 샘플 레이트는 10kHz입니다.
Fs = 1e4; t = 0:1/Fs:10-(1/Fs); x = cos(2*pi*1e3*t)+randn(size(t)); y = sin(2*pi*1e3*t)+randn(size(t));
gpuArray
를 사용하여 GPU에 x
와 y
를 배치합니다. GPU를 사용하여 원형 컨벌루션을 구합니다.
x = gpuArray(x); y = gpuArray(y); cirC = cconv(x,y,length(x)+length(y)-1);
이 결과를 x와 y의 선형 컨벌루션 결과와 비교합니다.
linC = conv(x,y); norm(linC-cirC,2)
ans = 1.4047e-08
gather
를 사용하여 원형 컨벌루션 cirC
를 MATLAB® 작업 공간으로 반환합니다.
cirC = gather(cirC);
입력 인수
a
, b
— 입력 배열
벡터
입력 배열로, 벡터로 지정됩니다.
예: sin(2*pi*(0:9)/10) + randn([1 10])/10
은 잡음이 있는 정현파를 행 벡터로 지정합니다.
데이터형: single
| double
복소수 지원 여부: 예
n
— 컨벌루션 길이
양의 정수
컨벌루션 길이로, 양의 정수로 지정됩니다. n
을 지정하지 않으면 컨벌루션 길이는 length(a)+length(b)-1
입니다.
출력 인수
c
— 원형 컨벌루션
벡터
입력 벡터에 대한 원형 컨벌루션으로, 벡터로 반환됩니다.
팁
긴 시퀀스의 경우, 원형 컨벌루션이 선형 컨벌루션보다 더 빠를 수 있습니다.
참고 문헌
[1] Orfanidis, Sophocles J. Introduction to Signal Processing. Englewood Cliffs, NJ: Prentice-Hall, 1996, pp. 524–529.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
이 함수는 GPU 배열을 완전히 지원합니다. 자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2007a에 개발됨
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)