2015-01-05 2 views
0

첨부 코드에서 임의로 복잡한 신호 생성기 (이 경우 3 개의 사인파)를 생성하고이를 사용하여 256 + 50 값을 생성합니다. 그런 다음 첫 번째 256 개의 값을 사용하여 FFT를 만들고 그 다음에 역 FFT를 수행하여 원본 신호를 매우 가깝게 표현하는지 확인합니다. 지금까지 좋은 모든 것.FFT에서 미래 값 예측

지금 내가하고 싶은 것은 FFT 결과를 사용하여 FFT 데이터 세트에 포함되지 않은 추가 50 개의 값을 생성하려고 시도하는 것입니다. MatLab에서 바로 사용할 수 있습니까?

각 빈의 중심 주파수와 FFT 결과를 사용하여 신호 생성기를 생성하고 신호를 생성하는 방법을 정확히 알지는 못했지만 그렇게 많은 신호가 발생하는 것처럼 보입니다. 경로 나는 내가 찾지 못한 쉬운 방법이 있는지 알 것입니다.

저는 현재 MatLab & 신호 처리 및 DSP 패키지를 사용하고 있습니다.

감사합니다.

FFTsize = 256; 
futureSize = 50; 
t = 1:FFTsize+futureSize; 

F1_bars = 10; 
RadPerBar1 = (2*pi)/F1_bars; 
L1 = 1; 
Offset1 = 0; 

F2_bars = 8; 
RadPerBar2 = (2*pi)/F2_bars; 
L2 = 1; 
Offset2 = 0; 

F3_bars = 50; 
RadPerBar3 = (2*pi)/F3_bars; 
L3 = 1; 
Offset3 = 0; 

Sig = (L1*sin(RadPerBar1*t + Offset1) +... 
     L2*sin(RadPerBar2*t + Offset2) +... 
     L3*sin(RadPerBar3*t + Offset3)); 


DataSet = Sig(1:FFTsize); 

FFT = fft(DataSet)/FFTsize; 
%Suggested by Mad Physicist 
paddedFFT = [FFT(1:ceil(FFTsize/2)) zeros(1, futureSize) FFT(ceil(FFTsize/2)+1 : end)]; 

IFFT = ifft(FFT)*FFTsize; 
%Suggested by Mad Physicist 
IFFT2 = ifft(paddedFFT)*(FFTsize + futureSize); 

figure(111); 
hold off; 
plot(abs(FFT)); 
hold on; 
plot(abs(paddedFFT),'--r'); 
legend('FFT','Padded FFT','Position','best'); 
hold off; 

figure(110) 
hold off; 
plot(Sig); 
hold on; 
plot(IFFT,'--r'); 
plot(t, IFFT2,'g'); 
legend('Input Signal','IFFT','Padded IFFT','Position','best'); 
hold off; 
+0

내가 완벽하게 확실하지 않다. 그때까지 나는 [이 질문] (http://dsp.stackexchange.com/questions/101/how-do-i-extrapolate-a-1d-signal)이 좋은 출발점 일 수 있다고 생각한다. 그건 그렇고 : ** 답변 **에서 제안을 사용하여 원래 코드를 수정하지 마십시오 ** 당신이 묻는 질문이 변경됩니다! – knedlsepp

+0

코드 편집시 포인트가 적용됩니다. Mad Physicist에게 내가 그의 아이디어를 올바르게 구현했는지 여부를 묻는 방법을 모르겠다. 주석에 코드 블록을 삽입 할 수 있습니까? 링크를 WRT로 이동하는 것은 매우 흥미로운 방법이며 작동하는 것처럼 보이고 결국 내가 끝내는 것일 수 있습니다. 내 부분에 대해 더 많은 연구가 필요합니다. 감사. – LGTrader

답변

0

패드 50 개 0으로 FFT는 당신이 그것을 반전하기 전에 :이 그냥 DFT를하고,이 특정 방법으로도 가능하며 IDFT는 단순히 주기적으로 신호를 가정하면

futureSize = 50; 
paddedFFT = [FFT(1:ceil(FFTsize/2)) zeros(1, futureSize) FFT(ceil(FFTsize/2)+1 : end)]; 
IFFT = ifft(paddedFFT)*(FFTsize + futureSize); 
+1

소년 나는 일하고 싶다. 그러나 나는 제대로하고있는 것처럼 보이지 않는다. 원래의 256 바이트 신호를 새로운 306 바이트 범위로 확장하는 것으로 보입니다. 이는 나에게 의미가 있습니다. FFT를 패딩함으로써 bin 주파수를 변경하지 않고 같은 신호를 더 느리게 생성합니까? 어쨌든, 내가 잘못 이해했는지 알려주세요. 감사 – LGTrader