主要内容

声使用麦克风阵列波束形成

这个例子说明了麦克风阵列波束形成中提取想要的语音信号interference-dominant,嘈杂的环境。这样的行动是有用的增强语音信号质量感知或进一步处理。例如,嘈杂的环境可能是一个交易的房间,和麦克风阵列可以交易的监控电脑上安装。如果交易从交易员,计算机必须接受语音命令beamformer操作至关重要增强接收到的语音质量和实现设计的语音识别的准确性。

这个例子展示了两种类型的时域beamformers:延时beamformer和霜beamformer。它说明了可以如何使用对角加载提高霜beamformer的鲁棒性。你可以听语音信号在每个处理步骤如果您的系统有良好的支持。金宝app

定义一个统一的线性阵列

首先,我们定义了一个统一的线性阵列(ULA)”来接收信号。该数组包含10个全向麦克风和元素间距是5厘米。

麦克风=phased.OmnidirectionalMicrophoneElement (“FrequencyRange”20 e3, [20]);Nele = 10;齿龈= phased.ULA (Nele, 0.05,“元素”、麦克风);c = 340;%的声音的速度,在m / s

模拟接收到的信号

接下来,我们模拟多通道麦克风阵列接收到的信号。我们首先加载两个记录的演讲和一个笑声录制。我们也加载笑声音频段干扰。音频信号的采样频率是8 kHz。

因为音频信号通常是大的,它通常是不可行的整个信号读入内存。因此,在这个例子中,我们将模拟和处理信号流的方式,即。,breaking the signal into small blocks at the input, processing each block, and then assembling them at the output.

第一个语音信号的入射方向-30度方位和仰角0度。第二语音信号的方向-10度方位和仰角10度。方位的干扰来自20度和在海拔0度。

ang_dft = [-30;0);ang_cleanspeech = [-10;10);ang_laughter = [20;0);

现在我们可以使用宽带收集器来模拟3多通道阵列接收到的信号。注意,这种方法假定每个输入单通道接收信号在由一个麦克风阵列的起源。

fs = 8000;收集器= phased.WidebandCollector (“传感器”、齿龈“PropagationSpeed”c“SampleRate”fs,“NumSubbands”,1000,“ModulatedInput”、假);t_duration = 3;% 3秒t = 0:1 / fs: t_duration-1 / fs;

我们生成一个白噪声信号与电源1瓦特的军医来表示每个传感器的热噪声。当地一个随机数流保证了可重复的结果。

prev = rng (2008);noisePwr = 1的军医;%噪声功率

我们现在开始仿真。在接收信号输出,存储在一个10-column矩阵。矩阵的每一列代表一个麦克风收集的信号。请注意,我们还使用流媒体播放音频的方法在模拟。

% preallocateNSampPerFrame = 1000;NTSample = t_duration * fs;sigArray = 0 (NTSample Nele);voice_dft = 0 (NTSample, 1);voice_cleanspeech = 0 (NTSample, 1);voice_laugh = 0 (NTSample, 1);%设置音频设备的作家audioWriter = audioDeviceWriter (“SampleRate”fs,“金宝appSupportVariableSizeInput”,真正的);isAudio金宝appSupported =(长度(getAudioDevices (audioWriter)) > 1);dftFileReader = dsp.AudioFileReader (“dft_voice_8kHz.wav”,“SamplesPerFrame”,NSampPerFrame);speechFileReader = dsp.AudioFileReader (“cleanspeech_voice_8kHz.wav”,“SamplesPerFrame”,NSampPerFrame);laughterFileReader = dsp.AudioFileReader (“laughter_8kHz.wav”,“SamplesPerFrame”,NSampPerFrame);%模拟m = 1: NSampPerFrame: NTSample sig_idx = m: m + NSampPerFrame-1;x1 = dftFileReader ();x2 = speechFileReader ();x3 = 2 * laughterFileReader ();temp =收集器((x1, x2) x3),[ang_dft ang_cleanspeech ang_laughter]) +√noisePwr * randn (NSampPerFrame Nele);如果isAudio金宝appSupported玩(audioWriter, 0.5 *临时(:,3));结束sigArray (sig_idx:) = temp;voice_dft (sig_idx) = x1;voice_cleanspeech (sig_idx) = x2;voice_laugh (sig_idx) = x3;结束

