我一直在做我的ANC项目。为此,我有两个麦克风输入和一个扬声器输出,但最初我使用单个麦克风和dspStreamingPassthrough将麦克风输入传递到扬声器。这里是我的代码如何通过MATLAB DSP系统工具箱降低音频延迟?
% Initialization
numIterations = 500;
% Construct sources (for all inputs)
src1 = dsp.AudioRecorder('DeviceName','Mikrofon (USB-Audiogerät)','NumChannels',1);
% Construct sinks (for all outputs)
sink1_1 = dsp.SpectrumAnalyzer('SampleRate',44100, ...
'PlotAsTwoSidedSpectrum',false, ...
'ShowLegend',true);
sink1_2 = dsp.TimeScope('BufferLength',44100, ...
'SampleRate',44100, ...
'TimeSpan',1, ...
'ShowLegend',true, ...
'ShowGrid',true, ...
'YLimits',[-0.5 0.5]);
sink1_3 =
dsp.AudioPlayer('BufferSizeSource','Property','BufferSize',1024,...
'QueueDuration',0,'OutputNumUnderrunSamples',true);
sink1_3.DeviceName = 'Lautsprecher (USB-Audiogerät)';
% Stream processing loop
clear dspStreamingPassthrough;
for i = 1:numIterations
% Sources
in1 = step(src1);
% User Algorithm
out1 = dspStreamingPassthrough(in1);
% Sinks
step(sink1_3,out1);
step(sink1_1,out1);
step(sink1_2,out1);
nUnderrun=step(sink1_3,out1);
end
% Clean up
release(src1);
release(sink1_1);
release(sink1_2);
我使用Windows的DirectSound音频驱动程序(我不能使用ASIO驱动程序,因为我无法访问个人音频设备名称。!)现在我的,即1.2秒音频延迟,如果我说'你好“现在,在1.2秒后扬声器说'你好''(这是绝对没有任何音频输入数据处理只是'dspStreamingPassthrough')。如何减少这种令人难以置信的延迟?
对于我的1米长的管道(风管)项目,我应该能够在1.7毫秒或更少的时间内处理数据!我尝试了最低'BufferSize'和最低'QueueDuration'!
还有哪些其他参数可以影响加速此过程?用MATLAB还是不可以? PS:对整个代码进行翻译。 - 我正在使用价格低廉的声卡(7欧元)
即使可以减少延迟某种程度上你不会要能够把它降低到<1.7毫秒。 –
所以matlab不适合这个!什么是解决方案呢?你能给我一些建议吗? – charansai
这不是MATLAB--它是一个更基本的问题 - 1.7ms @ 44.1kHz采样率是75个采样 - 声卡,驱动程序等中的缓冲区将比这更大。 –