2010年8月26日木曜日

FMステレオチューナ: 測定してみた

ASUSの高性能サウンドカードXonar D2X入手を機に測定してみました。このカード、サウンドカードとしては割高ですが192kHz S/PDIF入出力に対応しています。
今回は、FPGA FMステレオチューナの光デジタル出力をサウンドカードの光入力に接続し、WaveSpectraで特性を観測します。チューナの入力ソースとしてはFM放送波、信号発生器、自作FMトランスミッタの3つとしました。なお、使用したFPGAソースはR1.3版です。


FM放送波
NHK-FMの時報です。放送局の電波を直接ではなく、CATVで83.5MHzに変換された信号を受信しました。チューナー内の高周波バンドパスフィルタは、この83.5MHzに調整しています。以後、信号発生器、自作FMトランスミッタも同じ周波数に合わせています。

時報での歪み率THDは約0.1%ですが、THD+Nは約2%と奮いません。つぎに無音時のデータでは、スペクトルの最大値は2.9Hzで-50dBとなっています。これは、放送波あるいはFM受信機の周波数ズレによりAFC追従範囲を越えDC領域のリークが出ているものと推定しています。このためTHD+Nが悪化しますが、アナログ出力ではDCはカットされるのでこの問題はないはずです。
次にS/Nですが、無音時のレベルがDCリーク問題でよくわかりませんので、カーソルでピークを探すと約-86dBです。通常は全帯域のRMS値で読みますが、この例のスペクトラムなら数dB悪い結果となるでしょうか。 そして、100%変調時のレベルが後述するFMトランスミッタの例より-7dBであるとすれば、差し引きでS/Nは79dB。実効上70dB程度を確保できていそうです。



時報



無音時



信号発生器
HP8657Aを使いました。ステレオSGではないので単なるモノラル受信でのデータです。モノラルですので変調度100%変調(周波数偏移±75kHz)としています。
2次、3次高調波は、HP8657A内蔵の低周波発振器の特性らしく、外付け低周波発振器を利用すればさらに良くなります。無変調時のRMS値と比較するとS/Nは約94dBです。低い周波数に大きめのノイズがあるのでA特性等の聴覚補正フィルタを併用すれば、みかけのS/Nがよりよく見えそうです。


1kHz 100%変調


無変調



FMトランスミッタ
ステレオSGの代わりに自作FMトランスミッタを使います。チューナあるいはトランスミッタのどちらの特性を測っているのかよくわからなくなりますが、少なくともそれぞれがよりよい性能を持っていることが類推できます。低周波信号源は、FMトランスミッタ内のROMデータを使っており、片チャンネルあたりの変調度は45%変調(周波数偏移±33.75kHz)相当としています。従って、モノラルモードでは90%変調相当のレベルとなっています。

ここで信号発生器でのRMSレベル値と比較すると 0.96dBの差となります。理論値(100%÷90% -> 0.92dB)と概ね一致していました。

さてモノラルモードの特性ですが、THD 0.06%、S/NはRMS値の比較で87dBでした。スペクトルを見るとトランスミッタのノイズ特性に”難あり”ですね。


モノラルモード 1kHz 90%変調




モノラルモード 無変調


ステレオモードの特性ですが、THD 0.004%、S/NはRMS値の比較で79dBでした。THDがモノラル時より良くなっているのは、ステレオパイロット信号が加わったことによるD/AあるいはA/Dコンバータでのディザリング効果の結果でしょうか???何だこりゃって感じです。
ところで、FPGA FMチューナの作者の方は、先日のハムフェアの展示でTHD 0.0015%を叩き出していました。 まだまだ修行が足りません。

ステレオモード 1kHz L:45%, R:45%, パイロット10%変調


ステレオモード 無音


セパレーションは、Lチャンネルのみを45%変調相当レベルとして、L・Rチャンネルのレベルを測定しました。RMS値の差を取ると55.6dB。FMチューナの設計値では70dB程度あることになっていますから、FMトランスミッタのどこかが悪いと言うことになります。

 ステレオモード 1kHz L:45%, パイロット10%変調(Lchを観測)


 ステレオモード 1kHz L:45%, パイロット10%変調(Rchを観測)

FMステレオチューナ: 操作表示部のAVRソース

前回に続き、操作表示部のAVRソースを掲載します。現状では、初期の機能を実装できておらず、プリセットボタンを押すと、所定の放送局に切り替わるだけでしかありません。はっきり言って未完成。本来なら公表できるシロモノではありませんが、ここは趣味のブログですので・・・。ちなみに初めてのAVRプログラムなので、ネット上のサンプルを断片的にコピペしてます。今、よく見たらvolatileの使い方を勘違いしていますね。なお、ロータリーエンコーダ周りはChaNさんのWeb資料を使わせて頂いています。



