[問題] 問個難的..快速富利葉轉換 一問已回收
※ [本文轉錄自 Math 看板 #1CUIlbyQ ]
作者: qeagle (神啊請讓我失戀吧) 看板: Math
標題: [其他] 問個難的..快速富利葉轉換 一問
時間: Sat Aug 28 23:31:46 2010
我在做一個週期信號輪動程式
我的想法是這樣
我用matlab做fft,將所有測到的頻率,依照其取樣時間點加一個不同的相位
即代表下一點fft於此頻得到的相位,再用ifft反轉回去,即可得到下點時域信號
比如說現在測到一個5赫茲的信號,其相位為5度,取樣率512
取樣一點的時間為1/512,所以下一點這個5赫茲的信號要增加 2pi/512*5 度
把這個增加的度數加到fft的相位,即5度再加這個增量,應該就可得到下一點的相位角
結果發現用在信號為fft的基頻整數倍的情況下,是可以work的
但信號非整數倍的情況下就不對....
我後來知道這是fft的問題,
不知道有什麼方法可以改,讓非整數倍的情況下信號也能正常輪動
附我matlab的程式請教各位,基本上問題就是f1或f2有小數點時,如5.4這樣
就不對
N = 512;
f1 =5;
f2 =15;
adv_factor = 5;% 信號移動點數
for i = 1: 100
t = i+0:1:i+N-1;
sig = cos(2*pi*f1.*t/N)+cos(2*pi*f2.*t/N);
fftsig = fft(sig);
absfft = abs(fftsig);
angfft = angle(fftsig);
stem((1:N),sig);hold on;
dfang = (0:N-1)*2*pi/N*adv_factor;
newang = angfft+dfang;
newang = mod(newang,2*pi);
newang = (newang-pi>eps)*(-2*pi)+newang;
newfftsig = absfft.*exp(j*newang);
ifftsig = real(ifft(newfftsig));
stem((1:N)+0.5,ifftsig,'r');
hold off;
pause(0.5);
end
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.92.30
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.92.30