%你好,程式讀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中文網其他相關文章!