#include
#include

void sample_sw(void);
void LED_disp(void);
void led7seg(uint8_t num);
uint32_t bin2bcd(uint16_t n);

2010年8月23日月曜日

ハムフェア2010

8月21日、22日に東京ビックサイトで開催されたハムフェアに行ってきました。私はアマチュア無線をやってませんのでジャンク市目当てですが、年々意外感を感じる出物が少なくなっている気がします。そこは暑い夏の恒例行事ということで。さて、今年の成果は・・・

銅金具のジャンク、XGA対応という組み込み用液晶ディスプレイ、それに使えそうなアダプタ





スペーサ、テストピン、テレビ用2分配器、トリマポテンショメータに使えそうなSpectrolの調整用ドライバ、NP-SMBPコード、TrimbleのGPSアンテナ





Tekのオシロ用テストクリップ、ロジアナに使えそうなPOMONAのテストクリップ



これは秋葉原のエスエス無線でニキシー管時計用に購入。ちょっと小さ過ぎた。これを使うなら機能も簡略化しないと。このケース、ハモンド製品でタカチは取り扱いを終息させるようです。



これは秋月。AVRライタに使えるコネクタアセンブリ、リアルタイムクロックRTC-8564NB


あと、写真はありませんがFPGA FMチューナが今年も販売されていました。設計者の林氏に、当ブログを見たと仰る方がおられましたよと言われ、嬉しかったですね。
そのほか鉄道無線のデジタル信号を解析・表示させるハードウエアを展示している江戸前情報部が出展していました。その機器の表示部にノリタケのVFDが使われていて、とっても格好良かったです。出展者の方はかなり細かく説明して下さったうえ、わざわざ中身を開けて見せて頂きました。ありがとうございました。



2010年8月18日水曜日

今日のメモ - 8月18日

ホワイトスペース特区
テレビ放送用に割り当てられながら、(その地区では)使われていない周波数(ホワイトスペース)の活用方法について議論が進められています。その制度化に向けた「ホワイトスペース特区」の先行モデルとして全国11カ所で実験が行われます。TBSテレビの地上波3D放送と、テレビ2ch分の帯域を利用したNHKのスーパーハイビジョンの実験が目を引きます。


総務省 新たな電波の活用ビジョンに関する検討チーム

「ホワイトスペース特区」先行モデルの決定について


ミヤハンのお部屋
高解像度ワイド液晶ディスプレイ選びの記事が秀逸。わかりやすく、かつしっかりと書かれている。液晶ディスプレイの記事は、もちろん興味深いが、カラーマネージメントのための環境作り【照明編】に、高演色性蛍光灯についての記事が。知りたいことがたくさん書かれていた。


大石家(岐阜県多治見市)
厚切りチャーシューの中華そばで有名なお店、大石家。普通の中華そばでも分厚いチャーシューが3~4枚入ってる。チャーシュー入り麺 を頼むと、麺が見えなくなるくらいチャーシューが投入される。平日のお昼に訪れたら満員で少し待たされた。ここはいつ来ても繁盛してる。
地元民によると、最近では ぶっこ麺 という店が評判で、名古屋からもたくさんお客が来てるとのこと。


アキュフェーズの高級FMチューナ
アキュフェーズが高級FMチューナ T-1100を発売。デジタル式のFM復調方式を採用している。第一IFは9.216MHz、第二IFは3.072MHzとのこと。

2010年8月13日金曜日

FMステレオチューナ: FPGA基板と操作表示部との接続

FPGA FMステレオチューナのその後です。今からみると、コードの選定や配置に不満点がたくさんあります。手を入れたところとしては、まずプリアンプ。特にアンテナケーブルを接続していないときに異常発振気味だったので、とりあえずアンプICの部品面側に銅箔テープを貼り付け、両面基板チックにしてみました。また、電源基板の放熱板が触れないほどに熱くなるので、苦肉の策として薄い銅板で放熱板とケース本体を接続しました。これでも62度(周囲30度)まで上昇します。


 基板全景


 プリアンプ基板


 電源基板

 
そういえば、操作表示部とFPGA基板との接続について紹介していないことに気がつきました。2つの基板の間は4本の信号線(とアース線)で接続しています。
操作表示部 SCLK端子 → FPGA 10ピン(SCLKIN)
操作表示部 SD端子 → FPGA 17ピン(SDATAIN)
操作表示部 EN端子 → FPGA 28ピン(SENIN)
操作表示部 RD端子 → FPGA 30ピン(SDATAOUT)

