2012年6月10日日曜日

FPGA FMトランスミッタ: 15kHzローパスフィルタ その1

FIR Compilerでつくるローパスフィルタ

バージョンが変わって、前回から設定画面が少し変わっています。
FIR Compilerでは、複数チャンネルを時分割で処理することができますが、うまく動かせなかったので左右2チャンネルを別々に処理してみました。(所要リソースが増えます)
※実際には、別途アップするFIR Compilerを使わない頂き物のコードを使うつもりです。



周波数特性


理論値と実測値を示します。実測値はCS4270コーデックのアナログ入出力端子間で測定しました。WaveSepectraの測定の都合上測定ダイナミックレンジが取れていません(実測値:阻止域)が、19kHzサイン波の比較では100dB程度の減衰量がありました。過剰なスペックかもしれませんね。

FIR Compilerの画面

周波数特性実測値(通過域)

周波数特性実測値(阻止域)

19kHzサイン波(ローパスフィルタ通さず)

19kHzサイン波(ローパスフィルタ挿入)


WaveSpectraで周波数特性測定の覚え書き

・WaveGeneのユーザ波形で周期スイープ信号を発生
・WaveSpectraでドライバ・録音デバイス・録音フォーマットをWaveGeneと一致させる
・WaveSpectraでFFTデータ数をWaveGeneと一致させる
・WaveSpectraで窓関数を なし(矩形) とする

96kHz以上のサンプルレートでは、波形が不安定で測定できない場合あり
(当方の環境ではダメでした)

WaveSpectraを用いた周波数特性の測定について
周期スイープを用いた周波数特性の測定について



FIR Compilerの設定








lpf15k コード

FIR Compiler出力の桁取りが良くわかっていません。実験的に設定を探りました。
なお、FIR Compilerが512クロック毎に出力データをアップデートしてくれるのでサンプリングパルス en は使っていません。


module lpf15k_cg(
l15k_l_i, l15k_r_i, l15k_l_o, l15k_r_o,
clk, en, reset, l15k_thru
);

input [23:0] l15k_l_i;
input [23:0] l15k_r_i;
output [23:0] l15k_l_o;
output [23:0] l15k_r_o;
input clk;
input en;
input reset;
input l15k_thru;

wire [43:0] dout_1, dout_2;

assign l15k_l_o = (l15k_thru) ? l15k_l_i : {dout_1[43], dout_1[35:13]};
assign l15k_r_o = (l15k_thru) ? l15k_r_i : {dout_2[43], dout_2[35:13]};

// FIR Compiler v5.0
lpf15k_coregen lpf15k_coregen (
.clk(clk),
// .rfd(ready_for_data),
// .rdy(ready),
.din_1(l15k_l_i[23:6]), // input [17 : 0] din_1
.din_2(l15k_r_i[23:6]), // input [17 : 0] din_2
.dout_1(dout_1), // output [43 : 0] dout_1
.dout_2(dout_2)); // output [43 : 0] dout_2

endmodule




フィルタ係数 COEファイル


・タップ数: 256
・入出力サンプルレート: 152kHz
・通過域: 0~15kHz
・阻止域: 19kHz~

この係数ファイルは頂き物です。(JA2SVZ様ありがとうございます)


radix=2;
coefdata=
000000000000000001,
000000000000000001,
000000000000000000,
111111111111111111,
111111111111111110,
111111111111111101,
111111111111111110,
000000000000000000,

