A/D変換ボードから読み込んだものを画面上に一度表示させ,さらにセーブすることなく,例えばスムージングというボタンを押したら,グラフのギザギザがとれるようなものを作っていて行き詰まりました.
他の格納場所を作ってそこから一回一回読み込まないと,あるグラフ上の点に対して,隣接平均したら,次の点を隣接平均するときに,その前の点のすでに隣接平均した値を用いることになってしまいますよね?
このような場合,どのようなプログラムにすればいいのでしょうか?
わかりにくい説明ですいません.
>他の格納場所を作ってそこから一回一回読み込まないと,あるグラフ上の
>点に対して,隣接平均したら,次の点を隣接平均するときに,その前の
>点のすでに隣接平均した値を用いることになってしまいますよね?
当然だと思いますが、何か問題がありますか?
何が問題なのか分からないので、問題点を詳しく説明してください。
A/Dがらサンプリングした『生データ』と、グラフ等用に表示する
為に演算した結果を格納する『加工後データ』と、配列を別々に持て
ば可能ですが・・・
ただし、サンプリグ数によっては、GlobalAllocした巨大な配列空間
が必要になりますので、あくまで手法と言うことで・・・
尚且つ、グラフはご自身で描画されるのですか?
それとも何かコンポーネントを御使いになりますか?
Office Web Component では、エクセルと同等なので、与えるポイント
数は、35000ポイントに限られる場合があると思いますので、注意が
必要です。
加工方法については、スムージングやらいろいろありますが、ただ単
にギザギザになるノイズ成分を簡単に除去したいなら、移動平均的手
法でいいと思いますが、サンプリング環境によっては、特異なノイズ
成分が入っていたりしますので、数値フィルタや、FFTやらの方法
でノイズ除去しないといけないと思いますが・・・
以上。
>isshiさん
下で岡田 之仁さんがおっしゃっているように,
“A/Dがらサンプリングした『生データ』と、グラフ等用に表示する
為に演算した結果を格納する『加工後データ』と、配列を別々に持つためには
どうするのか”
という,とても初歩的な質問です.
今までFORTRANしかやったことがなく,VISUAL C++の文法に戸惑っているので,
格納場所を二つ作り,一つは『生データ』を,もう一つは,その『生データ』を
一度読み込んで,加工した『加工後データ』を保存するには,どのように文法を書けばいいのかという問題です.
>岡田 之仁さん
グラフもMoveToで移動させて,LineToでスムージングボタンなどがある画面上に
描かせています.
また,確かに,隣接平均だと自分の欲しかったピークを除いてしまいかねないので,FFTで特定の周波数のノイズを除去することも(隣接平均とFFTを画面上で選べるようにすることも)考えています.
最後に,返事が遅れてしまい申し訳ありませんでした.よろしくお願いいたします.
>“A/Dがらサンプリングした『生データ』と、グラフ等用に表示する
>為に演算した結果を格納する『加工後データ』と、配列を別々に持つためには
>どうするのか”
普通に2つの配列を用意すればよいです。
int src[100]; // 生データ用配列
int dst[100]; // 加工後データ用配列
int i;
for (i = 0; i < 100; ++i){
src[i] = i; // 生データを作る
}
for (i = 0; i < 100; ++i){
dst[i] = src[i] * 2; // 生データを2倍して加工後データを作る
}
>isshiさん
上のやつで
int src[100];
int dst[100];
int i;
for (i = 0; i < 100; ++i){
src[i] = i;
dst[i] = src[i] * 2;
}
と一緒にしちゃっても平気ですよね?
実際のプログラムはもっと複雑ですが,なんだかうまくいきそうです.
ありがとうございました!
解決のチェックを入れ忘れました.
>と一緒にしちゃっても平気ですよね?
上記サンプルでは確かにそうですが、実際はA/D取り込み部、
データ加工部と分かれていますよね?
それを2つのfor文で表してみただけです。
ツイート | ![]() |