次にFPGAのVHDLソースです。もともと受信周波数の設定値(定数)が書かれていた const.vhdを次のように書き換えています。ここでは操作表示部から渡されたシリアルデータをシリパラ変換し、const_out として上位のモジュールに渡します。あと、FPGAからIQ信号を操作表示部に渡そうとしているんですが、これは動作確認していません。ちなみに、このVHDLソースは、Verilogで書いたものをVrilog-VHDL translatorを利用して作成しました。私のVerilogソースがいい加減だったらしく、変換後のソースに手を入れる必要がありました。
・・・半年以上たつと、改めてソースを見ても何を書いていたんだか忘れてしまっていますね。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

entity const is

port(

        SCLKIN    : in  std_logic;    -- Serial Clock
        SDATAIN    : in  std_logic;    -- Serial Data
        SENIN    : in  std_logic;    -- Serial Data Enable
        IFIN    : in  std_logic_vector(17 downto 0);    -- IF(I)
        IFIN2    : in  std_logic_vector(17 downto 0);    -- IF(Q)
        OTR_LED    : in  std_logic;   
        ST_LED    : in  std_logic;  
        CLK        : in  std_logic;
        RST        : in  std_logic;
        SDATAOUT    : out std_logic;   
        const_out    : out std_logic_vector(27 downto 0));     -- Frequency Set

end;

architecture Behavioral of const is
    signal qr    : std_logic_vector(15 downto 0);
    signal spc_stat    : std_logic_vector(1 downto 0);
    signal SCLKIN2    : std_logic;
    signal SDATAIN2    : std_logic;
    signal SENIN2    : std_logic;
    signal qs    : std_logic_vector(31 downto 0);
    signal psc_stat    : std_logic_vector(1 downto 0);
    signal const_out_int: std_logic_vector(27 downto 0);

