[問題]如何改變fft後的頻譜圖再做ifft

看板MATLAB作者 (ほむら)時間5年前 (2018/06/18 11:55), 編輯推噓3(305)
留言8則, 3人參與, 5年前最新討論串1/1
各位高手大家好,第一次發文,如果有需要修正的地方請指教。 小弟目前在做一個實驗,是先讀進一個聲音檔,然後我想要改變它的聲音, 於是我的想法是這樣,先將聲音做fft然後移動它的頻率,在ifft回來。譬如把比較高的 頻率移到低一點,這樣聲音就能降低。 因為我不是要做單純的聲音頻率調高低,希望透過傅立葉轉換找到聲音的特徵 來改變聲音。 目前沒有成功,我改變完後聲音沒有變,覺得是我程式寫錯,或是觀念錯了, 希望大家可以幫忙。 附上我的程式碼: [y hz ] = wavread('female_b.wav');%路徑我就沒附了 y = y(1 : 1 : length(y)); L = length(y) ; S=fft(y,L); for i=1:L/2 %將大於800強度的頻率移到-250頻率的地方,因為頻譜是對稱的,做兩邊 if(abs(S(i))>800) S(i-250)=S(i); S(L-i+250)=S(i); S(L-i)=0.001; S(i)=0.001; end end y2=ifft(S); filename='output.wav';%不能夠直接播放y2,所以寫了一個新檔 audiowrite(filename,y2,hz); [y3 hz ] = wavread('output.wav');%一樣沒附路徑 sound(y3,hz); 拜託各位了! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.236.252.35 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1529294157.A.CD1.html

06/18 11:59, 5年前 , 1F
不好意思 !我可能晚上才能回各位
06/18 11:59, 1F

06/19 07:39, 5年前 , 2F
做完fft還要fftshift才能夠得到對稱的頻譜吧(?
06/19 07:39, 2F

06/19 12:02, 5年前 , 3F
fftshift不是左右交換而已嗎?還是要換完再改?
06/19 12:02, 3F

06/22 23:47, 5年前 , 4F
實數fft是共軛對稱,對稱的位置是floor(L/2)+1
06/22 23:47, 4F

06/23 00:00, 5年前 , 5F
應該判斷奇偶數先找到對稱位置後再做共軛對稱,雖然
06/23 00:00, 5F

06/23 00:00, 5年前 , 6F
不知道你想做什麼處理,但總覺得拿一整段語音訊號做ff
06/23 00:00, 6F

06/23 00:00, 5年前 , 7F
t好像怪怪的......
06/23 00:00, 7F

06/26 01:40, 5年前 , 8F
聲音做fft是得到頻譜
06/26 01:40, 8F
文章代碼(AID): #1R9orDpH (MATLAB)