作者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/cn.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