0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

超聲流量傳感器信號(hào)采樣率的影響

安費(fèi)諾傳感器學(xué)堂 ? 來(lái)源:安費(fèi)諾傳感器學(xué)堂 ? 2024-06-13 10:18 ? 次閱讀

我們?cè)谥霸凇读髁?a href="http://wenjunhu.com/v/tag/117/" target="_blank">傳感器(2)—超聲流量傳感器,相位差和相關(guān)性原理》中曾留了一個(gè)問(wèn)題:如果采樣頻率不一樣,模擬的結(jié)果會(huì)怎么樣?不知道大家有沒(méi)有時(shí)間去運(yùn)行測(cè)試一下,反正小編嘗試了。測(cè)試的結(jié)果(但不是最終結(jié)論,請(qǐng)根據(jù)實(shí)際應(yīng)用進(jìn)行調(diào)整)下文會(huì)提到。

在小編上次關(guān)于超聲流量的相關(guān)信號(hào)處理的模擬中,用到了插值的方式,不過(guò)由于沒(méi)有經(jīng)過(guò)太多的測(cè)試,在后續(xù)測(cè)試過(guò)程中,發(fā)現(xiàn)當(dāng)聲速為4500m/s的模擬流體的流速不超過(guò)15m/s時(shí),都沒(méi)有什么問(wèn)題;但是當(dāng)模擬的流速超過(guò)15m/s之后,兩組模擬信號(hào)的相位差超過(guò)了180°時(shí),獲取相關(guān)性序列中對(duì)應(yīng)的時(shí)間值時(shí),發(fā)現(xiàn)取值結(jié)果為負(fù)數(shù)。

相位差180°,這本身沒(méi)有問(wèn)題,但是由于數(shù)據(jù)的相關(guān)性處理函數(shù)是個(gè)偶函數(shù),對(duì)稱(chēng)于中點(diǎn),所以在數(shù)據(jù)相關(guān)性處理中,當(dāng)兩路信號(hào)的相位差超過(guò)180°前后時(shí),因?yàn)閮陕窚y(cè)試信號(hào)是正余弦形式,相當(dāng)于其中一路信號(hào)序列在相對(duì)于另外一路信號(hào)序列移動(dòng)的時(shí)候,在某個(gè)相對(duì)處的相關(guān)計(jì)算結(jié)果,可以找到另外一個(gè)錯(cuò)位的對(duì)方有相同的相關(guān)處理結(jié)果,然而在查找標(biāo)識(shí)相位偏差所對(duì)應(yīng)的最大值時(shí)間序列值時(shí),測(cè)試代碼優(yōu)先輸出了最左側(cè)編號(hào)是負(fù)數(shù)的相位序列,實(shí)際應(yīng)該輸出相關(guān)性序列中點(diǎn)右側(cè)的最大值所對(duì)應(yīng)的時(shí)間序列值。結(jié)果可想而知,計(jì)算的流速變成了負(fù)數(shù)。修改后的代碼中,計(jì)算流速時(shí),使用的相關(guān)性序列是整個(gè)相關(guān)結(jié)果序列的右邊部分,就解決了輸出流速突然變成負(fù)數(shù)的問(wèn)題。

另外,實(shí)際的超聲波接收信號(hào)并不會(huì)是從頭至尾都是理想的正余弦,因此,我們看到的模擬信號(hào)似乎也是太過(guò)于理想。這里我們稍微加了點(diǎn)料,讓穩(wěn)定的信號(hào)后面加上了快速衰減。

在進(jìn)行模擬信號(hào)相關(guān)性處理的時(shí)候,之前我們使用的是直接死磕方式的計(jì)算,這里調(diào)整為快速傅里葉計(jì)算(FFT)。

所以,這里我們將模擬代碼作了以下調(diào)整,順便作了在不同采樣頻率下的模擬測(cè)量值比較:

在原來(lái)的模擬超聲波接收信號(hào)的生成數(shù)據(jù)中,加入最后衰減的部分;

