- ベストアンサー
位相変換プログラムの作り方
お世話になっております。VB6初心者です。 早速質問なのですが、下記の二つのデータがある時、A郡の値は周期毎 の0°の値です。 B郡の数値がどの周期の位相何°に位置するかを求めたいのですが、 どんなプログラムにすればいいのでしょうか? A. B. 1 1.25 2 1.50 3.5 2.25 6.2 3.5 5 4.45 例えば1.50は「1周期目の180°」というかんじです。 0°をz、Bの値をtとして位相thは If t>z Then th=((t-z(i))/(z(i+1)-z(i)))*360 のような事くらいしか、まだ浮かんでない状況です。 宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
他の人がだれか答えてくれるかなとおもっていたが。 この質問内容だと、過去の質問内容の経過を把握していないと無理なのかも。 過去の質問を回答をしてきたので、責任を感じて回答します。 質問内容の If t>z Then th=((t-z(i))/(z(i+1)-z(i)))*360 で実際どこが具合悪いのかって事になります。計算式にそれほど問題がないと思う。 出来たら、どこが具合わるいのか、その当たりを質問してくれれば助かります。 これで具合悪ければ、元のADデータに問題があるので、まずもとのADデータを なんとかする事になると思う。 今回何の解析データか存じませんが、1000サイクルとも理論上同等間隔なのか それとも、1000サイクル事態の周期が大きな波になっており、各サイクルごとの 周期が少しずつ長くなったり、少なくなっているのですか。 仮になっていたところで、この計算式でいいような気がします。 上の計算式でまずい時と言う場合は、下の項目に該当する時だと思う。 (1)もとの解析ADデータにノイズが沢山のっていて、 上手く位相0°のデータが拾えない時 (2)理論計算上、もっと正確に理論値の計算をだしたい。 (3)1000サイクル事態の周期が極端に長くなったり、短くなったりしている。 (4)B群のデータが多くて、A群から探すのに時間が掛って、B群のデータを全部 計算するのに時間が掛る。 まず、(1)の上手く位相0°のデータが拾えない この件は、質問内容から、ある程度奇麗な正弦波と聞いています。 それなら、上手く位相0°のデータが拾えるので、上の計算式で問題がない。 もし、上手く位相0°のデータが拾えない位であれば、生のADデータをFFT解析 して奇麗な正弦波にしてから計算する事になります。 (2)理論計算上、もっと正確に理論値の計算をだしたい。 この場合は、やはりFFT解析をして、周期を求め、演算上で何周期目の何度かを求める 事はできます。でもそこまでしても、上の計算結果とそれほど変わらない。 なぜなら、上手く位相0°のデータが拾えているからだと思います。 (3)1000サイクル事態の周期が長くなったり、短くなったりしいる。 この場合、若干上の計算式に問題が出る時がある。出る時があるだけで、殆ど 問題がないと思う。 出る時がある場合は、1000サイクル事態の周期が極端に長くなったり短くなったり している場合である。この場合は上の計算式ではまずいかも。 この場合、FFT解析して、1000サイクル事態の大きな周期を見つけて、 その周期を考慮して位相を計算する事になると思う。 しかし、それだけの労力を掛けても、th=((t-z(i))/(z(i+1)-z(i)))*360で求めた 答えとどれだけ違うかだ。ここが大事だとおもう。 ====================== 結論として、 位相0°が奇麗に拾えない時(ところどころ欠けてる)、1000サイクル事態の周期が極端 に長くなったり短くなったりしている場合、FFT解析を用いて、波形の特徴を捕まえ、 計算する事になると思う。 ただ、このFFT解析は、ここで述べる事が出来ない位の難問なので、ご自分で 理解するか、その様な解析ソフトを利用するかしてください。ただ解析ソフトを利用しても FFT解析の理屈と利用方法がわかっていないとここから先は無理になります。 最後の (4)B群のデータが多くて、A群から探すのに時間が掛って、B群のデータを全部 計算するのに時間が掛る。 これは、VB6では仕方ない事です。遅いのなら、私ならVCにするか、アセンブラ にします。 ただ、アセンブラ(極端に早い、VBの何万倍かも)は周りに組める人がいないかも。私は組めますが。 VCなら、VBよりはややアセンブラに近いので、そこそこのスピード(VBの100倍から200倍) は望めます。ただ、.NETだとVBもVCも言語処理スピードは同じだが。 あと、前回の回答で newVolt > 0 And beforeVolt <= 0 Then のところが私の提供したソースが newVolt > 0 And beforeVolt < 0 だったので、原因究明に時間が掛ったみたい でもうしわけなかったです。 自分でデバッグして答えればよかったのですが、思いつきでその場でソースを 入力してある程度こんな感じって思っていましたので。
お礼
いつもお世話になっております。 今回の一連のプログラム作成でいろいろと勉強になりました。 位相変換、出来ました。有難うございました。