文档

包络检波

这个例子展示了如何实现两种常见的包络检测方法。一种方法使用平方和低通滤波。另一个使用希尔伯特变换。这个例子说明了MATLAB®和Simulink®的实现。金宝app

介绍

信号的包络线相当于它的轮廓线,包络线检测器连接了信号中的所有峰值。包络检测在信号处理和通信领域有着广泛的应用,其中之一就是调幅检测。下面的框图显示了使用这两种方法进行包络检测的实现。

方法1:平方低通滤波

这种包络检测方法需要对输入信号进行平方,然后通过低通滤波器将信号发送出去。平方信号有效地解调输入使用自己作为自己的载波。这意味着信号的一半能量被推高到更高的频率,一半被转移到直流。然后向下采样这个信号来降低采样频率。如果信号没有任何可能导致混叠的高频,你可以做降采样。否则,应使用FIR抽取,在降采样信号之前应用低通滤波器。在此之后,通过一个最小相位的低通滤波器来消除高频能量。最后只剩下信号包络。

为了保持正确的比例,您必须执行两个额外的操作。首先,你必须把信号放大两倍。因为你只保留了信号能量的下半部分,这个增益匹配了最后的能量和它的原始能量。其次,必须取信号的平方根,以扭转因平方信号而产生的缩放失真。

该包络检测方法易于实现,可以通过低阶滤波器实现,最大限度地减少输出延迟。

方法2:希尔伯特变换

这种包络检测方法需要利用希尔伯特变换生成输入的解析信号。解析信号是复数信号,其中实部是原始信号,虚部是原始信号的希尔伯特变换。

数学上,信号x(t)的包络e(t)被定义为解析信号的幅值,如下式所示。

在哪里

是x(t)的希尔伯特变换。

你可以用32点帕克斯-麦克莱伦FIR滤波器找到信号的希尔伯特变换。为了形成解析信号,你将信号的希尔伯特变换乘以根号(-1)(虚单位),然后将其加到延时的原始信号上。这是必要的延迟输入信号,因为希尔伯特变换,这是实现FIR滤波器,将引入滤波长度的一半的延迟。

你可以通过取解析信号的绝对值来找到信号的包络。与原始信号相比,包络是一个低频信号。为了降低它的采样频率,消除振铃并平滑包络,你对这个信号下采样并将结果通过低通滤波器。

MATLAB的例子:初始化

初始化所需的变量,如帧大小和文件名。在处理循环中使用System对象之前,创建和初始化它们对于获得最佳性能至关重要。

Fs = 22050;numSamples = 10000;DownsampleFactor = 15;frameSize = 10 * DownsampleFactor;

创建一个正弦波系统对象,并设置其属性来生成两个正弦波。一个正弦波作为信息信号,另一个正弦波作为载波信号产生调幅。

sin = dsp. sine ([0.4 1],[10 200],...“SamplesPerFrame”frameSize,...“SampleRate”Fs);

创建一个低通FIR滤波器来过滤平方信号以检测其包络。

lp1 = dsp。FIRFilter (“分子”,firpm(20,[0 0.03 0.1 1],[1 1 0 0]));

创建三个数字滤波器系统对象。第一个实现希尔伯特变压器,第二个补偿由希尔伯特变压器引入的延迟,第三个是检测信号包络的低通滤波器。

N = 60;%过滤器订单hilbertTransformer = dsp。FIRFilter (...“分子”firpm (N [0.01 .95], [1],希尔伯特的));延迟= dsp。延迟(“长度”、N / 2);lp2 = dsp。FIRFilter (“分子”,firpm(20,[0 0.03 0.1 1],[1 1 0 0]));

创建并配置两个时间范围System对象来绘制输入信号及其包络线。