begin


    v2v_pr_0:process (CLK)
    begin
        if (CLK'event and CLK = '1') then
            if (RST = '1') then
                SCLKIN2 <= '0';
                SDATAIN2 <= '0';
                SENIN2  <= '0';
            else
                SCLKIN2  <= SCLKIN;
                SDATAIN2 <= SDATAIN;
                SENIN2 <= SENIN;
            end if;
        end if;
    end process;



    v2v_pr_1:process (CLK)
    begin
        if (CLK'event and CLK = '1') then

            if (RST = '1') then
                qr  <= "0000000000000000";
                spc_stat <= "00";
                const_out_int  <= X"119C71C";

            elsif (SENIN2 = '1') then

                if (spc_stat = "10") then
                    spc_stat  <= "00";
                end if;

                if (SCLKIN2 = '1') then
                    if (spc_stat = "00") then
                        qr <= qr(14 downto 0) & SDATAIN2;
                        spc_stat  <= "01";
                    end if;
                else
                    spc_stat <= "00";
                end if;

            else

                if (spc_stat = "00") then
                    if (qr = X"0000") then
                        const_out_int  <= X"119C71C";                        -- 82.5MHz
                    else
                        const_out_int  <= (qr & X"000");
                    end if;

                    spc_stat  <= "10";
                    qr <= "0000000000000000";

                end if;

            end if;

        end if;
    end process;

    const_out <= const_out_int;

    v2v_pr_2:process (CLK)
    begin
        if (CLK'event and CLK = '1') then
            if (RST = '1') then
                qs <= X"00000000";
                psc_stat <= "00";

            elsif (SENIN2 = '1') then

                if (SCLKIN2 = '1') then

                    if (psc_stat = "00") then
                        psc_stat   <= "10";
                    end if;

                    if (psc_stat = "01") then
                        qs   <= (qs(30 downto 0) & '0');
                        psc_stat  <= "10";

                    end if;

                else
                    if (psc_stat = "10") then
                        psc_stat  <= "01";
                    end if;

                end if;

            else

                if (psc_stat = "01") then
                    qs    <= (OTR_LED & ST_LED & IFIN(17 downto 3) & IFIN2(17 downto 3));
                    psc_stat <= "00";

                end if;

            end if;
        end if;
    end process;

    SDATAOUT <= qs(31);

end Behavioral;




const と上位モジュールとの接続(ispLEVERの例)



追加した入出力端子をユーザ制約に追加(ispLEVERの例)


次回は、AVRのソースを紹介します

2010年8月11日水曜日

放射温度計

放熱板やデバイスの温度測定には、サーミスタ式の温度計を使っていました。ところが対象物とセンサを密着させるのが不十分だと結果がばらついてどうにも信頼できません。そこで、ネット通販で放射温度計を手に入れました。なんとレーザーポインタ付きで5,000円以下。(あきばお~

ふつうレーザポインタ付きだともう少し値が張るんですが、お値打ちでした。しかも想像以上に質感も良く満足です。






2010年8月9日月曜日

今日のメモ - 8月9日

シグマシステムエンジニアリング
放送用の音声機器を製造している。中継用のポータブルミキサなどこの会社の製品なら”間違いない”そうだ。


きく宗(きくそう)
豊橋名物”菜めし田楽”の名店。豊橋駅近くにある。
きく宗


名古屋近郊の乗馬クラブ
意外に身近にあります。一度乗ってみたい。
愛知牧場(日進市)

愛知県森林公園(尾張旭市)

ARC空港乗馬倶楽部(西春日井郡豊山町)



仲庫市場(名古屋・大須)
1年以上前からあったそうだ。ぜんぜん気がつかなかった。中古PCや映像機器を扱うジャンク屋さん。仲庫市場

2010年8月8日日曜日

FMステレオチューナ: Lattice Diamond 設計ソフトウエア

久しぶりにFMステレオチューナに手を入れようとしています。前回の記事から半年たち、Latticeの設計ソフトウエアはispLEVERの後継のDiamondがダウンロードできるようになっています。もちろん無償版も提供されています。


Diamond設計ソフトウェアの紹介ページ


ファイルをダウンロード・インストール後、Diamond無償版ライセンス手続きページからVerilogあるいはVHDLのどちらかひとつを指定してライセンス申請します。Host  NICとは、PCのLANアダプタのMACアドレス(Physical Address)を記入します。これは、コマンドプロンプトで ipconfig /all して確認できます。


ライセンス取得手続き




 MACアドレス(Physical Address)を確認


2010年8月6日金曜日

DEGEN DE1103 MW/SW/FMラジオ

有名な”愛好者3号”を購入しました。この手のラジオは、ソニーのICF-2001D以来です。ネットでは音が悪いという評価も見かけますが、確かに歪みっぽく長時間の聴取にはしんどい印象を受けます。どこかでサチっているんですかね。とはいえ筐体サイズの割に低音は出るほうだと思いますし、モノは悪くないと思いたいです。
ただ、操作性はかなりクセがあります。ボリューム調整のためにVOLキーを押してボリューム調整モードに入ってからノブを回すなんて操作、まったく理解できません。周波数のファイン調整用につまみを付けるなら、そこにボリュームを割り当てるべきです。


パッケージの質感はパソコンパーツ風


イヤホン・ニッケル水素電池・ワイヤーアンテナ・中華風ソフトケースが付属


少々地味ですが質感良好


うら面


今回は、自作SDR受信機と短波ラジオの感度を比較する目的で購入しました。鉄筋コンクリート造りのウチのアパートはやっぱり電波環境が良くないことがわかりガッカリです。ある大学の先生が鉄筋が電波を遮へいすると仰っていましたが、こんなに影響しているとは驚きです。

2010年8月3日火曜日

LEDの明かり

高価なLED式タスクライトの購入をためらい、代わりにLED電球を購入してみました。

 シャープ LED電球 DL-L60AV


 LED電球(上)は 60W電球より少し長い

 
シャープのLED電球DL-L60AVは、色温度や明るさをリモコンで変えられるという他にはない機能を持っています。単品販売する電球にリモコンを付けるという発想は私にとって驚きです。一度セットしたら使わないと思うけど。


 付属のリモコン

シャープ - LED電球 DL-L60AV

さっそく電気スタンドに取り付けて試してみます。リモコンで色調パターン(色温度)を変えられます。中間色前後が良い感じです。昼白色~中間色は、蛍光灯と違和感なく、十分な明るさ。クールでシャープな光です。電球色は、白色+黄色な感じで、残念な印象。

結果として電気スタンドの電球型蛍光灯の交換用としては問題ありません。ただ、お勉強用にはぴったりだと思いますすがなぜか目にキツイ印象。寛げる光ではないように感じます。それに自分の好みじゃないんです。

じゃあ、何が好みなのか、店舗照明なんかに使われている低圧ハロゲンなんか好みかも。もちろん熱くて明るすぎて電気スタンドなんかには使えないでしょうが、同じ光をLEDで再現できないものでしょうか。ハロゲンランプメーカのカタログを見ていると12V用だけではなく100V用もあるんですね。色温度は3000~3200K程度のようです。

ウシオライティング - ハロゲンランプ
アカリセンター - ハロゲンランプ

さらに探してみると、業務用照明メーカ テス・ライティングが見つかります。Webには施工実績がいくつか紹介されています。中でも、装飾品販売のお店 east side tokyo - FLOWER & CRAFT - に行ってみたい。

電球・照明器具のオンラインショップ オール☆ライト