2014-10-23 1 views
0

나는 푸리에 변환을 취하고, 그것을 제곱 한 후, 역 푸리에 변환을 취함으로써 그 자체로 직사각형 펄스를 컨벌루션하려고 시도하고있다. conv() 함수가 있다는 것을 알았지 만, 앞으로보다 복잡한 문제를 위해 주파수 도메인에서이를 수행하는 것을 선호합니다. 내 문제는 내가 이것을 할 때 예상대로 삼각형 함수를 생성하지 않는다는 것이다. 제가 사용하는 코드는 아래와 같습니다 :왜 주파수 영역에서 곱셈을 통한 회선이 예기치 않은 결과를 생성합니까? MATLAB?

clc 

clear all 

x=-5:.01:5; 

y=rectangularPulse(x); 

Y=fft(y); 

H=Y.^2; 

h=ifft(H); 

plot(x,h) 
+0

당신은 아마 그냥은'여기 fftshift' 또는 –

+0

은 MATLAB은 대소 문자를 구분해서, 경우에만 의해 구별 단일 문자 변수를 가지는 것은 좋은 생각이라고이 의미하는 것은 아니다 필요합니다. 나는 yn','Yf','Hf','hn'을 제안 할 것이고 혼란의 여지가 없다. –

답변

2

회선이 직선인지 확인하려면 제로 패드가 필요합니다. 현재 순환 컨볼 루션을 수행하고 있습니다. 이런 식으로 뭔가를 시도 :

y = ones(100,1);  
N = length(y); 
Nfft = 2*length(y) - 1; 

Y=fft(y,Nfft); 
H=Y.^2; 
h=ifft(H); 
plot(h); 
+0

이것은 삼각형 펄스를 생성하지만 100을 중심으로하며 진폭은 100입니다. 0을 중심으로하고 진폭은 1이어야합니다. 어떻게해야합니까? 또한 힘 Y를 올리면 반드시 2 일 필요는 없다는 것을 명심하십시오. –

+0

질문에 대답 할 필요가 없으므로 시간 축 정의를 걱정하지 않았습니다. 나는 단순히 샘플 번호의 함수로 물건을 꾸몄다. 진폭에 관해서는, 삼각형의 피크는 직사각형 펄스의 면적과 동일 할 것이다. 이후 결과를 정상화하지 않았으므로 1 * 100 = 100이됩니다. 어떤 회선이 실제로는 이해가되지 않는다는 느낌을받습니다. 남은 질문이있을 경우 텍스트를 다시 읽은 다음 나중에 여기에 다시 게시 할 것을 제안 할 수 있습니다. – AnonSubmitter85

+0

나는 어떤 회선이 무엇인지 정확하게 이해하고 있습니다. 그렇습니다. 사실, x 축을 정의하는 것이 실제로 내 질문에 답하는 것이 필요합니다. 그렇지 않으면 삼각형 함수가 0 일 때 중심에 있지 않습니다. 또한 귀하의 대답에, 당신은 100을하지 않고 너비가 1 인 rect 함수 여야하므로 y를 올바르게 정의하지 않았습니다. –

관련 문제