语音信号处理MATLAB实现
生活随笔
收集整理的這篇文章主要介紹了
语音信号处理MATLAB实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
matlab語音信號處理的一段代碼
涉及到的函數sound()函數audioread()函數
sound函數的輸入參量是音頻數據向量、采樣頻率和轉換位數。
也可以自己寫些聲音數據。下面的聲音聲調和頻率有關,長度和數據長度有關:
例如:
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里函數audioread的使用格式:
[y,Fs]=audioread('D:\MATLAB\work\noisymusic.wav');
sound(y,Fs);
還涉及到數字信號處理的一部分信號處理的知識,這里只是簡單的用低通濾波器來進行處理,可以發現濾波的效果并不好
[y,fs]=audioread('D:\matlab\work\voice.mp3'); sound(y,fs) % 回放語音信號 n=length(y) %選取變換的點數 y_p=fft(y,n); %對n點進行傅里葉變換到頻域 f=fs*(0:n/2-1)/n; % 對應點的頻率 figure(1) subplot(2,1,1); plot(y); %語音信號的時域波形圖 title('原始語音信號采樣后時域波形'); xlabel('時間軸') ylabel('幅值 A') subplot(2,1,2); plot(f,abs(y_p(1:n/2))); %語音信號的頻譜圖 title('原始語音信號采樣后頻譜圖'); xlabel('頻率Hz'); ylabel('頻率幅值'); %對音頻信號產生噪聲L=length(y) %計算音頻信號的長度noise=0.1*randn(L,2); %產生等長度的隨機噪聲信號(這里的噪聲的大小取決于隨機函數的幅度倍數)y_z=y+noise; %將兩個信號疊加成一個新的信號——加噪聲處理 pause(5)sound(y_z,fs) %對加噪后的語音信號進行分析 n=length(y); %選取變換的點數 y_zp=fft(y_z,n); %對n點進行傅里葉變換到頻域 f=fs*(0:n/2-1)/n; % 對應點的頻率 figure(2) subplot(2,1,1); plot(y_z); %加噪語音信號的時域波形圖 title('加噪語音信號時域波形'); xlabel('時間軸') ylabel('幅值 A') subplot(2,1,2); plot(f,abs(y_zp(1:n/2))); %加噪語音信號的頻譜圖 title('加噪語音信號頻譜圖'); xlabel('頻率Hz'); ylabel('頻率幅值'); %對加噪的語音信號進行去噪程序如下: fp=1500;fc=1700;As=100;Ap=1; %(以上為低通濾波器的性能指標) 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'); %(此前為低通濾波器設計階段)——接下來為去除噪聲信號的程序—— x=fftfilt(b,y_z); X=fft(x,n); figure(4); subplot(2,2,1);plot(f,abs(y_zp(1:n/2))); title('濾波前信號的頻譜'); subplot(2,2,2);plot(abs(X)); title('濾波后信號頻譜'); subplot(2,2,3);plot(y_z); title('濾波前信號的波形') subplot(2,2,4);plot(x); title('濾波后信號的波形') pause(5); sound(x,fs) %回放濾波后的音頻?
總結
以上是生活随笔為你收集整理的语音信号处理MATLAB实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdb3编码规则波形_光电编码器都归入8
- 下一篇: 最小二乘算法MATLAB代码实现