我一直在研究我的ANC项目。为此我有两个麦克风输入和一个扬声器输出,但最初我使用单个麦克风和dspStreamingPassthrough将麦克风输入传递给扬声器。这是我的代码
% 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秒,即如果我说''你好&# 39;'现在在麦克风中,在1.2秒后,扬声器正在说“你好”(这绝对没有任何音频输入数据处理只是&#d; dspStreamingPassthrough')。如何减少这种令人难以置信的延迟?
对于我的1米长管(风道)项目,我应该能够在1.7毫秒或更短的时间内处理数据!我试过最低的' BufferSize'最低的QueueDuration'可能!!
有哪些其他参数可以影响加速此过程?是否可以使用MATLAB?
PS: - 适用于整个代码。 - 我正在使用质优价廉的声卡(7欧元)
答案 0 :(得分:0)
DirectSound具有比ASIO更高的延迟,因为DirectSound不适合低延迟应用。 DSP System Toolbox尚不支持WASAPI。
从15a开始,这些对象的延迟性能大大提高。我不确定您正在运行哪个版本但尝试升级到15a或更高版本。
至于调整延迟,请尝试以下操作: *将播放器和录像机的队列持续时间属性设置为0秒。 *对于录像机,匹配SamplesPerFrame和BufferSize属性。 *对于播放器,请确保数据大小与BuferSize属性匹配。
BufferSize属性是声卡运行的大小。
如果丢弃,请增加BufferSize值。下降的原因有很多: *您运行的算法并不比BufferSize / SampleRate快 *声卡无法在此BufferSize上运行。某些声卡允许您在使用ASIO时对其进行修改。 *限制播放器/录像机对象。
希望这有帮助。
的Dinesh