注意,笑声掩盖了语音信号,使他们难以理解的。我们可以画出信号通道3如下:

情节(t, sigArray (:, 3));包含(的时间(秒));ylabel (“振幅(V)”);标题(的信号接收通道3 ');ylim (3 [3]);

图包含一个坐标轴对象。坐标轴对象与标题信号接收通道3包含一个类型的对象。

用延时Beamformer过程

时间延迟beamformer补偿在阵列信号的到达时间差异来自一个特定的方向。平均时间一致的多通道信号前后一致地提高信噪比(信噪比)。现在,定义一个转向角对应于第一个语音信号的入射方向和构造一个延时beamformer。

angSteer = ang_dft;beamformer = phased.TimeDelayBeamformer (“SensorArray”、齿龈“SampleRate”fs,“方向”angSteer,“PropagationSpeed”c)
beamformer =分阶段。TimeDelayBeamformer属性:SensorArray: [1 x1分阶段。齿龈]PropagationSpeed: 340 SampleRate: 8000 DirectionSource:“财产”方向:[2 x1双]WeightsOutputPort:假的

接下来,我们处理合成信号,情节和传统beamformer听的输出。我们回放期间beamformed音频信号处理。

signalsource = dsp.SignalSource (“信号”sigArray,“SamplesPerFrame”,NSampPerFrame);cbfOut = 0 (NTSample, 1);m = 1: NSampPerFrame: NTSample temp = beamformer (signalsource ());如果isAudio金宝appSupported玩(audioWriter、临时);结束cbfOut (m: m + NSampPerFrame-1:) = temp;结束情节(t, cbfOut);包含(的时间(秒));ylabel (“振幅(V)”);标题(“延时Beamformer输出”);ylim (3 [3]);

图包含一个坐标轴对象。坐标轴对象与标题延时Beamformer输出包含一个类型的对象。

一个可以测量阵列语音增强的增益,这是比输出SINR signal-to-interference-plus-noise比(SINR)输入。

agCbf = pow2db(意思是((voice_cleanspeech + voice_laugh)。^ 2 + noisePwr) /意思是((cbfOut - voice_dft) ^ 2)。)
agCbf = 9.5022

第一个语音信号开始出现时间延迟beamformer输出。我们获得一个SINR改进为9.4 dB。然而,背景笑声仍与演讲。为了获得更好的beamformer性能,使用霜beamformer。

用弗罗斯特Beamformer过程

每个传感器通过附加FIR滤波器,霜beamformer多波束形成加权来抑制干扰。它是一种自适应算法,null在干扰方向更好地抑制干扰。指导方向,霜beamformer使用无失真约束确保所需的信号并不压抑。让我们创建一个霜beamformer 20-tap冷杉在每一个传感器。

frostbeamformer =phased.FrostBeamformer (“SensorArray”、齿龈“SampleRate”fs,“PropagationSpeed”c“FilterLength”,20岁,“DirectionSource”,输入端口的);

接下来,使用霜beamformer处理合成信号。

重置(signalsource);FrostOut = 0 (NTSample, 1);m = 1: NSampPerFrame: NTSample FrostOut (m: m + NSampPerFrame-1:) =frostbeamformer (signalsource (), ang_dft);结束

我们可以玩和情节整个音频信号一旦处理。

如果isAudio金宝appSupported玩(audioWriter FrostOut);结束情节(t, FrostOut);包含(的时间(秒));ylabel (“振幅(V)”);标题(“霜Beamformer输出”);ylim (3 [3]);

图包含一个坐标轴对象。坐标轴对象与标题霜Beamformer输出包含一个类型的对象。

%计算阵列增益agFrost = pow2db(意思是((voice_cleanspeech + voice_laugh)。^ 2 + noisePwr) /意思是((FrostOut - voice_dft) ^ 2)。)
agFrost = 14.4385

注意,干扰现在取消了。霜beamformer阵列增益14 dB,高于4.5 dB的延时beamformer。性能改进令人印象深刻,但有很高的计算成本。在前面的例子中,一个冷杉过滤器订单20用于每个麦克风。与所有10个传感器,需要转化200 - 200矩阵,这可能是昂贵的实时处理。

使用对角加载提高霜Beamformer的鲁棒性

接下来,我们想把数组的第二个语音信号的方向。假设我们不知道的确切方向第二语音信号除了粗略估计方位5度和海拔5度。

释放(frostbeamformer);ang_cleanspeech_est = [5;5);%估计指导方向重置(signalsource);FrostOut2 = 0 (NTSample, 1);m = 1: NSampPerFrame: NTSample FrostOut2 (m: m + NSampPerFrame-1:) = frostbeamformer (signalsource (),ang_cleanspeech_est);结束如果isAudio金宝appSupported玩(audioWriter FrostOut2);结束情节(t, FrostOut2);包含(的时间(秒));ylabel (“振幅(V)”);标题(“霜Beamformer输出”);ylim (3 [3]);

图包含一个坐标轴对象。坐标轴对象与标题霜Beamformer输出包含一个类型的对象。

%计算阵列增益agFrost2 = pow2db(意思是((voice_dft + voice_laugh)。^ 2 + noisePwr) /意思是((FrostOut2 - voice_cleanspeech) ^ 2)。)
agFrost2 = 6.1927

演讲是几乎没有声音。尽管beamformer 6.1 dB的增益、性能遭受不准确的指导方向。提高霜beamformer的鲁棒性的一种方法是使用对角加载。这种方法增加了少量估计协方差矩阵的对角元素。这里我们使用一个对角线的价值1 e - 3。

%指定对角加载值释放(frostbeamformer);frostbeamformer。DiagonalLoadingFactor = 1 e - 3;重置(signalsource);FrostOut2_dl = 0 (NTSample, 1);m = 1: NSampPerFrame: NTSample FrostOut2_dl (m: m + NSampPerFrame-1:) =frostbeamformer (signalsource (), ang_cleanspeech_est);结束如果isAudio金宝appSupported玩(audioWriter FrostOut2_dl);结束情节(t, FrostOut2_dl);包含(的时间(秒));ylabel (“振幅(V)”);标题(“霜Beamformer输出”);ylim (3 [3]);

图包含一个坐标轴对象。坐标轴对象与标题霜Beamformer输出包含一个类型的对象。

%计算阵列增益agFrost2_dl = pow2db(意思是((voice_dft + voice_laugh)。^ 2 + noisePwr) /意思是((FrostOut2_dl - voice_cleanspeech) ^ 2)。)
agFrost2_dl = 6.4788

现在提高语音信号的输出,我们获得一个0.3 dB获得改进的对角加载技术。

释放(frostbeamformer);释放(signalsource);如果isAudio金宝appSupported暂停(3);%清除AudioPlayer缓冲区释放(audioWriter);结束rng(上一页);

总结

这个例子展示了如何使用时域beamformers检索从嘈杂的麦克风阵列语音信号测量。示例还展示了如何模拟一个interference-dominant麦克风阵列接收到的信号。示例使用时间延迟和霜beamformers和比较它们的性能。霜beamformer有更好的干扰抑制能力。这个例子还说明使用对角加载提高霜beamformer的鲁棒性。

参考

[1]o·l·弗罗斯特三世,线性约束自适应阵列处理的算法,IEEE的诉讼,60卷,8号),1972年8月,页925 - 935。