我正嘗試使用Control Studio V6.02中的C代碼編寫DSP(TMSF28335)。如何使用循環緩衝區將信號移位90度
在這個項目中,我需要對傳感器測量的交流信號進行90度的相位偏移。我被建議使用循環緩衝區來實現這種相移。但不幸的是,我不太熟悉如何用C語言編寫循環緩衝區。根據這個概念,我知道緩衝器的「頭部」應該是輸入信號(被測量的交流信號),「尾部」是用作環形緩衝器輸出信號的移位輸入信號。
系統的採樣時間設置爲3.84599989e-5(s),一個週期爲0.02(s)(50 Hz)。因此,一個週期的1/4會構成(0.02/4)/3.84599989e-5=130個樣本。換句話說,我需要延遲130個樣本。
如果能告訴我如何在C中爲我的控制器編寫循環緩衝區並相應地可以使相位延遲,我將不勝感激。
查找有關循環緩衝區的教程。學習通過簡單的例子來實現和使用它們。然後找出你的信號的確切時間。然後保持輸入和輸出之間距離的四分之一。或者(如果是非恆定週期),您必須在任何給定時間動態確定「90度」對於您的信號的含義。 – Yunnosch
您需要一個[數字濾波器](https://en.wikipedia.org/wiki/Digital_filter)(FIR或IIR)並實現您應該使用目前爲止正確的環形緩衝區。我將使用希爾伯特濾波器,因爲這會將'cos(ωt)'轉換爲90°位移的'sin(ωt)'。有關數學解釋,請參閱:https://en.wikipedia.org/wiki/Hilbert_transform,您需要了解有關複數的知識。這個問題應該在這裏更好:https://dsp.stackexchange.com/。此外,我會建議在Matlab中進行數字信號處理等方面的培訓。這對於這個目的很好! –
但要回答關於循環緩衝區的問題,這是一個非常普遍的問題:https://stackoverflow.com/a/827749/8051589。這裏是一個FIR濾波器實現:https://stackoverflow.com/questions/22749058/circular-buffer-implementation-for-fir-filter-in-c。有很多東西可以在互聯網上找到。 –