請問如何定位零點交越位置(zero crossing point)?

各位前輩好

我需要將一組輸入訊號與零點的交越位置定位出來
若訊號是由負到正,其與零的交越位置就存到[increasing zeroes]矩陣
若訊號是由正到負,其與零的交越位置就存到[decreasing zeroes]矩陣
目前已有一個程式能達到此功能
但也發現若讀入的值正好是0
則程式就會陷入無窮迴圈無法結束
所以想請教各位前輩
若讀入的值正好是0
則將其位置同時存到[increasing zeroes]與[decreasing zeroes]矩陣
程式要如何修改才好?
或是有其他更簡單的實現方式,謝謝!

![](upload://cYjp2dzAIKFG9OOQpB4ARNtkdj8.png)


ZeroCrossings_test2.vi

看看這個是不是你要的結果  適不適用  = =

zero crossing point.vi

另外 讀入值為0的部分會重複寫入array 所以要在改一下程式這部分交給你了 趕下班 掰咿~  XD

 

[QUOTE=tingway]

各位前輩好

我需要將一組輸入訊號與零點的交越位置定位出來
若訊號是由負到正,其與零的交越位置就存到[increasing zeroes]矩陣
若訊號是由正到負,其與零的交越位置就存到[decreasing zeroes]矩陣
目前已有一個程式能達到此功能
但也發現若讀入的值正好是0
則程式就會陷入無窮迴圈無法結束
所以想請教各位前輩
若讀入的值正好是0
則將其位置同時存到[increasing zeroes]與[decreasing zeroes]矩陣
程式要如何修改才好?
或是有其他更簡單的實現方式,謝謝!

![](upload://cYjp2dzAIKFG9OOQpB4ARNtkdj8.png)


ZeroCrossings_test2.vi[/QUOTE]

無窮迴圈無法結束的原因不是你提的問題:

![](upload://8zqeOHxtUvvKjlbaCeDQy9qU6zy.jpeg)

感謝rat您的回應

原本希望能定位至浮點數(float 32)
所以有用到"Threshold 1D Array Function"
若是用您的程式
就無法定位至小數位了…

我另外改寫了一下程式
能跳出無窮迴圈
但還是無法做到<font =“apple-style-span” color=“#ff0000”>若讀入的值正好是0
<font =“apple-style-span” color=“#ff0000”>則將其位置同時存到[increasing zeroes]與[decreasing zeroes]矩陣
且有寫入錯誤位置的問題
麻煩各位前輩幫我看一下
應從哪邊修改,謝謝!!

ZeroCrossings_t3_2.vi

我發覺問題似乎在這

![](upload://rqMDNzRYda7EgZkNLpnQAN1dUXM.jpeg)

感謝DonWang前輩為應
我不太了解您的意思
可以再說明一下嗎??

[QUOTE=tingway]

我發覺問題似乎在這

![](upload://rqMDNzRYda7EgZkNLpnQAN1dUXM.jpeg)

感謝DonWang前輩為應
我不太了解您的意思
可以再說明一下嗎??

[/QUOTE]

紅圈的部分會大於等於3000嗎?如果不會就無窮迴圈了.

![](upload://vyDiPOFgSdu8Qi1tZcAzozVI1eh.jpeg)

 

紅圈部分不一定能到達資料矩陣的大小減一(3001-1=3000)的值

其原因是若讀入Threshold 1D Array的資料若正好為0(if index=4)
Threshold 1D Array的輸出就位正好落在4
經過位移暫存器返回後當做Threshold 1D Array的index時
Threshold 1D Array的輸出一樣會落在4
因此不能滿足停止條件
不知有沒有甚麼較好的修改方式呢?

稍微重新整理一下  你的要求為:

1. 記錄所有曲線與X軸相交之點
2. 將所有的點依升冪與降冪來分開
(3. 剛好Y=0的點直接紀錄  個人覺得這個是因為"剛好"無法判斷升降密所以直接全部記錄)

問題來了 使用Threshold 1D Array.vi時發現

1. 這個vi似乎只能用於升冪無法用於降冪
2. 第一點為0  第二點又接近0時產生錯誤判斷  (也就是你修改後FP所寫的"輸入矩陣位置1的值非零,所以increasing zeroes的第一格是錯的")

所以....  簡而言之Threshold 1D Array.vi  這個vi俺不會用  只好硬幹出另個解法出來  僅供參考....
小弟程式能力很弱請鞭小力點  QQ

zero crossing point.vi

[QUOTE=tingway]紅圈部分不一定能到達資料矩陣的大小減一(3001-1=3000)的值

其原因是若讀入Threshold 1D Array的資料若正好為0(if index=4)
Threshold 1D Array的輸出就位正好落在4
經過位移暫存器返回後當做Threshold 1D Array的index時
Threshold 1D Array的輸出一樣會落在4
因此不能滿足停止條件
不知有沒有甚麼較好的修改方式呢?

[/QUOTE]

用For loop替代While loop,就如rat大一樣.你要找Y=0的X值,還要將這點分為上升與下降,但是Y=0時X為整數時有許多問題:

0.01;0;0.02:"0"的兩旁都是正或都是負,要判升還是降?

0.01;0;0;-0.01:連續2個"0"以上,兩旁是1正1負或都是正或都是負,判的出正確升或降嗎?

還有用Threshold 1D Array Function 時,threshold y設定為0結果好像fractional index or x===start index???

感謝ret大的協助
您的程式簡單明瞭,比我原本的好多了,謝謝!
我對您的程式理解如下
有錯請指正,謝謝!!
1.先判斷讀入是否為零,
若Yes,則將讀入的位置同時記錄到[increasing zeroes]與[decreasing zeroes]矩陣
2.判斷"輸入矩陣(i)"與"輸入矩陣(i+1)"的值是否同號,
若否則表示有過零點,再做"輸入矩陣(i)"的大小判斷.
若是則表示無過零點,無新值輸出.
3.若"輸入矩陣(i)"<0,表示為負到正過零點,計算其發生位置輸出到[increasing zeroes]矩陣
若"輸入矩陣(i)">0,表示為正到負過零點,計算其發生位置輸出到[decreasing zeroes]矩陣

To:DonWang 大
>>0.01;0;0.02:"0"的兩旁都是正或都是負,要判升還是降?
>>0.01;0;0;-0.01:連續2個"0"以上,兩旁是1正1負或都是正或都是負,判的出正確升或降嗎?
就是因為有您提到的問題,
所以才想將"[讀入的值正好是0的位置]同時存到[increasing zeroes]與[decreasing zeroes]矩陣"

>>還有用Threshold 1D Array Function 時,threshold y設定為0結果好像fractional index or x===start index???
您是指在我的程式中,一開始threshold y設定為0,
結果輸出的"fractional index or x"值會與"start index"值相同嗎?
若問題是這樣的話
是因為Threshold 1D Array Function會從"輸入矩陣"的"start index"位置向後尋找輸入矩陣符合"threshold y"值時的index,將其當作"fractional index or x"輸出
所以若"輸入矩陣"的"start index"值正好等於"threshold y"
則輸出的"fractional index or x"自然會與"start index"相同了.
也就是這樣才使得我的程式會陷入無窮迴圈.@_@

[QUOTE=tingway]

感謝ret大的協助
您的程式簡單明瞭,比我原本的好多了,謝謝!
我對您的程式理解如下
有錯請指正,謝謝!!
1.先判斷讀入是否為零,
若Yes,則將讀入的位置同時記錄到[increasing zeroes]與[decreasing zeroes]矩陣
2.判斷"輸入矩陣(i)"與"輸入矩陣(i+1)"的值是否同號,
若否則表示有過零點,再做"輸入矩陣(i)"的大小判斷.
若是則表示無過零點,無新值輸出.
3.若"輸入矩陣(i)"<0,表示為負到正過零點,計算其發生位置輸出到[increasing zeroes]矩陣
若"輸入矩陣(i)">0,表示為正到負過零點,計算其發生位置輸出到[decreasing zeroes]矩陣

To:DonWang 大
>>0.01;0;0.02:"0"的兩旁都是正或都是負,要判升還是降?
>>0.01;0;0;-0.01:連續2個"0"以上,兩旁是1正1負或都是正或都是負,判的出正確升或降嗎?
就是因為有您提到的問題,
所以才想將"[讀入的值正好是0的位置]同時存到[increasing zeroes]與[decreasing zeroes]矩陣"

>>還有用Threshold 1D Array Function 時,threshold y設定為0結果好像fractional index or x===start index???
您是指在我的程式中,一開始threshold y設定為0,
結果輸出的"fractional index or x"值會與"start index"值相同嗎?
若問題是這樣的話
是因為Threshold 1D Array Function會從"輸入矩陣"的"start index"位置向後尋找輸入矩陣符合"threshold y"值時的index,將其當作"fractional index or x"輸出
所以若"輸入矩陣"的"start index"值正好等於"threshold y"
則輸出的"fractional index or x"自然會與"start index"相同了.
也就是這樣才使得我的程式會陷入無窮迴圈.@_@

[/QUOTE]

從Threshold 1D Array Function的Icom上來看,"threshold y"必須大於"start index"值的Y,如果沒有"fractional index or x"就會與"start index"相同.

![](upload://fW4IPnV7O96iqpbWeyDqjh1etxo.jpeg)

下面程式給你參考:

110421.vi

![](upload://8ndHTzbrLiIIt9tXdHQnwu1HQES.jpeg)

DonWang40654.6793171296