利用matlab程序分别设计一正弦型信号 您所在的位置:网站首页 mbed教程 利用matlab程序分别设计一正弦型信号

利用matlab程序分别设计一正弦型信号

#利用matlab程序分别设计一正弦型信号| 来源: 网络整理| 查看: 265

背景知识视频教程 使用ARM Mbed平台的嵌入式系统​viadean.com e87f32bbf6ab2ff9a1fa0126ab0cee93.png ARM mbed OS入门 - viadean​viadean.com 8f811f7eae632568e3c0174db86c6dba.png ARM mBed 教程 - viadean​viadean.com 8ffec084cd0a0093f4480465fe464930.png

信号处理对于许多应用而言很重要。 借助现代计算机的强大功能,许多信号处理功能现在都可以通过数字方式完成。 本文,我们将说明如何使用Arm Mbed -DSP库进行数字信号处理和控制。

低通滤波器

在Arm Mbed 网站上,有关于如何设计和实现低通FIR(有限脉冲响应)滤波器的出色教程。 我们基本上将遵循该示例,并将其扩展到高通滤波器和带通/停止滤波器。

首先,我们需要使用MATLAB软件(http://www.mathworks.com)创建数字滤波器。 数字滤波器设计是一个复杂的主题,因为它涉及复杂的数学运算。 MATLAB有一个信号处理工具箱,可以使数字滤波器的设计更加简单。 FIR(有限脉冲响应)滤波器和IIR(无限脉冲响应)滤波器是常用的数字滤波器。 这里使用FIR滤波器,因为它不需要反馈环路并且更稳定。

以下是MATLAB代码,该代码使用“ fir1”函数创建了低通滤波器。 采样率为48,000 Hz,奈奎斯特频率为采样频率24,000 Hz的一半,截止频率为6000 Hz。 “ fir1”功能在归一化的频率范围(0到1)中创建一个28阶数字滤波器,其中1代表奈奎斯特频率,即24,000 Hz。 因此,归一化的截止频率将为6000 / 24,000 = –¼,或0.25。

下图显示了FIR低通滤波器及其29个(+1阶)系数。 现在,我们可以在mbed程序中使用这些系数来实现低通数字滤波器。

fir_coeff =-0.0018 -0.0016 0.0000 0.0037 0.0081 0.0085 -0.0000 -0.0174-0.0341 -0.0334 0.0000 0.0676 0.1522 0.2229 0.2505 0.22290.1522 0.0676 0.0000 -0.0334 -0.0341 -0.0174 -0.0000 0.00850.0081 0.0037 0.0000 -0.0016 -0.0018 fir_coeff =-0.0018 -0.0016 0.0000 0.0037 0.0081 0.0085 -0.0000 -0.0174-0.0341 -0.0334 0.0000 0.0676 0.1522 0.2229 0.2505 0.22290.1522 0.0676 0.0000 -0.0334 -0.0341 -0.0174 -0.0000 0.00850.0081 0.0037 0.0000 -0.0016 -0.0018 fir_coeff =-0.0018 -0.0016 0.0000 0.0037 0.0081 0.0085 -0.0000 -0.0174-0.0341 -0.0334 0.0000 0.0676 0.1522 0.2229 0.2505 0.22290.1522 0.0676 0.0000 -0.0334 -0.0341 -0.0174 -0.0000 0.00850.0081 0.0037 0.0000 -0.0016 -0.0018 fir_coeff =-0.0018 -0.0016 0.0000 0.0037 0.0081 0.0085 -0.0000 -0.0174-0.0341 -0.0334 0.0000 0.0676 0.1522 0.2229 0.2505 0.22290.1522 0.0676 0.0000 -0.0334 -0.0341 -0.0174 -0.0000 0.00850.0081 0.0037 0.0000 -0.0016 -0.0018 fir_coeff =-0.0018 -0.0016 0.0000 0.0037 0.0081 0.0085 -0.0000 -0.0174-0.0341 -0.0334 0.0000 0.0676 0.1522 0.2229 0.2505 0.22290.1522 0.0676 0.0000 -0.0334 -0.0341 -0.0174 -0.0000 0.00850.0081 0.0037 0.0000 -0.0016 -0.0018

以下是使用上述FIR低通滤波器系数的mbed示例。 它首先使用1000 Hz正弦波和15,000 Hz正弦波生成混合信号(32×20点),然后使用FIR低通滤波器滤除15,000 Hz。 最后,它通过虚拟COM端口将原始信号和滤波后的信号打印到计算机上。 在下图中,滤波后的信号上移了3 V,因此我们可以分别查看两个信号。

在此程序中,您将需要mbed-DSP库

下图显示了使用Arduino串行绘图仪的程序输出,原始混合信号在底部,滤波后的信号在顶部。 如我们所见,经过滤波后,仅剩下1000 Hz信号。

高通滤波器

下图显示了相应的FIR高通滤波器及其29个(+1阶)系数。 现在,我们可以在mbed程序中使用这些系数来实现低通数字滤波器。

fir_coeff =0.0018 0.0016 -0.0000 -0.0037 -0.0080 -0.0085 -0.0000 0.01730.0340 0.0332 -0.0000 -0.0674 -0.1516 -0.2221 0.7487 -0.2221-0.1516 -0.0674 -0.0000 0.0332 0.0340 0.0173 -0.0000 -0.0085-0.0080 -0.0037 -0.0000 0.0016 0.0018 fir_coeff =0.0018 0.0016 -0.0000 -0.0037 -0.0080 -0.0085 -0.0000 0.01730.0340 0.0332 -0.0000 -0.0674 -0.1516 -0.2221 0.7487 -0.2221-0.1516 -0.0674 -0.0000 0.0332 0.0340 0.0173 -0.0000 -0.0085-0.0080 -0.0037 -0.0000 0.0016 0.0018 fir_coeff =0.0018 0.0016 -0.0000 -0.0037 -0.0080 -0.0085 -0.0000 0.01730.0340 0.0332 -0.0000 -0.0674 -0.1516 -0.2221 0.7487 -0.2221-0.1516 -0.0674 -0.0000 0.0332 0.0340 0.0173 -0.0000 -0.0085-0.0080 -0.0037 -0.0000 0.0016 0.0018 fir_coeff =0.0018 0.0016 -0.0000 -0.0037 -0.0080 -0.0085 -0.0000 0.01730.0340 0.0332 -0.0000 -0.0674 -0.1516 -0.2221 0.7487 -0.2221-0.1516 -0.0674 -0.0000 0.0332 0.0340 0.0173 -0.0000 -0.0085-0.0080 -0.0037 -0.0000 0.0016 0.0018 fir_coeff =0.0018 0.0016 -0.0000 -0.0037 -0.0080 -0.0085 -0.0000 0.01730.0340 0.0332 -0.0000 -0.0674 -0.1516 -0.2221 0.7487 -0.2221-0.1516 -0.0674 -0.0000 0.0332 0.0340 0.0173 -0.0000 -0.0085-0.0080 -0.0037 -0.0000 0.0016 0.0018

修改上述C程序,并使用新值更改FIR系数,如下所示。

下图显示了使用Arduino串行绘图仪的程序输出,原始混合信号在底部,滤波后的信号在顶部。 正如我们这次看到的,经过滤波后,仅剩下15,000 Hz的信号。

带通滤波器

对于带通滤波器,修改上述MATLAB代码,在这种情况下,仅允许通过0.5×24,000(12,000 Hz)到0.7×24,000(16,800 Hz)之间的频率。 其他频率被阻止。 下图显示了相应的FIR带通滤波器及其29个(+1阶)系数。

现在,我们可以在mbed程序中使用这些系数来实现带通数字滤波器。

fir_coeff =-0.0011 -0.0030 0.0033 0.0010 0.0000 -0.0024 -0.0171 0.03320.0207 -0.0974 0.0400 0.1292 -0.1494 -0.0622 0.2069 -0.0622-0.1494 0.1292 0.0400 -0.0974 0.0207 0.0332 -0.0171 -0.00240.0000 0.0010 0.0033 -0.0030 -0.0011 fir_coeff =-0.0011 -0.0030 0.0033 0.0010 0.0000 -0.0024 -0.0171 0.03320.0207 -0.0974 0.0400 0.1292 -0.1494 -0.0622 0.2069 -0.0622-0.1494 0.1292 0.0400 -0.0974 0.0207 0.0332 -0.0171 -0.00240.0000 0.0010 0.0033 -0.0030 -0.0011 fir_coeff =-0.0011 -0.0030 0.0033 0.0010 0.0000 -0.0024 -0.0171 0.03320.0207 -0.0974 0.0400 0.1292 -0.1494 -0.0622 0.2069 -0.0622-0.1494 0.1292 0.0400 -0.0974 0.0207 0.0332 -0.0171 -0.00240.0000 0.0010 0.0033 -0.0030 -0.0011 fir_coeff =-0.0011 -0.0030 0.0033 0.0010 0.0000 -0.0024 -0.0171 0.03320.0207 -0.0974 0.0400 0.1292 -0.1494 -0.0622 0.2069 -0.0622-0.1494 0.1292 0.0400 -0.0974 0.0207 0.0332 -0.0171 -0.00240.0000 0.0010 0.0033 -0.0030 -0.0011 fir_coeff =-0.0011 -0.0030 0.0033 0.0010 0.0000 -0.0024 -0.0171 0.03320.0207 -0.0974 0.0400 0.1292 -0.1494 -0.0622 0.2069 -0.0622-0.1494 0.1292 0.0400 -0.0974 0.0207 0.0332 -0.0171 -0.00240.0000 0.0010 0.0033 -0.0030 -0.0011

修改上例,并使用新值更改FIR系数,如下所示

下图显示了使用Arduino串行绘图仪的程序输出,原始混合信号在底部,滤波后的信号在顶部。 正如我们这次看到的那样,经过带通滤波后,仅剩下15,000 Hz的信号。

带阻滤波器和陷波滤波器

对于带阻滤波器,请修改上述 MATLAB代码,并将“ fir1”功能行,在这种情况下,将阻止0.5×24,000(12,000 Hz)到0.7×24000(16,800 Hz)之间的频率,并允许使用其他频率。 当频带变得足够窄时,带阻滤波器将变成陷波滤波器。

fir_coeff =0.0011 0.0029 -0.0032 -0.0010 -0.0000 0.0023 0.0165 -0.0320-0.0200 0.0939 -0.0385 -0.1245 0.1440 0.0599 0.7974 0.05990.1440 -0.1245 -0.0385 0.0939 -0.0200 -0.0320 0.0165 0.0023-0.0000 -0.0010 -0.0032 0.0029 0.0011 fir_coeff =0.0011 0.0029 -0.0032 -0.0010 -0.0000 0.0023 0.0165 -0.0320-0.0200 0.0939 -0.0385 -0.1245 0.1440 0.0599 0.7974 0.05990.1440 -0.1245 -0.0385 0.0939 -0.0200 -0.0320 0.0165 0.0023-0.0000 -0.0010 -0.0032 0.0029 0.0011 fir_coeff =0.0011 0.0029 -0.0032 -0.0010 -0.0000 0.0023 0.0165 -0.0320-0.0200 0.0939 -0.0385 -0.1245 0.1440 0.0599 0.7974 0.05990.1440 -0.1245 -0.0385 0.0939 -0.0200 -0.0320 0.0165 0.0023-0.0000 -0.0010 -0.0032 0.0029 0.0011 fir_coeff =0.0011 0.0029 -0.0032 -0.0010 -0.0000 0.0023 0.0165 -0.0320-0.0200 0.0939 -0.0385 -0.1245 0.1440 0.0599 0.7974 0.05990.1440 -0.1245 -0.0385 0.0939 -0.0200 -0.0320 0.0165 0.0023-0.0000 -0.0010 -0.0032 0.0029 0.0011 fir_coeff =0.0011 0.0029 -0.0032 -0.0010 -0.0000 0.0023 0.0165 -0.0320-0.0200 0.0939 -0.0385 -0.1245 0.1440 0.0599 0.7974 0.05990.1440 -0.1245 -0.0385 0.0939 -0.0200 -0.0320 0.0165 0.0023-0.0000 -0.0010 -0.0032 0.0029 0.0011

下图显示了相应的FIR带阻滤波器及其29个系数,可在mbed程序中使用它们来实现带阻数字滤波器。

修改上述示例,并使用新值更改FIR系数,如下所示

下图显示了使用Arduino串行绘图仪的程序输出,原始混合信号在底部,滤波后的信号在顶部。 我们可以看到,滤波之后,停止了15,000 Hz信号,仅剩下1000 Hz信号。

快速傅立叶变换(FFT)

快速傅立叶变换(FFT)和逆FFT具有许多重要的应用。 在本节中,我们将展示如何使用mbed-DSP库执行FFT和逆FFT:

以下示例说明了如何使用“ arm_cfft_f32()”执行复杂的FFT。 “ arm_cfft_f32()”函数只能用于[16、32、64,…,4096]的数据长度,但可以同时用于FFT和逆FFT。 检查mbed-DSP库以获取功能的详细信息。

程序首先根据FFT长度(FFT_LEN)创建并初始化复数FFT实例S,在这种情况下为512点。 然后,它使用“ sin()”函数(30 Hz和100 Hz)生成混合频率信号,采样时间dt = 0.001秒; 因此,采样频率为Fmax = 1 / dt = 1000Hz,Nyquest频率为Fmax / 2 = 500Hz。 当我们要使用实信号时,我们将虚分量设置为零。 它还同时通过虚拟COM将原始混合信号打印到计算机。 然后,它将程序暂停5秒钟。 最后,它调用“ arm_cfft_f32()”以执行复杂的FFT,并调用“ arm_cmplx_mag_f32()”以计算变换后的信号的幅度,并通过虚拟COM将FFT变换信号的幅度打印到计算机。

参阅

ARM Mbed数字信号处理 - viadean​viadean.com 92058f085dcb94b0f4b5c15a038a2603.png


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有