|
那須山さんのブログでPCMデータの位相差を測定する方法が話題になっているので、WaveフォーマットのデータからCSVデータに変換するプログラムをExcel/VBAで作ってみました。
【動作環境など】
1) 入力のwaveデータは16bit/2チャンネル
2) 出力は、左データ + 「、」 + 右データ (+は演算ではなく文字列の連結という意味です)
3) VBAのバージョンは7.1
'----------------------------------------------- ' wave to csv '----------------------------------------------- Option Explicit '-- 変数の定義が必須であることの宣言文 Sub main1() Dim 読込位置 As Long Dim head1 As String * 12 Dim sub_head1 As String * 28 Const 定数最大 As Long = 48000 '---- Const 定数最大 As Long = 480 Dim データバイト数 As Long Dim 最大データ数 As Long Dim 格納データ数 As Long Dim 読込データ数 As Long Dim data_L As Integer Dim data_R As Integer Dim OpenFileName1 As String Const OpenFileName2 As String = "c:\phase\data.csv" '-- 出力ファイル名 '----入力ファイルをダイアログ・ボックスより選択
OpenFileName1 = Application.GetOpenFilename("Wave形式16bit PCMファイル,*.wav?") If OpenFileName1 <> "False" Then Else MsgBox ("キャンセルされました") Exit Sub End If Open OpenFileName1 For Binary As #1 '-- input Wav data open 読込位置 = 1 '-- Waveファイの先頭に読み込みポインタを位置づけ Get #1, 読込位置, head1 '-- header 読み飛ばし 読込位置 = 読込位置 + Len(head1) '--ファイルポインタを進める Get #1, 読込位置, sub_head1 '-- sub_header 読み飛ばし 読込位置 = 読込位置 + Len(sub_head1) Get #1, 読込位置, データバイト数 '-- データ全体のバイト数を取得 読込位置 = 読込位置 + Len(データバイト数) 格納データ数 = データバイト数 / 4 ' 左右各16bit/2チャンネル分のバイト数から方チャンネル分のデータ数計算 If 格納データ数 > 定数最大 Then '-- 読込件数を制限するためだけに使用 最大データ数 = 定数最大 Else 最大データ数 = 格納データ数 End If Open OpenFileName2 For Output As #2 'output csv data 読込データ数 = 0 Do '-- とりあえず無限ループさせておいて Get #1, 読込位置, data_L '-- 左チャンネル16bit分のデータを読み込む 読込位置 = 読込位置 + Len(data_L) '-- ファイルポインタを進める Get #1, 読込位置, data_R '-- 右チャンネル16bit分のデータを読み込む 読込位置 = 読込位置 + Len(data_R) '-- ファイルポインタを進める 読込データ数 = 読込データ数 + 1 Write #2, data_L, data_R '-- CSVデータを書き込む If 読込データ数 >= 最大データ数 Then Exit Do '-- 条件満足でLoop脱出 End If Loop Close #1 Close #2 MsgBox ("end") End Sub 見ればわかる程度のソースコードなので、説明しませんが、バグ指摘大歓迎です。 2019/2/24追記
【手順】
1) MS Excelを起動、空白のブックを新規作成
2) 「表示」⇒「マクロ」を選択すると、下の画面が出るので、マクロ名に適当に文字を入力、「作成」をクリック
3) 下の画面が表示されるので、SubからEnd Subまで削除、空っぽにして、上のソースコードをコピペ
4) 「デバッグ」⇒「VBAProjectのコンパイル」をクリック
5) F5キーで実行します
6) 必要があれば、Sheetに起動ボタン用の図形を作り「マクロの登録」でリンクを張る
|
|
SSB発生の方式は
(1) フィルター方式 (2) PSN方式 (3) Weaver方式 以上の3種類あると思っていると、ときに第4の方式なるものを見つけることがあります。 過去の事例を調べると、どうも原理的なところと実装方式との区別がついていないように見受けられます。 トランジスタ技術2018/9月号に、「SSB_第4の方式」という記述があったので、読み解いてみました。 この方式のやってることは ① 12kHzで平衡変調 ② LPFで12kHz以下の成分を抽出 本質を見失わないため、実装方法は敢えて記さないことにします。 この方式の概要を、フィルター方式の代表格としてCollinsの32SシリーズのSSB発生方式と比較すると ① 変調周波数は、この方式の方が1.5桁ほど低い。 ② Collinsはバンドパスフィルタ(メカフィル)で不要サイドバンドを抑制している。 ①と②について、原理が異なるほどのことではなく、トラ技に掲載された方式は、フィルター方式であると結論付けることができます。 CQ出版社は、この方式を実験するための基板のキット:SDR-3を売るため、大げさな表現をしているように感じます。 SDR-3の掲示板があるので、下記投稿をしました。(スルーされるのは目に見えているのですが) 「Sharing 過去原稿「2018/02/13 SSB_第4の方式 トラ技2018/9月号、10月号 の元原稿」を読みました。 私にはフィルター方式にしか見えないのですが、新しい方式なのでしょうか?」 以上です。有識者のご意見を伺いたいところです。 (ちなみに、直近に投稿したヒルベルト変換装置を12kHzで変調した場合、同じ結果が得られる)
|
|
デジタルオーディオ用のICなどを使って無線機を作っています。
基板が余っていたので、もう一台組み立てました。
1号機との差は2点です。
①1.5kHzの変調周波数では動作しないので、3kHzから24kHzの四択に変更。
②DACは1個だけ実装、シングルエンド出力にした。
①はパターンをカットして、ジャンパー線で接続しました。
ブロックダイアグラムと動作条件です。
変調周波数を12kHzに設定して、1kHzの正弦波を入力した場合の波形
予定通り11kHzの2相信号であるが、あまり美しくない
この装置はPSN方式SSBジェネレータの代替として設計したのですが、たとえば3kHzで変調した場合は、音声スペクトラムが3kHzで反転するという副作用が生じます。
仮に2次変調装置でキャリアバランスが取りきれない場合、受信側で3kHzのビート音が発生するはずです。
これを解消するため、あらかじめスペクトラムを反転した信号を入力してやることで、この副作用が解消できそうです。
このために、1台目の出力を2台目に接続する作戦ですが、順序としては、
①.ローパスフィルタ 3kHz程度
②本装置1台目(ヒルベルト変換装置としてではなくスペクトラム反転装置として使用)
③ローパスフィルタ3kHz程度(ハイパスフィルタとして動作)
④本装置2台目
てなことを考えています。
実際に実験してみないとわからないかな?他の不具合が出そうかな?
ご訪問ありがとうございました。
|
|
デジタル・オーディオ用のICなどを使用して無線機を作っています。
プリント基板が納品されたので、組立にかかりました。
最初にクロック発生回路周辺の部品を取り付け、乾電池2本で動作を確認しました。
その後は一気に残りの部品を取り付けて完成です。
テスト中の画像です。
WaveGeneからMixerを経由、600Ω:600Ωのトランスでアイソレートしたあと、抵抗の先にLED2本を逆並列にしたリミッタを入れて測定しています。
パソコンのヘッドホン端子など、インピーダンスが低い回路からの信号を直接ADコンバータに入力すると、レベルオーバでICが破壊されることがあるようなので、注意が必要です。
変調周波数を3kHzに設定して、1kHzの正弦波を入力しました。
予定通り2kHzの90度位相差の出力波形が確認できましたが、LPFがまずくて、デジタルノイズが残っているようです。
どのみち位相差の調整はできないので、リサージュ表示などして位相差を確認する必要はありません。
この程度の確認で十分です。
変調周波数を1.5kHzに設定した場合は、動作しませんでした。
やはりICの定格を下回っているので、しょうがないですね。
プリント基板が余ったので1枚あたり500円程度で、お譲りします。
下記あてにメールください。
andre_5814アットマークyahoo.co.jp
電波法上の課題などありますので自己責任でお使いください。 ご訪問ありがとうございました。
|
[ すべて表示 ]


