MATLAB实现实时录音,语音采集与读写用matlab实现录音以及语谱图的绘制.pdf
《語音信號(hào)處理》仿真作業(yè)
院 系 電氣與電子工程學(xué)院
專業(yè)班級(jí)
姓 名
學(xué) 號(hào)
指導(dǎo)教師
2020 年 3 月
作業(yè)題目:語音采集與讀寫
一、目的
(1)了解matlab 采集語音信號(hào)的原理與采用命令;
(2 )掌握基于matlab 的語音文件的創(chuàng)建、讀寫等操作。
二、要求
(1 )利用 matlab 程序?qū)崿F(xiàn)錄音語音信號(hào)“你好,武漢歡迎你”,并保存為
wuhan.wav 文件。
(2 )使用waveread 函數(shù)讀取wuhan.wav 文件,并使用plot 函數(shù)顯示出來。要求:
橫縱坐標(biāo)帶有標(biāo)注,橫軸的單位為秒(s),縱軸顯示歸一化后的數(shù)值。
三、具體步驟 (包含原理、具體實(shí)現(xiàn)、結(jié)果對(duì)比等)
1、基本原理
利用matlab 的語音工具箱進(jìn)行錄音,用電腦聲卡進(jìn)行聲音捕獲。
利用matlab 打開錄音的wav 文件,對(duì)錄音進(jìn)行分析和歸一化,并生成語譜圖。
2 、具體實(shí)現(xiàn) (步驟、代碼)
第一步,用matlab 軟件實(shí)現(xiàn)錄音,并存儲(chǔ)為wav 文件,同時(shí)繪制語音數(shù)據(jù)波形,
代碼如下:
recObj = audiorecorder;
disp('Start speaking.')
recordblocking(recObj, 5);%設(shè)置錄音時(shí)間
disp('End of Recording.');% 回放錄音數(shù)據(jù)
play(recObj);% 獲取錄音數(shù)據(jù)
myRecording = getaudiodata(recObj);% 繪制錄音數(shù)據(jù)波形
plot(myRecording);%存儲(chǔ)語音信號(hào)
filename = ' G:\Desktop\專業(yè)學(xué)習(xí)教程\語音信號(hào)處理\wuhan.wav';
audiowrite(filename,myRecording,12000);
第二步,讀取wav 文件并生成語譜圖,代碼如下:
clear all;
[x,sr]=audioread(' G:\Desktop\ 專 業(yè) 學(xué) 習(xí) 教 程 \ 語 音 信 號(hào) 處 理
\wuhan.wav'); %#ok %sr 為采樣頻率
if (size(x,1)>size(x,2))
x=x';
end
s=length(x);
w=round(44*sr/1000); % 窗長,取離44*sr/100 最近的整數(shù)
n=w; %fft 的點(diǎn)數(shù)
ov=w/2; %50% 的重疊
h=w-ov;
% win=hanning(n)'; %哈寧窗
win=hamming(n)'; %漢明窗
c=1;
ncols=1+fix((s-n)/h); %fix 函數(shù)是將(s-n)/h 的小數(shù)舎去
d=zeros((1+n/2),ncols);
for b=0:h:(s-n)
u=win.*x((b+1):(b+n));
t=fft(u);
d(:,c)=t(1:(1+n/2))';
c=c+1;
end
tt=[0:h:(s-n)]/sr;
ff=[0:(n/2)]*sr/n;
imagesc(tt/1000,ff/1000,20*log10(abs(d)));
colormap(gray);
axis xy
xlabel('時(shí)間/s');
ylabel('頻率/kHz');
3、實(shí)驗(yàn)結(jié)果說明
語音數(shù)據(jù)波形 語譜圖
四、總結(jié)
這次做了一些準(zhǔn)備工作所以比較順利,在語譜圖的繪制過程中曾經(jīng)忘了添加
先前wav 錄音文件的具體位置導(dǎo)致編譯失敗,在matlab 報(bào)錯(cuò)后可以仔細(xì)看看彈
出的關(guān)于相關(guān)語句的解析,十分有助于更改錯(cuò)誤并提高對(duì)語句的熟練程度。
總結(jié)
以上是生活随笔為你收集整理的MATLAB实现实时录音,语音采集与读写用matlab实现录音以及语谱图的绘制.pdf的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle创建表空间及用户,Oracl
- 下一篇: matlab人脸追踪,求大神帮助我这个菜