语音信号处理MATLAB实现
matlab語(yǔ)音信號(hào)處理的一段代碼
涉及到的函數(shù)sound()函數(shù)audioread()函數(shù)
sound函數(shù)的輸入?yún)⒘渴且纛l數(shù)據(jù)向量、采樣頻率和轉(zhuǎn)換位數(shù)。
也可以自己寫些聲音數(shù)據(jù)。下面的聲音聲調(diào)和頻率有關(guān),長(zhǎng)度和數(shù)據(jù)長(zhǎng)度有關(guān):
例如:
sound(sin(2*pi*25*(1:4000)/100));
響兩聲就是:
sound(sin(2*pi*25*(1:4000)/100));
pause(1);
sound(sin(2*pi*25*(1:4000)/100));
MATLAB也自帶了很多聲音:
%鳥聲
load chirp
sound(y,Fs)
%鑼聲
load gong
sound(y,Fs)
%哈里路亞
MATLAB里函數(shù)audioread的使用格式:
[y,Fs]=audioread('D:\MATLAB\work\noisymusic.wav');
sound(y,Fs);
還涉及到數(shù)字信號(hào)處理的一部分信號(hào)處理的知識(shí),這里只是簡(jiǎn)單的用低通濾波器來(lái)進(jìn)行處理,可以發(fā)現(xiàn)濾波的效果并不好
[y,fs]=audioread('D:\matlab\work\voice.mp3'); sound(y,fs) % 回放語(yǔ)音信號(hào) n=length(y) %選取變換的點(diǎn)數(shù) y_p=fft(y,n); %對(duì)n點(diǎn)進(jìn)行傅里葉變換到頻域 f=fs*(0:n/2-1)/n; % 對(duì)應(yīng)點(diǎn)的頻率 figure(1) subplot(2,1,1); plot(y); %語(yǔ)音信號(hào)的時(shí)域波形圖 title('原始語(yǔ)音信號(hào)采樣后時(shí)域波形'); xlabel('時(shí)間軸') ylabel('幅值 A') subplot(2,1,2); plot(f,abs(y_p(1:n/2))); %語(yǔ)音信號(hào)的頻譜圖 title('原始語(yǔ)音信號(hào)采樣后頻譜圖'); xlabel('頻率Hz'); ylabel('頻率幅值'); %對(duì)音頻信號(hào)產(chǎn)生噪聲L=length(y) %計(jì)算音頻信號(hào)的長(zhǎng)度noise=0.1*randn(L,2); %產(chǎn)生等長(zhǎng)度的隨機(jī)噪聲信號(hào)(這里的噪聲的大小取決于隨機(jī)函數(shù)的幅度倍數(shù))y_z=y+noise; %將兩個(gè)信號(hào)疊加成一個(gè)新的信號(hào)——加噪聲處理 pause(5)sound(y_z,fs) %對(duì)加噪后的語(yǔ)音信號(hào)進(jìn)行分析 n=length(y); %選取變換的點(diǎn)數(shù) y_zp=fft(y_z,n); %對(duì)n點(diǎn)進(jìn)行傅里葉變換到頻域 f=fs*(0:n/2-1)/n; % 對(duì)應(yīng)點(diǎn)的頻率 figure(2) subplot(2,1,1); plot(y_z); %加噪語(yǔ)音信號(hào)的時(shí)域波形圖 title('加噪語(yǔ)音信號(hào)時(shí)域波形'); xlabel('時(shí)間軸') ylabel('幅值 A') subplot(2,1,2); plot(f,abs(y_zp(1:n/2))); %加噪語(yǔ)音信號(hào)的頻譜圖 title('加噪語(yǔ)音信號(hào)頻譜圖'); xlabel('頻率Hz'); ylabel('頻率幅值'); %對(duì)加噪的語(yǔ)音信號(hào)進(jìn)行去噪程序如下: fp=1500;fc=1700;As=100;Ap=1; %(以上為低通濾波器的性能指標(biāo)) wc=2*pi*fc/fs; wp=2*pi*fp/fs; wdel=wc-wp; beta=0.112*(As-8.7); N=ceil((As-8)/2.285/wdel); wn= kaiser(N+1,beta); ws=(wp+wc)/2/pi; b=fir1(N,ws,wn); figure(3); freqz(b,1); title('低通濾波器的幅頻圖'); xlabel('頻率/hz'); ylabel('幅度/db'); %(此前為低通濾波器設(shè)計(jì)階段)——接下來(lái)為去除噪聲信號(hào)的程序—— x=fftfilt(b,y_z); X=fft(x,n); figure(4); subplot(2,2,1);plot(f,abs(y_zp(1:n/2))); title('濾波前信號(hào)的頻譜'); subplot(2,2,2);plot(abs(X)); title('濾波后信號(hào)頻譜'); subplot(2,2,3);plot(y_z); title('濾波前信號(hào)的波形') subplot(2,2,4);plot(x); title('濾波后信號(hào)的波形') pause(5); sound(x,fs) %回放濾波后的音頻?
總結(jié)
以上是生活随笔為你收集整理的语音信号处理MATLAB实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: hdb3编码规则波形_光电编码器都归入8
- 下一篇: 最小二乘算法MATLAB代码实现