matlab 做音频文件(WAV格式)的频谱图程序 以及做时域波形图的程序

急用 望大家帮忙

%你好,该程序读mywav.wav文件,然后显示频谱以及波形。注意,mywav.wav文件不要太长,否则运算会很慢。

[y,Fs,bits]=wavread('mywav.wav');%读出信号,采样率和采样位数。
y=y(:,1);%我这里假设你的声音是双声道,我只取单声道作分析,如果你想分析另外一个声道,请改成y=y(:,2)

sigLength=length(y);
Y = fft(y,sigLength);
Pyy = Y.* conj(Y) / sigLength;
halflength=floor(sigLength/2);
f=Fs*(0:halflength)/sigLength;
figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)');
t=(0:sigLength-1)/Fs;
figure;plot(t,y);xlabel('Time(s)');
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-01-31
朋友,年代太久远了。在工地搬砖的生活容易使人健忘。
做完fft变换的数值是不能直接画图的,因为那些都是向量。横坐标是频率,纵坐标是向量,那是没有办法画出来的。所以一般要画绝对值。abs(y)。年轻的时候,我喜欢画功率谱:y.*
conj(y)。两者会有点区别。
pyy
=
y.*
conj(y)
/
siglength;
信号点乘它的共轭,求功率。除以信号长度,是为了归一化吗?什么叫做归一化?我老了。。。。
halflength=floor(siglength/2);
fft以后是对称的,所以画图只要画一半就可以了。
f=fs*(0:halflength)/siglength;
采样频率是fs,所以最后画出的频域图是从0赫兹-fs赫兹。其实吧,这个信号从0-fs/2一段,从fs/2-fs一段是对称的,所以画一般就行。因为只画半,所以只从最后横轴一半长度即可。
---------------------------------我是分割线-----------------------
请教傅立叶分析中pyy=y.*conj(y)/512;和nfft
=
2^nextpow2(l);
的意思y=........%一段受干扰的信号
y=fft(y,512);
pyy=y.*conj(y)/512;
f=1000*(0:256)/512;
plot(f,pyy(1:257))
想知道
pyy=y.*conj(y)/512;
f=1000*(0:256)/512;
这两句话什么意思
另外看到matlab
fft帮助里的傅立叶分析如下:
nfft
=
2^nextpow2(l);
y
=
fft(y,nfft)/l;
f
=
fs/2*linspace(0,1,nfft/2);
plot(f,2*abs(y(1:nfft/2)))
这二个方法有什么区别呀,nextpow2是什么意思呢?
我是初学者,自学的,还请各位高手请教~
有热心的高手能把每句话详细的解释下吗?
谢谢~
---------------------------你tm才是分割线--------------------------
nfft
=
2^nextpow2(l);
%
取2的整数次幂
x
=
fft(x,nfft)/l;
%
求fft后的真实幅值
f
=
fs/2*linspace(0,1,nfft/2+1);
plot(f,2*abs(x(1:nfft/2+1)))
%
画单边频谱值