scope1 = dsp。TimeScope (...“NumInputPorts”2,...“名字”“利用幅度调制进行包络检测”...“SampleRate”Fs / DownsampleFactor], [Fs,...“TimeDisplayOffset”, (N / 2 + frameSize) / Fs, 0],...“TimeSpanSource”“属性”...“时间间隔”, 0.45,...“YLimits”(-2.5 - 2.5),...“TimeSpanOverrunAction”“滚动”);pos = scope1.Position;scope2 = dsp。TimeScope (...“NumInputPorts”2,...“名字”利用希尔伯特变换进行包络检测...“位置”, (pos (1) + pos (3), pos (2:4)],...“SampleRate”Fs / DownsampleFactor], [Fs,...“TimeDisplayOffset”, (N / 2 + frameSize) / Fs, 0],...“TimeSpanSource”“属性”...“时间间隔”, 0.45,...“YLimits”(-2.5 - 2.5),...“TimeSpanOverrunAction”“滚动”);

MATLAB实例:流处理循环

创建处理循环,对输入信号执行包络检测。这个循环使用您实例化的System对象。

i = 1:numSamples/frameSize sig = sin ();Sig = (1 + Sig (:,1)) .* Sig (:, 2);%幅度调制%包络检波器通过平方信号和低通滤波Sigsq = 2 * sig .* sig;sigenv1 =√lp1 downsample (sigsq DownsampleFactor)));在时域中使用Hilbert变换的包络检测器sige = abs(complex(0, hilbertTransformer(sig)) + delay(sig));sigenv2 = lp2 (downsample(锗硅DownsampleFactor));标出信号和信封sigenv1 scope1(团体);sigenv2 scope2(团体);结束释放(scope1);释放(scope2);

MATLAB实例:包络检测器结果

在图中,采用Hilbert变换的包络检测方法,由于采用FIR滤波器实现的Hilbert变换并不理想,导致包络幅值与实际信号不匹配。也就是说,幅值响应并不适用于所有频率。信封的形状仍然与实际信号的信封相匹配。

金宝appSimulink示例:方法1(平方和低通滤波)

如上所述,方法1的工作原理是将输入信号平方并将其通过低通滤波器发送。

在这个Simul金宝appink例子中,一个简单的最小相位低通滤波器被用来去除高频能量。为了保持正确的缩放,还包含了另外两个操作。第一种方法是给信号增加2倍的增益。由于我们只保留了信号能量的下半部分,这一增益提高了最后的能量以匹配其原始能量。最后,取信号的平方根来反转输入信号的平方运算产生的缩放畸变。

这种方法很有用,因为它很容易实现,可以通过低阶滤波器来实现,最大限度地减少输出延迟。

金宝appSimulink示例:方法2(希尔伯特变换)

如上所述,方法2通过使用希尔伯特变压器创建输入的解析信号来工作。

在这个Simul金宝appink例子中,信号的希尔伯特变换是使用32点Parks-McClellan FIR滤波器找到的。信号的希尔伯特变换乘以i(虚单位),然后加到原始信号上。原始信号在加入希尔伯特变换之前进行延时,以匹配希尔伯特变换造成的延时,希尔伯特变换的长度是希尔伯特滤波器长度的一半。

信号的包络可以通过取解析信号的绝对值得到。为了消除振铃和平滑包络,对结果进行低通滤波器处理。

请注意,分析信号block中发现的DSP System Toolbox™也可以用来实现这个包络检测设计。

金宝appSimulink示例:包络检测器模型

Simulink模型的全平台浮点版本如下图所示。金宝app当您运行模型时,您将看到原始信号和两个包络检测器的结果。

金宝appSimulink示例:包络检测器结果

这个例子显示了两种不同的包络检波器对两种不同类型的输入信号的结果。输入选择是一个语音信号样本或一个100hz的正弦波,打开和关闭。

该模型有一个可切换的输入和两个输出,它们被路由到便于查看的范围。如果一个信号不可见,双击Scope块以打开它。

输入范围图显示原始信号。信号持续5秒,每次显示1秒的数据。

第一个输出范围图显示了第一个包络检测器的输出。这是将原始信号平方并通过低通滤波器发送的结果。您可以清楚地看到,信封已成功地从语音信号中提取出来。

第二个输出范围图显示了第二个包络检测器的输出,它采用了希尔伯特变换。尽管这个包络检测器的输出看起来与第一个方法非常相似,但是您可以看到它们之间的差异。

金宝app仿真软件模型

所有平台浮点版本:dspenvdet

这个话题有用吗?