加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 一、前言
    • 二、敲擊揚(yáng)聲器
    • 三、信號(hào)建模
    • 總結(jié)
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

敲擊揚(yáng)聲器震動(dòng)信號(hào)建模

2023/03/02
1959
閱讀需 13 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

01 揚(yáng)聲器震動(dòng)

一、前言

揚(yáng)聲器震動(dòng)的頻率特性可以通過敲擊它所獲得的沖激響應(yīng)來分析。?原本驅(qū)動(dòng)揚(yáng)聲器紙盆震動(dòng)的線圈此時(shí)可以用作震動(dòng)傳感器, 它將紙盆的震動(dòng)速度轉(zhuǎn)換成電壓信號(hào)。?通過示波器可以采集到這個(gè)信號(hào), ?本文將對(duì)敲擊揚(yáng)聲器所產(chǎn)生的震動(dòng)信號(hào)進(jìn)行觀察建模。

二、敲擊揚(yáng)聲器

使用示波器連接揚(yáng)聲器的引線, 敲擊揚(yáng)聲器可以看到振動(dòng)的波形。?不同的敲擊力度和部位, 對(duì)應(yīng)的震動(dòng)還是有些區(qū)別。?示波器的探頭直接連接到揚(yáng)聲器的音圈輸出端口, 中間沒有施加任何信號(hào)放大電路。?這樣采集到的電壓信號(hào)反映了揚(yáng)聲器的單位沖激響應(yīng)。

為了便于分析,使用小型改錐敲擊揚(yáng)聲器紙盆中心,獲得了這樣一個(gè)簡(jiǎn)單衰減振蕩波形。?選擇其中三個(gè)周期過零點(diǎn),?查看它們之間的時(shí)間差,?大約為19.5毫秒,?它的倒數(shù)對(duì)應(yīng)51.3Hz。?由于這是三個(gè)振蕩周期,所以原波形的振蕩頻率為153.9Hz。

為了進(jìn)一步精確估計(jì)衰減振蕩波形參數(shù), 通過Python編程,從示波器讀取波形數(shù)據(jù)。?這是對(duì)讀取數(shù)據(jù)顯示的波形。?對(duì)原始示波器采集到的數(shù)據(jù)進(jìn)行50個(gè)數(shù)據(jù)點(diǎn)的平均, 獲得更加光滑的信號(hào)波形。

#!/usr/local/bin/python
# -*- coding: gbk -*-
#******************************
# TEST1.PY -- by Dr. ZhuoQing 2023-03-01
#
# Note:
#******************************
from headm import *
from tsmodule.tsvisa import *
mso24open()
x,y = mso24read(1)
tspsave('wave1', x=x, y=y)
plt.plot(x, y)
plt.xlabel("Time(s)")
plt.ylabel("Voltage(V)")
plt.grid(True)
plt.tight_layout()
plt.show()
#------------------------------------------------------------
# END OF FILE : TEST1.PY
#******************************

▲ 圖1.2.1 敲擊揚(yáng)聲器中間獲得的波形


▲ 圖1.2.2 50個(gè)數(shù)據(jù)進(jìn)行平滑之后的波形

三、信號(hào)建模

下面通過曲線擬合方式對(duì)揚(yáng)聲器振動(dòng)信號(hào)進(jìn)行建模。?由于信號(hào)前面的波形受到敲擊的影響, 所以并不純粹是揚(yáng)聲器自由響應(yīng)。?截取時(shí)間大于7毫秒之后的波形進(jìn)行處理。?這是揚(yáng)聲器在敲擊后7毫秒之后的震動(dòng)信號(hào)波形。?它是一個(gè)指數(shù)衰減振蕩信號(hào)。?可以使用一個(gè)帶有五個(gè)參數(shù)的函數(shù)表示。?通過Python編程, ?利用其中的曲線擬合工具來估計(jì)波形參數(shù)。

下面是程序擬合過程。?定義帶有五個(gè)參數(shù)的指數(shù)衰減函數(shù),?根據(jù)觀察到的波形,初步估計(jì)函數(shù)的五個(gè)參數(shù)的初始值,調(diào)用曲線擬合函數(shù),?顯示獲得擬合參數(shù)。?利用這些參數(shù)計(jì)算出擬合曲線,并進(jìn)行繪制。?下面分析一下擬合結(jié)果。?這是五個(gè)信號(hào)參數(shù)擬合數(shù)值,?其中參數(shù)C代表著振蕩角頻率。?通過它,?可以計(jì)算出振蕩頻率 f0。?f0 等于 161.2 赫茲。

