題外話
這幾天在尋找可以使 Matlab 實時采樣音頻并處理的函數。剛開始找到的是 網上很多例子采用的 analoginput( ),但是目前在 64位 Windows上無法使用。其次是 audioRecorder( ) , 可以調用但缺點是每次調用都會開關一次麥克風,延遲十分嚴重, 無法實現要求的實時效果。
在 Matlab 幫助文檔里游蕩一會兒之后,發現DSP工具箱里面有個函數 dsp.AudioRecorder( ),試了一下可以實時采樣。創建對象之后麥克風會一直處于開啟狀態,后臺線程也會持續將麥克風數據寫入到緩沖區,我們只需要去緩沖區讀取數據就行。
效果演示
matlab音頻信號處理?代碼
PS:對于dsp.AudioRecorder在新版Matlab中的變化情況,參考官方文檔。
function soundtest()
timeLength=0.1; % 采樣時長,單位秒
samples=timeLength*44100; % 默認采樣率44100,計算采樣點數
音頻頻譜圖怎么看。H = dsp.AudioRecorder(...
'NumChannels' , 1 ,... % 1 個通道
'DeviceDataType', '16-bit integer',... % 16位采樣
'OutputNumOverrunSamples',true,... % 啟用溢出標志
'SamplesPerFrame', samples); % 采樣點數
可視化音頻頻譜手機版。[audioIn,~] = step(H); % 第一次采樣
figure('Name','實時頻譜','MenuBar'...
,'none','ToolBar','none','NumberTitle','off');
xdata=(1:1:samples/2)/timeLength;
axes1= subplot(1,2,1);
dsp音頻解碼芯片,axes2= subplot(1,2,2);
pic= plot(axes1, 1:1:samples, audioIn); % 初始化音頻波形圖
pic2= bar(axes2,xdata, xdata*0,'r'); % 初始化頻譜圖
set(axes1,'xlim', [0 samples], 'ylim', ...
[-0.15 0.15],'XTick',[],'YTick',[] );
音頻頻譜軟件、set(axes2,'xlim', [min(xdata) max(xdata)], 'ylim',[0 6] , ...
'xscale','log','XTick',[1 10 100 1e3 1e4],'YTick',[] );
xlabel(axes2,'頻率 (Hz)');
xlabel(axes1,'波形');
axes2.Position=[0.040 0.48 00.92 0.48]; % 左,下,寬度,高度
matlab播放音頻函數?axes1.Position=[0.040 0.06 0.92 0.25];
drawnow;
while 3>2
[audioIn,Overrun] = step(H); % 采樣
if Overrun > 0
DSP音頻 開發、warning(' 數據溢出 %d 位\n',Overrun);
end
ydata_fft=fft(audioIn); % 傅里葉變換
ydata_abs=abs(ydata_fft(1:samples/2));% 取絕對值
set(pic, 'ydata',audioIn); % 更新波形圖數據
dsp音頻信號處理、set(pic2, 'ydata',log(ydata_abs)); % 更新頻譜圖數據
drawnow; % 刷新
end
end
關于找一找教程網
本站文章僅代表作者觀點,不代表本站立場,所有文章非營利性免費分享。
本站提供了軟件編程、網站開發技術、服務器運維、人工智能等等IT技術文章,希望廣大程序員努力學習,讓我們用科技改變世界。
[基于Matlab dsp工具箱 的實時音頻采集及頻譜顯示]http://www.zyiz.net/tech/detail-93705.html
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态