利用matlab程序分别设计一正弦型信号_ARM Mbed数字信号处理
背景知識視頻教程
使用ARM Mbed平臺的嵌入式系統?viadean.comARM mbed OS入門 - viadean?viadean.comARM mBed 教程 - viadean?viadean.com信號處理對于許多應用而言很重要。 借助現代計算機的強大功能,許多信號處理功能現在都可以通過數字方式完成。 本文,我們將說明如何使用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總結
以上是生活随笔為你收集整理的利用matlab程序分别设计一正弦型信号_ARM Mbed数字信号处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [CHM]果壳中的XAML(XAML i
- 下一篇: MapObjects2自带例子的问题