信号を取得(読み取り)するには?


awajishima  2010-11-04 21:40:14  No: 147179  IP: [192.*.*.*]

Visual Basic 2010で方形波(矩形波)を発生させるプログラムの作成方法を教えてください.

今,VB2010を用いてデジタル信号(方形波)を処理するプログラムを作成しています.
実際の機器を使う前に,まずはサンプルの方形波(矩形波)を発生させて,その発生させた方形波(矩形波)を入力して処理できるか試験したいと思っています.しかし,肝心のサンプルの信号を発生させるプログラムの作成方法が全く分かりません.どのツールを使ってどのようなプログラムを書けばいいのか見当がつきません.
なので,どのツールを使って,どのようなプログラムを書けば方形波(矩形波)を発生させられるプログラムを作成できるかを教えていただきたいです.
また,発生させた信号を取りこむ方法(プログラム)も教えていただきたいです.取りこむ際に1ビットごとに配列に格納したいです.やはりタイマーイベントを使用して配列に格納するのがいいのでしょうか?? 

方形波を作る方法がわからないです
方形波を作るプログラムを知っているのであれば教えて欲しいです
データ構造は2個のスタートビットと1つのパリティビット(または3個のCRCビット)とデータビットで構成されています
また,格納の形式について教えてください

編集 削除
ミッキー  2010-11-04 22:46:03  No: 147180  IP: [192.*.*.*]

タイトルと質問内容が違いますよね?

信号を読み取りすることを知りたいのか、
方形波を作ることを知りたいのか、どちらですか?

質問内容を読んでみると、どちらも知りたいようですが、
今現在、あなたが一番困っていることは何ですか?

あと質問文が読みにくいです。
適宜、改行してください。

> しかし,肝心のサンプルの信号を発生させるプログラムの
> 作成方法が全く分かりません.
> どのツールを使ってどのようなプログラムを書けばいいのか
> 見当がつきません.

全くわからないとのことですが、ご自身でどこまでやったのですか?

> なので,どのツールを使って,どのようなプログラムを書けば
> 方形波(矩形波)を発生させられるプログラムを作成できるかを
> 教えていただきたいです.

同じ内容を続けて書いても仕方ないと思いますが・・・

> 方形波を作る方法がわからないです
> 方形波を作るプログラムを知っているのであれば教えて欲しいです
> データ構造は2個のスタートビットと1つのパリティビット
> (または3個のCRCビット)とデータビットで構成されています
> また,格納の形式について教えてください

この文章もそうですが、前半部分で書かれていることばかりですよね?
なぜ2回、3回と同じことを書くのですか?


・どこまでやったのか
・その結果、どこで行き詰っているのか?
・解決するために何を知りたいのか

をもう一度整理してください。
質問している相手は赤の他人です。あなたではありません。
自分は何をしたいのかを相手にわかるように質問をするよう、
心がけてください。

編集 削除
awajishima  2010-11-05 04:29:25  No: 147181  IP: [192.*.*.*]

同じことばかり書いてすいません。
今作成してるのはデコーダー(復号器)です。

http://www.psi5.org/en/pool/pdf/psi5_specification_v13_080729.pdf
まず、このページに書いてあるような信号を
発生させたいのですが、作ったプログラムでは
直角に上がる信号しか作れません。
タイマーを使っているので、
速度が遅いです。

知りたいこととしては、
1.上記のサイトに書いてるような
    信号の発生方法。

2.送信されてきた信号の処理方法。

の2点です。

編集 削除
オショウ  2010-11-05 09:35:52  No: 147182  IP: [192.*.*.*]

PCだけ(ソフト的にと言う意味)と言うのであれば、無理かと。

一般的には、信号パターンの発生装置を使って行うので・・・
例えばこんな装置
http://www.home.agilent.com/agilent/product.jspx?nid=-536902258.0.00&lc=jpn&cc=JP

ソフト的と言っても何等かのハードウェアは必要なので、D/A
ボード使って行うことが、一番近道かも。

信号の取り込みは、A/Dボードになりますが、矩形波の仕様に
よっては、アナログ・デジタル変換ボードでも安価のものでは、
取れない場合もあるので、まずは、A/D・D/Aのことを勉強
されては?

デジタルマルチメーターみたいなA/D装置は非常に高価なので
PCのPCIに搭載するボードとか、USB接続できる変換アダ
プタとか・・・方法(装置)はいろいろあります。

以上。

編集 削除
awajishima  2010-11-09 05:09:22  No: 147183  IP: [192.*.*.*]

今回は書いていただいているような機器は使わずに
パソコンだけで処理しなければいけないのですが...

パソコン(VB)だけでは、模擬のデジタル信号を
発生させることは不可能なのでしょうか?
パソコン内で発生させた信号であれば、
なんとか私でも処理できるような気がするのですが...

編集 削除
huh  2010-11-09 09:52:24  No: 147184  IP: [192.*.*.*]

「信号を発生」と言ったら一般的にオショウさんの回答のようになります。
最初の質問には「模擬」とは一言も書いてないですよね?