這里將原始波形和擬合曲線波形繪制在一起, 可以看到擬合參數(shù)的有效性。?利用測(cè)量波形進(jìn)行曲線擬合,所獲得的頻率值應(yīng)該比前面觀察到曲線過零點(diǎn)所獲得頻率更加準(zhǔn)確。

▲ 圖1.2.3 曲線擬合后的結(jié)果

▲ 圖1.3.2 信號(hào)波形擬合函數(shù)以及對(duì)應(yīng)的參數(shù)

#!/usr/local/bin/python
# -*- coding: gbk -*-
#******************************
# TEST2.PY -- by Dr. ZhuoQing 2023-03-01
#
# Note:
#******************************
from headm import *
from scipy.optimize import curve_fit
x, y = tspload('wave1', 'x', 'y')
printf(len(x), len(y))
AVERAGE_NUM = 50
DATA_LENGTH = len(x)//AVERAGE_NUM
xx = array([sum(x[i*AVERAGE_NUM:i*AVERAGE_NUM+AVERAGE_NUM])/AVERAGE_NUM*1e3 for i in range(DATA_LENGTH)])
yy = array([sum(y[i*AVERAGE_NUM:i*AVERAGE_NUM+AVERAGE_NUM])/AVERAGE_NUM for i in range(DATA_LENGTH)])
c = where(xx>5)
xxx = xx[c]/1000
yyy = yy[c]
tspsave('wave11', xxx=xxx, yyy=yyy)
#------------------------------------------------------------
'''
plt.plot(xxx, yyy)
plt.xlabel("Time(s)")
plt.ylabel("Voltage(V)")
plt.grid(True)
plt.tight_layout()
plt.show()
'''
#------------------------------------------------------------
def fun(x,a,b,c,d,e):
return a*exp(-b*x)*sin(c*x+d)+e
param = (1, 50, 2*pi*150, 0, 0)
param, conv = curve_fit(fun, xxx, yyy, p0=param)
printf(param)
ysim = fun(xxx, *param)
plt.plot(xxx, yyy, linewidth=3, label='Origin')
plt.plot(xxx, ysim, label='Fit')
plt.xlabel("Time(s)")
plt.ylabel("Voltage(V)")
plt.grid(True)
plt.legend(loc="upper right")
plt.tight_layout()
plt.show()
#------------------------------------------------------------
# END OF FILE : TEST2.PY
#******************************

下面是文件 headm.py 的內(nèi)容:

import sys, os
sys.path.append(r'd:pythonteasoft')
STDFILE = open(r'd:pythonstd.txt', 'a', 1)
sysstderr = sys.stderr
sysstdout = sys.stdout
sys.stderr = STDFILE
sys.stdout = STDFILE

from threading import Thread
import time, math, winsound, clipboard, random
from numpy import *

from tsmodule.tspdata import *
from tsmodule.tspyt import *
from tsmodule.tscmd import *
from tsmodule.tsdopop import *
from tsmodule.tsdraw import *
import tsmodule.tsconfig
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10,80*10/128))
plt.get_current_fig_manager().window.wm_geometry("+1950+300")
plt.rcParams.update({'font.size':14})

總結(jié)

本文通過示波器觀察并獲取了一種小型揚(yáng)聲器敲擊信號(hào)。該信號(hào)反映了揚(yáng)聲器的沖激響應(yīng)。?后面通過信號(hào)擬合進(jìn)行數(shù)學(xué)建模,?為之后對(duì)揚(yáng)聲器的頻率特性進(jìn)一步分析打下基礎(chǔ)。

參考資料
[1]擴(kuò)展32KRAM的STC8H8K信號(hào)采集版: https://blog.csdn.net/zhuoqingjoking97298/article/details/105798094?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22105798094%22%2C%22source%22%3A%22zhuoqingjoking97298%22%7D

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

公眾號(hào)TsinghuaJoking主筆。清華大學(xué)自動(dòng)化系教師,研究興趣范圍包括自動(dòng)控制、智能信息處理、嵌入式電子系統(tǒng)等。全國大學(xué)生智能汽車競(jìng)賽秘書處主任,技術(shù)組組長(zhǎng),網(wǎng)稱“卓大大”。