2015-06-04 78 views
-1

我正在做一個需要超聲波脈衝速度(UPV)的論文。 UPV很容易通過機器獲得,但我們獲得的數據沒有UPV,所以我們有責任手動獲取。獲取超聲波脈衝速度的延遲/滯後matlab

本質上在數據中我們有2個通道,一個用於發射器換能器,另一個用於接收器換能器。

我們需要從發射器發出的波形發出的時間以及到達接收器的時間。

使用matlab,我試過finddelayxcorr,但不完全得到正確的結果。

這是我想得到的觀點的圖片。情節是

Example input

所以我想找到的圖片,但用MATLAB的幫助下,兩個點的發射器(藍色)和接收器(紅色)。這兩者將確定時間,並進一步確定UPV。 我是一個相對較新的MATLAB用戶,所以你的幫助將非常有幫助。

這是我曾嘗試

[cc, lags] = xcorr(signal1,signal2); 
d2 = -(lags(cc == max(cc)))/Fs; 

@xenoclast您好代碼!到目前爲止,我使用的代碼是這些。

close all 
clc 
Fs = input('input Fs = '); 
T = 1/Fs; 
L = input('input L = '); 
t = (0:L-1)*T; 
time = transpose(t); 
i = input('input number of steploads = '); 
% construct test sequences 
%dataupv is the signal1 & datathesis is the signal2 
for m=1:i 
y1 = (dataupv(:,m) - mean(dataupv(:,m)))/std(dataupv(:,m)); 
y2 = (datathesis(:,m) - mean(datathesis(:,m)))/std(datathesis(:,m)); 
offset = 166; 
tt = time; 
% correlate the two sequences 
[cc, lags] = xcorr(y2, y1,); 
% find the in4dex of the maximum 
[maxval, maxI] = max(cc); 
[minval, minI] = min(cc); 
% use that index to obtain the lag in samples 
lagsamples(m,1) = lags(maxI); 
lagsamples2(m,1) = lags(minI); 
% plot again without timebase to verify visually 
end  

由此產生的數值與我目視檢查海浪時的70個樣本相比較。滯後導致了244,但在視覺上它應該是176這裏是數據(也有19套的數據,但我只用了1列)https://www.dropbox.com/s/ng5uq8f7oyap0tq/datatrans-dec-2014.xlsx?dl=0https://www.dropbox.com/s/1x7en0x7elnbg42/datarec-dec-2014.xlsx?dl=0

+0

本質上,我只是試圖找到信號開始時的點。 – ronster

+2

歡迎來到本站!如果在您的問題中添加您迄今爲止已嘗試的代碼和結果,將會有所幫助 - 這有助於確定答案。對於我的錢來說,儘管'xcorr'是要走的路 - 這兩個信號將會很好地相關 - 所以問題可能在於實現。相關輸出中峯值的指數點需要被兩個輸入序列的長度相關的量所抵消,如果您還沒有對此進行更正,那麼很可能您的結果是令人滿意的。 – xenoclast

+0

感謝您的關注! 我一直在調查此代碼: [cc,lags] = xcorr(signal1,signal2); (滯後(cc == max(cc)))/ Fs; 雖然我不確定上面的代碼是否正確 ,但結果卻比預期的要大,所以即時猜測是錯誤的。 這將是偉大的,如果你能指導我的步驟:) – ronster

回答

0

你的示例代碼不指定Fs,所以我不知道當然,但我猜測這是一個採樣率問題。所有互相關的例子都是通過按照他們通常所稱的Fs的特定採樣率構建測試序列開始的,不要與測試音頻的頻率混淆,您可能會看到這種頻率叫做Fc

如果您構建的FsFc然後這工作得很好,但是當你從儀器獲取真實的數據,他們往往會給你的數據和時基,如兩個向量,所以你必須制定出樣方面的測試信號來自時基的速度。這可能與工作頻率或信號的組成部分不同,因此這裏很容易混淆。

但是隻有在問題的第二部分需要採樣率時,您可以在那裏計算出時間偏移量。首先你必須得到樣本中的偏移量,這樣更容易驗證。

如果您刪除'/ F'項,並且您可以通過繪製兩個沒有時基的信號並檢查樣本位置來驗證它,您的示例將爲您提供樣本中的偏移量。

我相信你已經看過幾十個例子,但是這裏有一個試圖不要混淆這個問題的例子,你會注意到它沒有指定'採樣率'是什麼,它只是與樣本相關聯(儘管如果您將y1定義中的5作爲以Hz爲單位的頻率,那麼您將能夠推斷出一個)。

% construct test sequences 
offset = 23; 
tt = 0:0.01:1; 
y1 = sin(2*pi*5*tt); 
y2 = 0.8 * [zeros(1, offset) y1]; 

figure(1); clf; hold on 
plot(tt, y1) 
plot(tt, y2(1:numel(tt)), 'r') 

% correlate the two sequences 
[cc, lags] = xcorr(y2, y1); 

figure(2); clf; 
plot(cc) 

% find the index of the maximum 
[maxval, maxI] = max(cc); 

% use that index to obtain the lag in samples 
lagsamples = lags(maxI); 

% plot again without timebase to verify visually 
figure(3); clf; hold on 
plot(y1) 
plot(y2, 'r') 
plot([offset offset], [-1 1], 'k:') 

一旦你已經得到了彌補樣品你大概可以推算出所需的轉換系數,但如果你從儀器具有時基數據,那麼任何兩個連續條目的差異的倒數會給你們。

UPDATE

當兩個信號,你可以想像它作爲覆蓋他們,總結相應的元素的產品相關。這給你一個單一的價值。然後你通過一個樣本移動一個信號,然後重新執行。繼續下去,直到你完成了兩個信號的每一個可能的安排。

在每個步驟中獲得的值是相關性,但是計算「滯後」始於一個信號一直到左側,另一個信號僅重疊一個樣本。您一直滑動第二個信號,直到它僅通過樣本重疊另一端。因此,由相關返回的值的數量與兩個原始信號的長度有關,並且將相關輸出中的任何給定點(例如最大值)與產生它的兩個信號的排列要求您進行關聯涉及這些長度的計算。 xcorr函數通過輸出lags變量來更容易,該變量跟蹤兩個信號的對齊。人們也可能會將此作爲補償來討論,所以請留意。

+0

Fs是5000000,L是5001,但我有幾個問題: 首先,offset是如何計算出來的,我如何驗證它?而不是抵消了我提供的圖片中顯示的兩點之間的差異?謝謝:) – ronster

+0

@ronster是的偏移是兩點之間的差異,或任何兩個相應的點。你可以測量樣本或時間的差異。解決這個問題並不簡單的原因是因爲「滑動窗口」 - 請參閱更新問題。 – xenoclast

+0

有沒有辦法讓matlab獲得這個偏移?我有點困惑......偏移和延遲如何彼此不同? – ronster