• ベストアンサー

A/D変換器のサンプリング周期誤差について

A/D変換器のサンプリング周期誤差について 簡易FFTアナライザーの作成を考えております。 そこで、A/D変換に考えている装置が1msでのサンプリング周期で ±10usのサンプリング周期誤差があります。 この装置からの入力データで簡易FFTアナライザーの作成は可能でしょうか。 (たとえは、300Hzぐらいの波形を測定する時に、サンプリング ノイズでスペクトル  が見えなくなり、使用できない等) 測定周波数はDC~400Hz程度で1024点程度のデータ点数を考えています。

  • 科学
  • 回答数3
  • ありがとう数24

質問者が選んだベストアンサー

  • ベストアンサー
  • tance
  • ベストアンサー率57% (402/704)
回答No.2

サンプリング周期が1msecとのことなので、入力周波数帯域は500Hz以下 なはずですが、仮に500Hzでフルスイングする入力があるとします。 500Hzというのは最高周波数ですからサイン波になります。(歪めば 500Hz以上の高調波が出るが、最高周波数が500Hzだということは 歪んでいないということを示しています) この500Hzの信号の最も傾斜の大きいところは、信号振幅を1Vppだとすると ±6.28kV/secとなります。この、傾斜の大きい部分をサンプリングする タイミングが10usecずれると、電圧にして±63mVの違いが生じます。 これはフルスケールの6.3%ですからAD変換器としては4ビット相当に なり、とても精度が良いとは言えません。 これを使ってFFTをすると、ノイズフロアの高いものになってしまいます。 一定の周波数のピュアなサイン波をサンプリングしても、サンプルを とるたびにフルスケールの6.3%も大きく出たり小さく出たりするのですから ノイズフロア-24dBというひどい特性のFFTになってしまいます。 もちろん上記は、10usecのサンプリングタイミングが不規則だったり 変動する場合の話です。1mseが1.01msecで一定なら問題ありません。 この類の誤差は高速で高分解能のADでは大変重要で難しい問題になります。 クロックのジッタが数psecあっても出力のノイズが問題になるケースが 多くあります。

bamc31
質問者

補足

数値での解説ありがとうございます。 このAD変換器を使用して特性を上げるにはどんな方法があるでしょうか? FFTの周波数は最悪200Hz程度まで下げ、5msにてサンプリングする。 又は、1msでのサンプリングを、5回の移動平均等のフィルタ処理をする事で 特性を上げることが出来るでしょうか。 尚、質問ばかりで申し訳ありませんが、FFTアナライザとして使用するには 何dBぐらいが必要でしょうか。

その他の回答 (2)

  • tance
  • ベストアンサー率57% (402/704)
回答No.3

#2 tanceです。 そもそも10usecの誤差というのは固定的な周波数偏差なのかふらふらした 変動なのかを見極めてください。普通はクロックに1%も変動があることは 少ないです。(サンプリングクロックをソフトで作っていたりすると変動が このくらいある場合もあります) もし残念ながら10usecというのは変動するのだとすると、性能を上げるには クロックを奇麗にするのが一番の常道です。ここでは使う必要が あるかどうか解りませんが、「クロック・クリーナ」なるモジュールも売って います。 大げさなPLLを使ったクリーナを持ち出すまでもなく、元のクロック発振器を ピュアなものにして、もしADのサンプリングパルスがハード的にいじれるなら そのピュアなクロックで「たたき直す」のが早道です。 たたき直すというのはフリップフロップを利用して、奇麗なクロックでAD サンプリングパルスをラッチし直すことを意味します。具体的には フリップフロップが1個あればできます。論理の反転などが必要な場合は インバータ等がいるかもしれません。 FFTアナライザとしてどのくらいのダイナミックレンジが必要かは用途によります。 一つの目安は使えるADコンバータが何ビットかです。12ビットなら60dBくらいは いけるでしょう。そうなるとGNDのノイズとかプリントパターンの出来不出来 などに左右されます。 もしADが8ビットくらいなら40dB以上いけるでしょう。そうなるとクロックの 純度が問題です。(このくらいだとGNDよりクロックかも)普通の水晶発振器 なら十分な純度が得られます。セラミック発振子も使えるでしょう。

bamc31
質問者

お礼

回答ありがとうございます。 ご紹介頂いたクロック・クリーナ等の追加が 都合により不可能の為、もう一度周波数偏差の確認 ADコンバータの選定を考えたいと思います。 尚、使用しようと考えていたADコンバータは16Bitなので ダイナミックレンジの目安としては80dBと言うことですね。

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.1