000000000000000011,
000000000000000101,
000000000000000101,
000000000000000001,
111111111111111100,
111111111111110111,
111111111111110110,
111111111111111010,
000000000000000010,
000000000000001100,
000000000000010010,
000000000000001111,
000000000000000011,
111111111111110011,
111111111111100101,
111111111111100011,
111111111111110000,
000000000000001001,
000000000000100010,
000000000000101111,
000000000000100101,
000000000000000110,
111111111111011101,
111111111110111110,
111111111110111100,
111111111111011101,
000000000000011000,
000000000001010000,
000000000001101010,
000000000001010000,
000000000000001000,
111111111110101111,
111111111101110001,
111111111101110010,
111111111110111110,
000000000000111000,
000000000010101010,
000000000011010101,
000000000010011010,
000000000000000101,
111111111101011000,
111111111011100110,
111111111011110101,
111111111110001110,
000000000001111001,
000000000101000111,
000000000110001011,
000000000100001110,
111111111111110111,
111111111010111110,
111111110111111111,
111111111000101100,
111111111101001101,
000000000011101110,
000000001001001011,
000000001010101011,
000000000110111100,
111111111111010000,
111111110110111111,
111111110010010010,
111111110011111101,
111111111011111010,
000000000110110110,
000000001111100111,
000000010001100001,
000000001010110100,
111111111101111011,
111111110000101000,
111111101001100110,
111111101101000010,
111111111010011000,
000000001100000000,
000000011001011111,
000000011011101010,
000000010000001011,
111111111011011000,
111111100110101100,
111111011100100001,
111111100011000010,
111111111000101111,
000000010100010111,
000000101000101011,
000000101010101111,
000000010111101001,
111111110110101101,
111111010110111110,
111111001000011100,
111111010100001100,
111111110111001000,
000000100010010000,
000001000000111000,
000001000010010011,
000000100010101000,
111111101110000010,
111110111100100000,
111110100111001101,
111110111100000110,
111111110101101110,
000000111011100110,
000001101100001011,
000001101100010100,
000000110101100010,
111111011011111010,
111110000111101110,
111101100100010001,
111110001011000101,
111111110100101010,
000001110110111110,
000011010100010010,
000011010101100100,
000001100110001101,
111110100100011110,
111011011110001010,
111001111000010000,
111011001001001101,
111111110100000110,
000111010011100101,
001111111110010110,
010111100101010000,
011100000001011001,
011100000001011001,
010111100101010000,
001111111110010110,
000111010011100101,
111111110100000110,
111011001001001101,
111001111000010000,
111011011110001010,
111110100100011110,
000001100110001101,
000011010101100100,
000011010100010010,
000001110110111110,
111111110100101010,
111110001011000101,
111101100100010001,
111110000111101110,
111111011011111010,
000000110101100010,
000001101100010100,
000001101100001011,
000000111011100110,
111111110101101110,
111110111100000110,
111110100111001101,
111110111100100000,
111111101110000010,
000000100010101000,
000001000010010011,
000001000000111000,
000000100010010000,
111111110111001000,
111111010100001100,
111111001000011100,
111111010110111110,
111111110110101101,
000000010111101001,
000000101010101111,
000000101000101011,
000000010100010111,
111111111000101111,
111111100011000010,
111111011100100001,
111111100110101100,
111111111011011000,
000000010000001011,
000000011011101010,
000000011001011111,
000000001100000000,
111111111010011000,
111111101101000010,
111111101001100110,
111111110000101000,
111111111101111011,
000000001010110100,
000000010001100001,
000000001111100111,
000000000110110110,
111111111011111010,
111111110011111101,
111111110010010010,
111111110110111111,
111111111111010000,
000000000110111100,
000000001010101011,
000000001001001011,
000000000011101110,
111111111101001101,
111111111000101100,
111111110111111111,
111111111010111110,
111111111111110111,
000000000100001110,
000000000110001011,
000000000101000111,
000000000001111001,
111111111110001110,
111111111011110101,
111111111011100110,
111111111101011000,
000000000000000101,
000000000010011010,
000000000011010101,
000000000010101010,
000000000000111000,
111111111110111110,
111111111101110010,
111111111101110001,
111111111110101111,
000000000000001000,
000000000001010000,
000000000001101010,
000000000001010000,
000000000000011000,
111111111111011101,
111111111110111100,
111111111110111110,
111111111111011101,
000000000000000110,
000000000000100101,
000000000000101111,
000000000000100010,
000000000000001001,
111111111111110000,
111111111111100011,
111111111111100101,
111111111111110011,
000000000000000011,
000000000000001111,
000000000000010010,
000000000000001100,
000000000000000010,
111111111111111010,
111111111111110110,
111111111111110111,
111111111111111100,
000000000000000001,
000000000000000101,
000000000000000101,
000000000000000011,
000000000000000000,
111111111111111110,
111111111111111101,
111111111111111110,
111111111111111111,
000000000000000000,
000000000000000001,
000000000000000001;

0 件のコメント:

コメントを投稿