在生成的相關(guān)性序列中,只取中間點(diǎn)右側(cè)的一半作為分析處理部分;

圖像輸出時(shí),仍然輸出全部的相關(guān)性序列;

在生成相關(guān)性序列時(shí),需用了FFT的模式(原先的選用的直算的方式);

降低“采樣頻率”到5MHz,然后采樣插值的方式進(jìn)行相關(guān)性處理。

cb7a6780-06f3-11ef-a297-92fbcf53809c.png

上圖模擬的是16m/s下,5MHz采樣率,得到的輸出值:

T1_0: 4.5617943222309144e-07

Length of t lags: 2000

Ts Delayed cycles: 23 ,

Delayed time: 4.6e-07

degree(相位差,角度): 165.6

Sample time interval(采樣間隔時(shí)間): 2.0e-08

Estimated velocity: 16.134001423268288(m/s)

不同采樣率,不同模擬流速下的模擬輸出比較(都有插值)

cb9c846e-06f3-11ef-a297-92fbcf53809c.png

從模擬結(jié)果來(lái)看,較高的采樣率確實(shí)可以獲得較高的測(cè)量精度,而低的采樣率,雖然適用了插值提高了測(cè)量精度,但是插值運(yùn)算畢竟是基于我們?cè)O(shè)定了波形的形態(tài)進(jìn)行的。實(shí)際應(yīng)用,還是要根據(jù)實(shí)際需求和情況配置相關(guān)的軟硬件功能。

另外需要說(shuō)明的是,在整個(gè)信號(hào)相關(guān)性處理的模擬過(guò)程中,這里并沒(méi)有將相關(guān)性結(jié)果序列歸一化后輸出,而是使用直接結(jié)果的方式。

小編還要留一個(gè)問(wèn)題:如果插值處理中標(biāo)識(shí)插值點(diǎn)數(shù)的參數(shù)有變化的時(shí)候,模擬結(jié)果會(huì)出現(xiàn)什么變化?歡迎大家測(cè)試并留個(gè)回復(fù)。

修改之后的模擬代碼

其中:模擬代碼中的噪聲部分是被注釋掉的

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import correlate
import math
from scipy.interpolate import interp1d