サンプリング周期に対して誤差が1%程度なので、それほど大きな問題はないと思います。 また、どのような問題が出るかは、サンプリング時間の誤差がどんな具合に出るか(毎サンプルごとにランダムに誤差が出るのか、すべてのサンプルに一定の誤差が出るのか)によるかと思います。 後者なら、単にFFTをしたときの周波数が若干ずれるだけでしょうし、前者だと若干ノイズが増えるようなことになるかと思います。

bamc31
質問者

お礼

遅くなりました。 ありがとうございます。 参考になります。

関連するQ&A

  • 量子化誤差の理論値と実測値の求め方教えてください

    A/D変換したsin波の量子化誤差の理論値と実測値の求め方がわからなくて困っています。わかる方説明お願いします。サンプリング周波数1000Hz、分解能16bit、レンジ5vと20vです。A/D変換したsin波のデータはExcelのデータとして持っています。

  • FFTを使って異なるサンプリング周波数での周波数強度について

    100Hzのsin波に対してFFTを行い周波数スペクトルを出したときのことです。 解析条件 サンプリング周波数・・・・44.1kHz , 22.1kHz FFTの点数・・・32768点 窓関数・・・ハニング窓関数 まず、サンプリング周波数44.1kHzで解析を行い、100Hzにメインローブが現れていました。 次に、サンプリング周波数22.1kHz以外は同様の解析条件で解析を行ったのですが、サンプリング周波数44.1kHzに比べて、100Hzのスペクトル強度が下がっていました。また、サイドローブは44.1kHzに比べて上がっていました。 スペクトル強度がサンプリング周波数によって変化するというのはありえるのでしょうか? それとも、私の組んでいるプログラムが間違っているという事なのでしょうか?どなたかご教授下さい。よろしくお願いします。

  • サンプリング定理がわかりません

    サンプリング定理とそれに関わる内容についての質問です。 まず、アナログ-デジタル変換(A-D変換)について授業で教わったのですが、  ・コンピュータは0(0V)と1(Vcc)しかわからない。 とプリントの最初に記載されていて、0と1ということはわかりますが、0VとVccとは何なのかがわかりませんでした。 A-D変換のグラフの表していることはなんとなく理解できましたが、後に続くサンプリング定理の説明で、  (1)サンプリング周期はA-D変換したいデータの最小周期の半分以下の値にする(ナイキスト周期)  (2)つまり、A-D変換したいデータの最大周波数の2倍以上の値にする(ナイキスト周波数) →周波数=1/周期 と説明されただけで、 (1)のデータの最小周期とはどういうものなのか、なぜ半分以下の値にする必要があるのか そして(2)が、つまりで続いている後の意味もわかりませんでした。 補足なしでいつのまにかナイキスト○○と付け足されていて困っています・・・。 また、デジタル-アナログ変換(D-A変換)で、  入力された値=bit数 例)010(2)=2÷2(のn乗)=2÷2(の3乗)=2/8 となっており、2のn乗個に等分した縦軸でなぜ2を割るのかわかりません。 以上の所を教えて頂きたいと思います。よろしくお願いします。

  • サンプリングを高くするほどフーリエ変換値がずれる?

    ある周波数解析ソフトで「フーリエ変換」釦があるのですが、サンプリング周波数を高くするほど、フーリエ変換値がずれてしまいます。 (例)60Hzの正弦波のみの1s間の波形を「フーリエ変換」釦を押すと、 (1)サンプリング周期(10ms)→ 50.5Hz、 52.5Hz、 76.5Hz、の順でピーク点 (2)   〃    (1.0ms)→ 62.5Hz がピーク点。 (3)   〃    (0.1ms)→ 98.5Hz が 〃 (4)   〃   (0.001ms)→  0.0Hz が 〃 となり、周波数ピーク点が60Hzに合いません。このように大きくずれてしまうものでしょうか? なお、同ソフトで「フーリエ級数展開」釦では特定区間指定でき、60Hzの「1次」のみに表示されるのですが、「フーリエ変換」機能には、区間指定釦がありません。 詳しい説明書きはないのですが、通常そのような使い方となるものでしょうか?

  • FFTプログラムで問題が生じました。

    C言語でFFTのプログラムを作成しています。入力として周波数の既知な正弦波を利用してプログラムの動作確認をしているのですが、サンプリング周期0.01secの状態でサンプリング数が4096点と8192点の時だけスペクトルの結果がおかしくなってしまいます。例えば、10Hzの入力に対して他の点数(512~32768点)では、きちんと10Hzの位置にスペクトルが現われるのですが4096点と8192点の時は、10Hzの他に同じ大きさの40Hzのスペクトルが現われてしまいます。入力が5Hzの時は、45Hzに現われます。ちょうど折り返し雑音のような誤作動なので何か明確な原因があるのではないかと思うのですが全く分かりません。このようなことはよくあるのでしょうか?それとも単にプログラムのミスでしょうか。回答お願いします。

  • フーリエ変換の最大周波数

    5kHzでAD変換した信号があり、解析したい成分は0~1kHzに含まれています。 上記の前提で、256点で128点オーバーラップしながらFFT処理を行った場合、FFTを行うデータ数をN、サンプリング間隔Δt(1/5kHz=0.0002sec)とした時、 分解能 Δf=1/N*Δt=19.53 最大周波数 Fmax=(N/2NΔt)-(1-Δf)=2480.47 という計算式をインターネット上で見つけました。つまり0~2480Hzまで20Hzごとのパワースペクトル時間変化が128点データが並ぶということになると思うのですが・・・・ 一方、最大周波数はFFTデータ数の半分だという記載も見つけました。すると、最大周波数は半分も128Hzだと思うのですが、どちらが正しいのでしょうか?

  • フーリエ変換後の解析について

    フーリエ変換後の解析について ある振動の波形を測定していたとします。 No.1 最初は特に何も振動を加えず、ありのままを測定したとします。 No.2 そして次に周期的に弱い振動を与えたとします。 1と2の結果得られた振動波形を見比べた結果、ほとんど違いは見られなかった場合 FFT解析を行う意味はあるのでしょうか? 波形にほとんど違いがなかったということは本当に微妙な振動が加わっただけということですよね? そんな微妙な違いしかない結果をFFTしたところでほとんどスペクトルにも差がでないと思うのですが・・・。 それともたとえ微妙であっても周期的に加えてる以上どこかしらにピークがでてくるものなのでしょうか?

  • サンプリング定理

    30Hzの正弦波をサンプリング周波数40HzのAD変換器で離散化したとき、その出力波の見かけの周波数はどのくらいになるのか? という問いに対して以下のように考えたのですが、正しいでしょうか? 自身があまりなくて。。 (ナイキスト周波数) = (サンプリング周波数)/2  = 20 よりも入力周波数が大きいので、出力波は見かけ上、入力波より低い周波数になる。 サンプリング間隔Δt= (サンプリング周期) = 1/20 なので、出力波の最大周波数は 1/Δt = 20 よって出力波の見かけ上の周波数は20Hz 別のやり方として、y=sin xを30周期分紙に書くなり印刷するなりして,横軸を40等分して各点の y=sin x のところに黒丸を打って その40個の黒丸がsin x の30周期の間に何周期あるようにみえるか数える→実際にためすと10Hz という2つのやり方を考えたのですが、どちらも正しい気がしてならないです。

  • 離散的フーリエ サンプリング時間(周期?)について

    ω0=2πf (fは信号の周波数) 測定したデータ a(k) (kは1~Nまで) サンプリング周期 ts Xa = (1/N)Σ(k=0~N-1) a(k)exp(-jω0・ts・k) ここでtsは1点を取るあいだの時間なのか 1周期を取るあいだの時間なのか どなたか教えて下さい。 それと(kは1~Nまで)というのは(kは0~N-1まで) とどう違うでしょうか?どちらでも問題ないのでしょうか

  • パワースペクトルの0dBの値について

    matlabを用いて時系列データのパワースペクトルを計算、対数表示でグラフにプロットしています。 matlabのfft関数のヘルプに記載されていた例を参考に、以下のような自作の関数を組んで計算しているのですが、2つ質問があります。 1. この場合、パワースペクトルの0dBは、時系列の値ではいくつになるのでしょうか? 0dB = 1でしょうか? 2. 関数の中において、power_fftをN_fft(高速フーリエ変換時のデータ長さ)で割っている事の理由がわからなかったのですが、なぜ行っているのでしょうか? ------------------------------------------------ 以下、自作のパワースペクトル表示関数を示します function Power_db(Data_xx) fs = 1000; % サンプリング周波数 [Hz] N_fft = 2^12; % 4096個 xx_fft = fft(Data_xx,N_fft); power_xx = xx_fft.* conj(xx_fft) / N_fft; frequency = fs*(0:2047)/N_fft; % (0:2047)で500Hzまで plot(frequency,20*log10(power_xx(1:2048))) xlabel('Frequency [Hz]'); ylabel('Power Spectrum [dB]'); grid on; --------------------------------------------------------- 以上です。 何か足らない情報などがありましたらお申し付けください。 よろしくお願い致します。