%你好,该程序读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)');
给个例题,自己变一下就好
fs=1000;%设定采样频率
N=1024;%设定数据长度
i=0:N-1;
t=i/fs;
f=100;%设定正弦信号频率
%生成正弦信号
x=sin(2*pi*f*t);
subplot(231);
plot(t,x);%作正弦信号的时域波形
axis([0,0.01,-1,1]);
xlabel('t');
ylabel('y');
title('正弦信号时域波形');
grid;
%进行FFT变换并做频谱图
y=fft(x,N);%进行fft变换
mag=abs(y);%幅值
f=(0:N-1)*fs/N;%横坐标频率的表达式为f=(0:M-1)*Fs/M;
subplot(232);
plot(f,mag);%做频谱图
axis([0,100,0,80]);
xlabel('频率(Hz)');
ylabel('幅值');
title('正弦信号幅频谱图');
grid;
%均方根谱
sq=abs(y);
figure(1);
subplot(233);
plot(f,sq);
xlabel('频率(Hz)');
ylabel('均方根谱');
title('正弦信号均方根谱');
grid;
%功率谱
power=sq.^2;
figure(1);
subplot(234);
plot(f,power);
xlabel('频率(Hz)');
ylabel('功率谱');
title('正弦信号功率谱');
grid;
%对数谱
ln=log(sq);
figure(1);
subplot(235);
plot(f,ln);
xlabel('频率(Hz)');
ylabel('对数谱');
title('正弦信号对数谱');
grid;
%用IFFT恢复原始信号
xifft=ifft(y);
magx=real(xifft);
ti=[0:length(xifft)-1]/fs;
subplot(236);
plot(ti,magx);
xlabel('t');
ylabel('y');
title('通过IFFT转换的正弦信号波形');
grid;
以上是matlab音频处理:生成WAV格式频谱图和时域波形图的程序的详细内容。更多信息请关注PHP中文网其他相关文章!