作者Kanamehomura (ほむら)
看板MATLAB
標題[問題]如何改變fft後的頻譜圖再做ifft
時間Mon Jun 18 11:55:36 2018
各位高手大家好,第一次發文,如果有需要修正的地方請指教。
小弟目前在做一個實驗,是先讀進一個聲音檔,然後我想要改變它的聲音,
於是我的想法是這樣,先將聲音做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://webptt.com/m.aspx?n=bbs/MATLAB/M.1529294157.A.CD1.html
1F:→ Kanamehomura: 不好意思 !我可能晚上才能回各位 06/18 11:59
2F:推 bennyhuang97: 做完fft還要fftshift才能夠得到對稱的頻譜吧(? 06/19 07:39
3F:→ Kanamehomura: fftshift不是左右交換而已嗎?還是要換完再改? 06/19 12:02
4F:推 superemery: 實數fft是共軛對稱,對稱的位置是floor(L/2)+1 06/22 23:47
5F:推 superemery: 應該判斷奇偶數先找到對稱位置後再做共軛對稱,雖然 06/23 00:00
6F:→ superemery: 不知道你想做什麼處理,但總覺得拿一整段語音訊號做ff 06/23 00:00
7F:→ superemery: t好像怪怪的...... 06/23 00:00
8F:→ Kanamehomura: 聲音做fft是得到頻譜 06/26 01:40