質問が雑すぎるので、ミッキーさんの仰る様に、
もう一度、質問をまとめなおしてみてください。

あと、マルチポストはやめましょう。

編集 削除
awajishima  2010-11-09 16:53:03  No: 147185  IP: [192.*.*.*]

まとめなおしたので、
ご教授お願いいたします。

1.今回はパソコン以外の機器は使いません。
2.パソコン内で模擬信号を発生させ、
    その模擬信号を処理したい。
    模擬信号はマンチェスターコードによって
    作られている
3.その模擬信号を処理して、”1”と”0”の
    論理値になおす。

上記のことがやりたいのですが、
模擬信号の作成の仕方が全くわからず困っています。
どうすれば模擬信号を発生させられますか?

編集 削除
んがとと  2010-11-09 17:33:38  No: 147186  IP: [192.*.*.*]

もともとはこんな話みたい
http://qanda.rakuten.ne.jp/qa6284523.html
http://qanda.rakuten.ne.jp/qa6293608.html
> 模擬信号の作成
とはいえ実機に想定されるものをシュミレート
しないと意味が無いと思われますが、根本的に
知識が無いことが分かりますし、なんか一時
多重投稿して削除された問題ユーザのようです。

編集 削除
ミッキー  2010-11-09 22:25:54  No: 147187  IP: [192.*.*.*]

awajishima さぁ、もう無理だろ。

マルチポストをした挙句、質問がコロコロ変わる。
話が進んでいる掲示板しか再投稿しない。
人間的にどうかと思うよ。

模擬信号だけでいいんだったら、タイマー使って
作れるでしょ。

タイマーイベントのところに

Count = 1 - Count

って書けば、Count の値は「0」「1」どちらかに変化する。
この Count を理論値として用いればいいんじゃないの?

編集 削除
s  2010-11-10 02:59:58  No: 147188  IP: [192.*.*.*]

というか精度(解像度)はどの位必要なんでしょう?
http://hp.vector.co.jp/authors/VA007219/rtc_pic.html
一秒で約1000回前後の振幅が必要なら、1msのタイマーイベントで
いけると思います。
正弦波(変数が1か0か見るだけ)はクリアできると思うけど、
時間的な精度の保証はありません。

タイマー全開で1000回/s振幅できても500Hzですよ? <多分
例えばCDは44.1kHz位だからタイマーイベント比だと1/88位です。
それでもいいのかって話になりそう。

編集 削除
s  2010-11-10 03:09:40  No: 147189  IP: [192.*.*.*]

忘れてました。読み込み側はリングバッファ必須です。

編集 削除
オショウ  2010-11-10 03:23:34  No: 147190  IP: [192.*.*.*]

ソフトウェア的に・・・となると、どの程度の制度の
シュミレーターを作らないといけないのか。

それが.NET的に可能なのかどか・・・

MATLAB使いたいところだけど、高価なんで、Octove
ですかネ〜

尚、タイマーでは1msは無理。
ハードウェアタイマー(マルティメディアタイマ)
を設定してイベントは発生しても、割り込み処理で
保障しないといけないなら、C++で書くしかないか
と思いますが。

どうしても.NETなら、C++/CLIでしょうか・・・

因みに、この程度でとん挫しているならC++/CLI
やら、マルティメディアタイマーやらのプログラ
ミングは到底無理だと思います。

●どういうシュミレータを作りたいのでしょうか?
  1msを1秒に引き伸ばしてもよいなら可能でしょう
  VB.NETで・・・

以上。

編集 削除
s  2010-11-10 05:22:47  No: 147191  IP: [192.*.*.*]

あ、桁一つ間違ってました。
失礼しました。
1ms > 10msに変更して読んで下さい。 > ALL

オショウさん
お手数かけてすみません。

編集 削除
awajishima  2010-11-10 16:25:31  No: 147192  IP: [192.*.*.*]

回答有難う御座います。

今回は8μsごとに模擬信号を発生させたいのですが、
これはVBで可能なことなのでしょうか?

そして、発生させた模擬信号を処理する速度も
同様な速度にしたいのすが可能でしょうか?

編集 削除
オショウ  2010-11-10 16:31:02  No: 147193  IP: [192.*.*.*]

不可能です

以上。

編集 削除
オショウ  2010-11-10 16:44:17  No: 147194  IP: [192.*.*.*]

外部ハードウェア(PCIボード)でハードウェアタイマーを
設定し、割り込み受信できるデバイスドライバーを作ってなら
100ns(ナノ秒)の方形波パルスに追従させてA/Dサンプリ
ングを行った実績はあります。ただしバスマスタでボード側
で処理を行う必要がある・・・

ソフト的にと言う前提でもPCに搭載されているマルティメデ
ィアタイマーの精度は、8μsでのタイマーイベントは発生させ
れても、一般アプリ、特にVBでは無理です。

C言語で頑張るしかないでしょう〜

ただPCのスペックによっては、発生させれても無理な場合が
あります。

以上。参考まで

編集 削除
YAS  2010-11-10 21:13:36  No: 147195  IP: [192.*.*.*]