def cor_demo():
    try:
        # Parameters
        c = 4500    # Sound speed in the fluid in m/s
        d = 0.5     # Pipe diameter in meters
        theta = math.pi / 6     # Angle of the emitted ultrasound wave, in radians. 30 degrees here.
        L = d / math.cos(theta) # The sound path length in meters parallel to the flow direction
        v = 16                  # Fluid velocity in m/s


        f = 1e6     # Frequency of the signal in 1MHz
        T = 1 / f   # Period of the signal in s


        Fs = 5e6        # 采樣頻率為5MHz
        Ts = 1/Fs       # 采樣間隔
        
        # Calculate time delay caused by flow velocity
        time_up = L / (c - v * math.sin(theta))     # Time of flight upstream
        time_down = L / (c + v * math.sin(theta))   # Time of flight downstream
        
        print("T1_0:",time_up-time_down)
        t_delay = 2 * L * v * np.sin(theta) / (c**2 - v**2 * np.sin(theta)**2)
        
        # Time array
        # 返回一個(gè)從0到period*T范圍內(nèi)的有num_samples個(gè)元素的一維數(shù)組,數(shù)組中的數(shù)值是等間距分布的
        period = 40
        num_samples = period*T/Ts
        t = np.linspace(0, period*T, int(num_samples))
        
        t_max = t.max()
        t_start_decay = t_max * 5/6


        # 定義信號(hào)衰減準(zhǔn)則 - 衰減系數(shù)一般由物質(zhì)的特性決定
        attenuation_coefficient = 10e5
        
        # Signals
        stationary_s0 = np.sin(2 * np.pi * f * t[t=t_start_decay])* np.exp(-attenuation_coefficient * (t[t >= t_start_decay] - t_start_decay))
        decay_s1 = np.sin(2 * np.pi * f * (t[t>=t_start_decay]-t_delay))* np.exp(-attenuation_coefficient * (t[t >= t_start_decay] - t_start_decay))
        
        #s0 = np.sin(2 * np.pi * f * t)* np.exp(-attenuation_coefficient * t)
        #s1 = np.sin(2 * np.pi * f * (t - t_delay))* np.exp(-attenuation_coefficient * t)  #*2.0 # Signal 1
        
        s0 = np.concatenate([stationary_s0, decay_so])
        s1 = np.concatenate([stationary_s1, decay_s1])
        """
        noise0 = np.random.normal(0, 0.5, s0.shape)
        noise1 = np.random.normal(0, 0.5, s1.shape)
        
        s0 = s0 + noise0
        s1 = s1 + noise1
        """
        # Define interpolation factor
        interp_factor = 10


        # New time vector after interpolation
        t_new = np.linspace(t.min(), t.max(), t.size * interp_factor)
        
        # Create a function based on the original signals, which can be used to generate the interpolated signals
        interp_func_s0 = interp1d(t, s0, kind='cubic')
        interp_func_s1 = interp1d(t, s1, kind='cubic')


        # Generate the interpolated signals
        s0_new = interp_func_s0(t_new)
        s1_new = interp_func_s1(t_new)


        # 計(jì)算Cross-correlation,并找到最大值對(duì)應(yīng)的位置
        #correlation = correlate(s1, s0, method='direct', mode='full')  # old
        correlation = correlate(s1_new, s0_new, method='fft', mode='full')
        
        # 找出該序列的長(zhǎng)度 len_corr 和其中間點(diǎn) mid_index
        len_corr = len(correlation)
        mid_index = len_corr // 2
        
        #取序列中間值右邊的序列(包含中間值)
        corr_half = correlation[mid_index:]


        #lags = np.arange(-len(s1_new) + 1, len(s1_new)) # Lags array
        lags = np.arange(0, len(s1_new)) # Lags array
        
        print("Length of t lags:", len(lags))
        # Calculate flow speed using the estimated time delay
        # Find the peak of the cross-correlation corresponds to the time delay
        delay = lags[np.argmax(corr_half)]            # 相位差所對(duì)應(yīng)的信號(hào)序列值
        
        # 采樣時(shí)間
        sample_time = (period*T) / len(t_new)
        
        time_delay = delay * sample_time                # 兩個(gè)信號(hào)間的延遲時(shí)間
        
        phase_shift = (time_delay / T) * 2 * np.pi      # 由時(shí)間延遲換算成的兩個(gè)信號(hào)序列的相位差
        phase_shift_deg = phase_shift * (180 / np.pi)   # 由相位差換成的兩個(gè)信號(hào)序列的角度差
        
        print("Ts Delayed cycles:", delay, ", Delayed time: ", time_delay, "degree:", phase_shift_deg) # 將延遲轉(zhuǎn)換為相位差
        print("Sample time interval:",sample_time)
        # 計(jì)算所得的流速
        v_estimated = (math.sqrt((L**2)+(time_delay**2)*(c**2))-L)/(time_delay * math.sin(theta))
        print('Estimated velocity: ', v_estimated)


        # 輸出圖
        fig, (ax_origin, ax_interpo, ax_corr) = plt.subplots(3, 1, figsize=(12, 8))


        # 原始信號(hào)圖
        ax_origin.plot(t, s0, label='Signal 1')
        ax_origin.plot(t, s1, label='Signal 2')
        ax_origin.set_title('Original signals')
        ax_origin.legend()


        # 插值后的信號(hào)圖
        ax_interpo.plot(t_new, s0_new, label='Signal 1')
        ax_interpo.plot(t_new, s1_new, label='Signal 2')
        ax_interpo.set_title('interpolated signals')
        ax_interpo.legend()
        # 互相關(guān)圖
        ax_corr.plot(correlation)
        ax_corr.axvline(x = len(correlation)//2 + delay, color = 'r', linestyle = '--', label = "Max correlation at delay")
        ax_corr.set_title('Cross-correlation between signal 1 and signal 2')
        ax_corr.legend()


        plt.tight_layout()
        plt.show()
        return
    except Exception as e:
        print("Error:",e)


if __name__=='__main__':
    cor_demo()

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 流量傳感器
    +關(guān)注

    關(guān)注

    1

    文章

    182

    瀏覽量

    22164
  • FFT
    FFT
    +關(guān)注

    關(guān)注

    15

    文章

    434

    瀏覽量

    59384
  • 信號(hào)
    +關(guān)注

    關(guān)注

    11

    文章

    2791

    瀏覽量

    76764

原文標(biāo)題:流量傳感器(2-1)超聲流量傳感器-信號(hào)采樣率的影響及相關(guān)處理插值模擬部分的代碼更新

文章出處:【微信號(hào):安費(fèi)諾傳感器學(xué)堂,微信公眾號(hào):安費(fèi)諾傳感器學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FIR濾波采樣率信號(hào)采樣率的關(guān)系

    本帖最后由 xizhong1991 于 2016-8-18 17:08 編輯 請(qǐng)教各位前輩一個(gè)問(wèn)題 ,我本來(lái)的信號(hào)的AD采樣率是92.16MHz,帶寬為5MHz,我用FIR濾波對(duì)它濾波,但是
    發(fā)表于 08-18 17:07

    什么是流量傳感器

    :電磁流量傳感器是由直接接觸管道介質(zhì)的傳感器和上端信號(hào)轉(zhuǎn)換兩部分構(gòu)成。它是基于法拉第電磁感應(yīng)定律工作的,用來(lái)測(cè)量電導(dǎo)大于5μs/cm的導(dǎo)電
    發(fā)表于 11-08 16:09

    基于UKF的變采樣率多異質(zhì)傳感器異步數(shù)據(jù)融合

    基于UKF的變采樣率多異質(zhì)傳感器異步數(shù)據(jù)融合
    發(fā)表于 01-08 15:59 ?4次下載

    示波器的采樣率不足對(duì)測(cè)試結(jié)果有什么影響?

    的模擬信號(hào),采樣率是相鄰兩個(gè)采樣點(diǎn)的時(shí)間間隔的倒數(shù),采樣率以點(diǎn)/秒(Sa/s)來(lái)表示。下圖為采樣原理圖。 根據(jù)奈奎斯取樣原理:在正弦波上
    發(fā)表于 03-13 10:01 ?1.2w次閱讀
    示波器的<b class='flag-5'>采樣率</b>不足對(duì)測(cè)試結(jié)果有什么影響?

    什么是示波器的采樣率

    示波器采樣頻率,又稱(chēng)采樣速度或采樣率,定義了每秒從連續(xù)信號(hào)中提取并形成離散信號(hào)采樣數(shù)量,它使用
    的頭像 發(fā)表于 09-14 15:38 ?4098次閱讀

    什么是信號(hào)采樣率?如何更改信號(hào)采樣率?

    更改信號(hào)采樣率是數(shù)字信號(hào)處理中的一個(gè)重要操作,它涉及對(duì)信號(hào)進(jìn)行重新采樣,以改變信號(hào)
    的頭像 發(fā)表于 06-20 14:44 ?3969次閱讀

    什么叫采樣率 數(shù)字信號(hào)處理時(shí)鐘與采樣率的關(guān)系

    對(duì)于相同的信號(hào)周期(下述圓),每隔一段時(shí)間采樣點(diǎn)移動(dòng)一次為采樣率,表格為三種不同采樣率。由表知采樣率1
    發(fā)表于 08-17 10:11 ?4308次閱讀
    什么叫<b class='flag-5'>采樣率</b> 數(shù)字<b class='flag-5'>信號(hào)</b>處理時(shí)鐘與<b class='flag-5'>采樣率</b>的關(guān)系

    adc采樣率和帶寬的關(guān)系

    adc采樣率和帶寬的關(guān)系 ADC(Analog-to-Digital Converter),即模擬轉(zhuǎn)數(shù)字轉(zhuǎn)換,是將模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)的重要器件。其中,
    的頭像 發(fā)表于 09-12 10:51 ?1.5w次閱讀

    模擬傳感器采樣率

    在另一個(gè)應(yīng)用中,規(guī)范列出了僅根據(jù)其在類(lèi)似應(yīng)用中的使用而制定的采樣率。將此值包含在規(guī)范中,給系統(tǒng)設(shè)計(jì)者帶來(lái)了任何靈活性。如果該速率實(shí)際上不是該應(yīng)用程序的采樣率怎么辦?如果新軟件似乎可以在指定的采樣率下工作,那么該
    發(fā)表于 10-04 17:51 ?457次閱讀
    模擬<b class='flag-5'>傳感器</b>的<b class='flag-5'>采樣率</b>

    什么是示波器的實(shí)時(shí)采樣率?什么是示波器的等效時(shí)間采樣

    個(gè)重要指標(biāo),因?yàn)樗鼪Q定了示波器可以測(cè)量的信號(hào)的頻率范圍和波形分辨。實(shí)時(shí)采樣率越高,示波器所能測(cè)量的頻率范圍就越寬,波形分辨也就越高。 示波器實(shí)時(shí)
    的頭像 發(fā)表于 10-17 16:16 ?2063次閱讀

    波形實(shí)測(cè),采樣率越高噪聲越大??

    ADC采樣率指的是模擬到數(shù)字轉(zhuǎn)換(ADC)對(duì)模擬信號(hào)進(jìn)行采樣的速率。在數(shù)字信號(hào)處理系統(tǒng)中,模擬信號(hào)
    的頭像 發(fā)表于 12-08 10:29 ?941次閱讀
    波形實(shí)測(cè),<b class='flag-5'>采樣率</b>越高噪聲越大??

    示波器的采樣率和存儲(chǔ)深度詳解

    示波器,作為電子測(cè)量領(lǐng)域的核心工具,其性能直接決定了電子信號(hào)分析的準(zhǔn)確性和效率。在示波器的眾多參數(shù)中,采樣率和存儲(chǔ)深度是兩個(gè)至關(guān)重要的參數(shù),它們共同決定了示波器捕獲和顯示信號(hào)的能力。本文將對(duì)示波器的
    的頭像 發(fā)表于 05-13 16:09 ?2482次閱讀

    示波器帶寬與采樣率的關(guān)系

    示波器作為電子測(cè)試領(lǐng)域的重要工具,其主要功能是捕獲和顯示信號(hào)波形。在示波器的設(shè)計(jì)和使用中,帶寬和采樣率是兩個(gè)至關(guān)重要的參數(shù)。帶寬決定了示波器能夠準(zhǔn)確顯示的信號(hào)頻率范圍,而采樣率則決定了
    的頭像 發(fā)表于 05-17 16:52 ?4144次閱讀

    如何優(yōu)化adc的采樣率

    在數(shù)字信號(hào)處理領(lǐng)域,ADC是將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)的關(guān)鍵組件。采樣率,即ADC每秒采集樣本的次數(shù),對(duì)信號(hào)的準(zhǔn)確性和系統(tǒng)的整體性能有著直接的
    的頭像 發(fā)表于 10-31 11:04 ?586次閱讀

    什么是傳感器采樣率

    的性能指標(biāo)中,采樣率無(wú)疑是一個(gè)核心且關(guān)鍵的概念。本文旨在深入探討傳感器采樣率的內(nèi)涵、重要性及其對(duì)各個(gè)領(lǐng)域的影響。 一、采樣率的基本概念 采樣率
    的頭像 發(fā)表于 12-05 09:16 ?177次閱讀
    什么是<b class='flag-5'>傳感器</b>的<b class='flag-5'>采樣率</b>