[討論] fft後如何不使用ifft模擬原始訊號.已回收

看板MATLAB作者 (嗯嗯)時間14年前 (2011/04/26 16:13), 編輯推噓1(104)
留言5則, 4人參與, 最新討論串1/1
想請問各位版眾 如果今天對訊號進行fft後 得到頻域資料 舉例說明 原始訊號 y = sin(2.*pi.*f.*t) fft後得f = 50 Hz 那可以由這50 Hz的 Amplitude 與 Phase 直接去還原原始的 y 嗎 有其他要修正的嗎?! 最後附上我的程式碼 clc, clear, close all f1 = 500 ; f2 = 800 ; fs = 5000 ; t = 0 : 1/fs : 2 ; data = sin(2.*pi.*f1.*t + (pi./6)) + cos(2.*pi.*f2.*t + (pi./2)) ; wavplay(data,fs) L = length(data) ; NFFT = 2^nextpow2(L) ; Y = fft(data, NFFT) ; PY = abs(Y)./L.*2 ; AngleY = angle(Y) ; freq = (0:NFFT-1)./NFFT.*fs ; cutoff = ceil(NFFT./2) ; data2 = 0 ; for i = 1 : cutoff data2 = data2 + PY(i) .* cos(2.*pi.* freq(i) .*t + AngleY(i)) ; end wavplay(data2,fs) 比較 data 與 data2 聲音檔有差異, 圖形振幅也約差了 2 倍 請問哪裡要改的嗎?! 謝謝各位版眾~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.40.89

04/26 23:15, , 1F
若頻不是整數倍的話大概不容易....
04/26 23:15, 1F

04/27 10:20, , 2F
或者說,你會比較想濾頻後再轉回去吧
04/27 10:20, 2F

04/28 01:43, , 3F
剛玩了一下, 改成 PY = abs(Y)./NFFT.*2, 即可
04/28 01:43, 3F

04/30 22:07, , 4F
這程式會有點小bug,頻率相同的sin,cos波都是訊號時怎辦?
04/30 22:07, 4F

05/08 09:07, , 5F
我也這樣想過, 囧了.
05/08 09:07, 5F
文章代碼(AID): #1Djdw_4M (MATLAB)