Control Studio V6.02でC言語コードを使用してDSP(TMSF28335)をプログラムしようとしています。循環バッファを使用して信号を90度シフトする方法
このプロジェクトでは、センサで測定するAC信号に90度の位相オフセットを付ける必要があります。私はこのような位相シフトを行うために循環バッファを使うことを勧められました。しかし残念ながら、C言語で循環バッファを書き込む方法はあまりよく分かりません。概念によると、私は、バッファの "頭"が入力信号(測定されたAC信号)でなければならないことを知っており、 "尾"は循環バッファの出力信号として使用されるシフト入力信号です。
システムのサンプリング時間は3.84599989e-5(s)に、1周期は0.02(s)(50Hz)に設定されています。 1周期の1/4は(0.02/4)/3.84599989e-5=130サンプルとなる。言い換えれば、私は130サンプル遅らせる必要があります。
私のコントローラ用にCで循環バッファを書き込む方法を教えてもらえれば、私は位相遅延を行うことができますので、感謝します。
循環バッファーに関するチュートリアルを検索してください。簡単な例で実装して使用する方法を学んでください。その後、信号の正確な周期を調べます。それから入力と出力の間の距離の1/4を維持します。あるいは(一定でない場合)、信号の "90度"の意味を動的に判断する必要があります。 – Yunnosch
[デジタルフィルタ](https://en.wikipedia.org/wiki/Digital_filter)(FIRまたはIIRのいずれか)が必要です。実装するには、これまでのリングバッファを使用する必要があります。ヒルベルトフィルタを使うと、 'cos(ωt)'を 'sin(ωt)'に変換します。これは90度のシフトです。数学的な説明については、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-fil-filter-in-cにあります。インターネット上で見つけるには多くのものがあります。 –