[問題] 問個難的..快速富利葉轉換 一問已回收

看板MATLAB作者 (神啊請讓我失戀吧)時間15年前 (2010/08/28 23:33), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
※ [本文轉錄自 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
文章代碼(AID): #1CUInC6j (MATLAB)