今までの話の流れの内容をあまり理解せずに,
門外漢の素人の考えですが,方形波のWAVファイルを用意して,
サウンドデバイスから再生したらだめですか?

入力もLineInからキャプチャしてから解析するとかどうですか。

昔のPCのプログラムカセットテープを読み込ませるようなイメージです。

編集 削除
YAS  2010-11-10 21:19:10  No: 147196  IP: [192.*.*.*]

ごめんなさい。見落としてました。8マイクロ秒なのですね。
サウンドデバイスでは無理に決まってました。

編集 削除
ミッキー  2010-11-10 21:52:56  No: 147197  IP: [192.*.*.*]

予想通りでしたね。

> 模擬信号の作成の仕方が全くわからず困っています。
> どうすれば模擬信号を発生させられますか?

の書き込みと、「Visual Basic 2010の通信速度(伝送率)を知るには??」の

> 今回使う機器の通信速度は125kbpsと189kbpsです

の書込みから、

「模擬信号って、まさか8μs間隔って言わないだろうな・・・」
と思っていましたよ。案の定でしたね。
125kbps = 8μs 間隔ですからね。



まず整理すると

・awajishima は VB.NET の素人
  →数年使いこなせば、VB.NET で8μs 間隔で
    処理できないことぐらいわかる。例え、
    わからなかったとしたら、足洗って別の道に進んだ方がいい。

・マルチポスト先の情報によると、これは課題とのこと。
  →出題者が VB.NET の知識をもっていれば、
    こんな無茶な課題を出してくるはずがない。

可能性があるとすれば・・・
・awajishima が「VB2010でできます!」と豪語してしまった。
・課題はどんな言語でもいい、という条件だったが、
  awajishima は「VB2010でできるだろう、掲示板に丸投げすれば
  誰かプログラム作ってくれるだろう」と思った。
・壮大な釣り


awajishima へ
もうこれ以上は無理だ。観念しろ。
誰もお前なんて相手にしない。
お前にはソフト設計は向いていない。
別の道に進んだ方がお前のためだ。

以上

編集 削除
awajishima  2010-11-11 05:50:34  No: 147198  IP: [192.*.*.*]

忠告ありがとう御座います。
でも、このプログラムを作らないと
日本に帰れそうにないです。

それに、VBでは不可能だということが
わかっただけでも収穫だったのだと思います。

なので、似たようなプログラムでも良いのか
交渉するつもりです。

編集 削除
オショウ  2010-11-11 15:49:53  No: 147199  IP: [192.*.*.*]

シュミレータと言うか・・・求められている機能・性能は?

ハードウェアのタイマー割り込みを使用して割り込みを発生
させ、そのコールバックで処理を行うようにプログラムを組
む必要があるのかどうか。

8μsでのイベントは多分追従できないので、コールバックで
しょう。そうなるとC言語か・・・C++/CLI

次にタイマーのイベントとしての時間軸を疑似的に長くして
8μsを例えば0.1s程度としてやれば、VBでも追従できるも
のは可能だと思います。

割り込みやイベントの間隔さえ長時間化してやれば後はその
要求される処理をどう記述するか・・・VBでも可能な範囲
になってきます。

画面表示も8μs毎に表示しないといけない・・・
と言うのは無理で、仮に8μsで動作するものが出来上がって
も、表示系は100ms毎程度に未表示部分のデータを画面表示
させるとか・・・

あぁ〜HDDへのデータ保存もそうなるかナ〜

アルゴリズムの確認だけと言うシュミレータなら可能な方法
もありますが、最終的に何等かの方法で8μsでの割り込みに
て追従するプログラムを作らないといけないなら、全く無理
でしょう〜

まだまだハードルは沢山ありますので、「似たような」と言
う意味合いの部分でお客様が納得の行くレベルの技術的な話
をちゃんとできないと、完成してから「それは違う」なんて
ことになりますヨ!

因みに、多分、awajishimaさんには無理なレベルの話だと思
いますが・・・選手交代しないとダメだろうと思います。

以上。

編集 削除
s  2010-11-13 00:46:02  No: 147200  IP: [192.*.*.*]

もう少し簡単でゆっくりな話で解説を
例えば1秒間に10回ランダムに状態が変わる信号があるとします。
0101010101 < 信号
これは0->1 1->0になるのですぐに分かります。でも

0111111100 < 信号
いつまでが1なのか分かんないよ。orz
>1秒に10回なら0.1秒ごとに状態を見ればいい。
>OSのタイマーだと精度低すぎて0.1秒後は無理  < 現在の問題点

>正確に変動するクロックを一緒に与えてやればいいんじゃね?
0111111100 < 信号
0101010101 < クロック(一定)
>お前頭いいな 。クロックの変化のタイミングで信号見ればいいのか
>タイマーいらないじゃん  < 今このへん

まぁ前段階でループ回してPCの性能を測定後に
疑似クロックを作るのが無事に帰れる道だと思います。

結論
VBのタイマーは使えないと思うのでとにかく正確な疑似クロックの取得。
スレッドも勉強しないと駄目だけど、一秒で1000000回ループ程度なら
いけるのでは?

編集 削除