✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

匹配滤波器的原理

匹配滤波(matched filtering)是最佳滤波的一种,当输入信号具有某一特殊波形时,其输出达到最大

在数字通信系统中,滤波器是其中重要部件之一,滤波器特性的选择直接影响数字信号的恢复。在数字信号接收中,滤波器的作用有两个方面,使滤波器输出有用信号成分尽可能强;抑制信号带外噪声,使滤波器输出噪声成分尽可能小,减小噪声对信号判决的影响。

对最佳线性滤波器的设计有两种准则:

一种是使滤波器输出的信号波形与发送信号波形之间的均方误差最小,由此而导出的最佳线性滤波器称为维纳滤波器;

另一种是使滤波器输出信噪比在某一特定时刻达到最大,由此而导出的最佳线性滤波器称为匹配滤波器

匹配滤波器对信号做的两种处理

(1)去掉信号相频函数中的任何非线性部分,因而在某一时刻可使信号中所有频率分量都在输出端同相叠加而形成峰值。

(2)是按照信号的扶贫特性对输入波形进行加权,一边最有效地接收信号能量而一直干扰的输出功率。

⛄ 部分代码

function [x1,x2] = vad(x)

%幅度归一化到[-1,1]

x = double(x);

x = x / max(abs(x));

%常数设置

FrameLen = 240;

FrameInc = 80;

amp1 = 10;

amp2 = 2;

zcr1 = 10;

zcr2 = 5;

maxsilence = 8;  % 6*10ms  = 30ms

minlen  = 15;    % 15*10ms = 150ms

status  = 0;

count   = 0;

silence = 0;

%计算过零率

tmp1  = enframe(x(1:end-1), FrameLen, FrameInc);

tmp2  = enframe(x(2:end)  , FrameLen, FrameInc);

signs = (tmp1.*tmp2)<0;

diffs = (tmp1 -tmp2)>0.02;

zcr   = sum(signs.*diffs, 2);

%计算短时能量

amp = sum(abs(enframe(filter([1 -0.9375], 1, x), FrameLen, FrameInc)), 2);

%调整能量门限

amp1 = min(amp1, max(amp)/4);

amp2 = min(amp2, max(amp)/8);

%开始端点检测

x1 = 0; 

x2 = 0;

for n=1:length(zcr)

   goto = 0;

   switch status

   case {0,1}                   % 0 = 静音, 1 = 可能开始

      if amp(n) > amp1          % 确信进入语音段

         x1 = max(n-count-1,1);

         status  = 2;

         silence = 0;

         count   = count + 1;

      elseif amp(n) > amp2 | ... % 可能处于语音段

             zcr(n) > zcr2

         status = 1;

         count  = count + 1;

      else                       % 静音状态

         status  = 0;

         count   = 0;

      end

   case 2,                       % 2 = 语音段

      if amp(n) > amp2 | ...     % 保持在语音段

         zcr(n) > zcr2

         count = count + 1;

      else                       % 语音将结束

         silence = silence+1;

         if silence < maxsilence % 静音还不够长,尚未结束

            count  = count + 1;

         elseif count < minlen   % 语音长度太短,认为是噪声

            status  = 0;

            silence = 0;

            count   = 0;

         else                    % 语音结束

            status  = 3;

         end

      end

   case 3,

      break;

   end

end   

count = count-silence/2;

x2 = x1 + count -1;

⛄ 运行结果

【语音识别】基于匹配滤波器语音识别附matlab代码_静音

【语音识别】基于匹配滤波器语音识别附matlab代码_匹配滤波_02

【语音识别】基于匹配滤波器语音识别附matlab代码_线性滤波_03

⛄ 参考文献

[1] 韦春丽,霍春宝.基于DTW的语音识别在MATLAB中的实现方法浅析[J].数字技术与应用, 2011(12):2.DOI:CNKI:SUN:SZJT.0.2011-12-123.

[2] 张培玲,成凌飞.基于MATLAB的汉语数字语音识别系统[J].机械管理开发, 2011(4):3.DOI:10.3969/j.issn.1003-773X.2011.04.099.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料