Veryl registryAkiyukiOkayasu/gndless-filter-veryl · gndless_filterSource ↗

Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

gndless_filter

Audio-rate CIC, halfband, and shift-based filters for Veryl.

Version 0.2.0
Repository https://github.com/AkiyukiOkayasu/gndless-filter-veryl
License MIT OR Apache-2.0

Modules

CicDecimator CIC間引きフィルタ
CicInterpolator CIC補間フィルタ
HalfbandInterpolator2x::<FORMAT> format付きvalue interfaceを使う2倍halfband補間器
HpfShiftSigned ビットシフトによる一次ハイパスフィルタ (符号付き版)。
HpfShiftUnsigned ビットシフトによる一次ハイパスフィルタ (符号なし版)。
HpfShiftVariableSigned 可変シフト量に対応したHPF (符号付き版)。
HpfShiftVariableUnsigned 可変シフト量に対応したHPF (符号なし版)。
LpfShiftSigned ビットシフトによる一次ローパスフィルタ (指数移動平均、符号付き版)
LpfShiftUnsigned ビットシフトによる一次ローパスフィルタ (符号なし版)
LpfShiftVariableSigned 可変シフト量に対応したLPF (符号付き版)
LpfShiftVariableUnsigned 可変シフト量に対応したLPF (符号なし版)

Modules


CicDecimator CIC間引きフィルタ
CicInterpolator CIC補間フィルタ
HalfbandInterpolator2x::<FORMAT> format付きvalue interfaceを使う2倍halfband補間器
HpfShiftSigned ビットシフトによる一次ハイパスフィルタ (符号付き版)。
HpfShiftUnsigned ビットシフトによる一次ハイパスフィルタ (符号なし版)。
HpfShiftVariableSigned 可変シフト量に対応したHPF (符号付き版)。
HpfShiftVariableUnsigned 可変シフト量に対応したHPF (符号なし版)。
LpfShiftSigned ビットシフトによる一次ローパスフィルタ (指数移動平均、符号付き版)
LpfShiftUnsigned ビットシフトによる一次ローパスフィルタ (符号なし版)
LpfShiftVariableSigned 可変シフト量に対応したLPF (符号付き版)
LpfShiftVariableUnsigned 可変シフト量に対応したLPF (符号なし版)

CicDecimator

CIC間引きフィルタ

入力側でSTAGES段の積分器を毎input_valid時に更新し、DECIMATION個ごとにSTAGES段の櫛形フィルタを通して出力する。 出力にはCIC固有のゲイン DECIMATION^STAGES が含まれる。

Parameters


INPUT_WIDTH u32 入力サンプルのビット幅
ACCUMULATOR_WIDTH u32 積分器・出力のビット幅
STAGES u32 積分器と櫛形フィルタの段数
DECIMATION u32 間引き比

Ports


clk input clock システムクロック
rst input reset リセット
input_valid input bbool 入力サンプル有効
input_sample input signedlogic 入力サンプル
output_valid output bbool 出力サンプル有効
output_sample output signedlogic 間引き後の出力サンプル

CicInterpolator

CIC補間フィルタ

入力サンプルをSTAGES段の櫛形フィルタへ通し、その結果をINTERPOLATION倍のゼロ挿入列としてSTAGES段の積分器へ入力する。 output_validは動作中、クロックごとにHighになる。 定常ゲインの補正は行わないため、倍率と段数に応じたスケーリングは利用側で行う。 通過帯域のdroop補正もこのモジュールの責務外とする。

1入力をinput_valid && input_readyで受理すると、INTERPOLATION個の出力を連続生成する。 burst最終cycleではinput_readyもHighとなるため、次入力を同時受理すればoutput_validを途切れさせず次burstへ移れる。

Parameters


INPUT_WIDTH u32 入力サンプルのビット幅
ACCUMULATOR_WIDTH u32 積分器・出力のビット幅
STAGES u32 積分器と櫛形フィルタの段数
INTERPOLATION u32 補間比

Ports


clk input clock システムクロック
rst input reset リセット
input_valid input bbool 入力サンプル有効
input_ready output logic 入力受理可能
input_sample input signedlogic 入力サンプル
output_valid output bbool 出力サンプル有効
output_sample output signedlogic 補間後の出力サンプル

HalfbandInterpolator2x::<FORMAT>

format付きvalue interfaceを使う2倍halfband補間器

FORMATはsample幅と小数部位置を一体で指定する。既定のQ2.23はASRC処理中の1bit headroomを確保し、係数Q2.16との最初の積を26x18に保つ

Generic Parameters


FORMAT gndless_fixedpoint SignedFixedPointFormat

Parameters


COEFFICIENT_SET u32 使用する係数セット (1または2)

Ports


clk input clock
rst input reset
input_valid input bbool
input_ready output bbool
input_sample modport gndless_fixedpoint FixedPointValue input_port
output_valid output bbool
output_ready input bbool
output_sample modport gndless_fixedpoint FixedPointValue output_port

HpfShiftSigned

ビットシフトによる一次ハイパスフィルタ (符号付き版)。 LPFの出力を入力から減算してHPFを構成: y[n] = x[n] - lpf[n]。 内部でLpfShiftSignedをインスタンスして使用する。

カットオフ周波数の近似: fc ≈ fs / (2π * 2^SHIFT)。 例: fs=48kHz, SHIFT=8 → fc ≈ 30Hz。

SHIFT値が大きいほどカットオフ周波数が低くなり、より多くの低域を通過させる

Parameters


DATA_WIDTH u32 入出力データ幅
SHIFT u32 シフト量 (1以上)。大きいほど低いカットオフ周波数

Ports


clk input clock システムクロック
rst input reset リセット (出力を0に初期化)
enable input bbool イネーブル信号 (trueでフィルタ更新)
x input signedlogic 入力サンプル (符号付き)
y output signedlogic フィルタ出力 (符号付き)

HpfShiftUnsigned

ビットシフトによる一次ハイパスフィルタ (符号なし版)。 LPFの出力を入力から減算してHPFを構成: y[n] = x[n] - lpf[n]。 内部でLpfShiftUnsignedをインスタンスして使用する。

カットオフ周波数の近似: fc ≈ fs / (2π * 2^SHIFT)。

注意: x < lpf_outの場合、出力はラップアラウンド

Parameters


DATA_WIDTH u32 入出力データ幅
SHIFT u32 シフト量 (1以上)。大きいほど低いカットオフ周波数

Ports


clk input clock システムクロック
rst input reset リセット (出力を0に初期化)
enable input bbool イネーブル信号 (trueでフィルタ更新)
x input logic 入力サンプル (符号なし)
y output logic フィルタ出力 (符号なし)

HpfShiftVariableSigned

可変シフト量に対応したHPF (符号付き版)。 実行時にシフト量を変更できる。

伝達関数: y[n] = x[n] - lpf[n]。 ここで lpf[n] = lpf[n-1] + (x[n] - lpf[n-1]) >> shift。

Parameters


DATA_WIDTH u32 入出力データ幅
MAX_SHIFT u32 最大シフト量
SHIFT_BITS u32 シフト量を表現するビット数

Ports


clk input clock システムクロック
rst input reset リセット (出力を0に初期化)
enable input bbool イネーブル信号 (trueでフィルタ更新)
shift input logic シフト量 (1 ~ MAX_SHIFT)
x input signedlogic 入力サンプル (符号付き)
y output signedlogic フィルタ出力 (符号付き)

HpfShiftVariableUnsigned

可変シフト量に対応したHPF (符号なし版)。 実行時にシフト量を変更できる。

伝達関数: y[n] = x[n] - lpf[n]。 ここで lpf[n] = lpf[n-1] + (x[n] - lpf[n-1]) >> shift。

注意: x < lpf_outの場合、出力はラップアラウンド

Parameters


DATA_WIDTH u32 入出力データ幅
MAX_SHIFT u32 最大シフト量
SHIFT_BITS u32 シフト量を表現するビット数

Ports


clk input clock システムクロック
rst input reset リセット (出力を0に初期化)
enable input bbool イネーブル信号 (trueでフィルタ更新)
shift input logic シフト量 (1 ~ MAX_SHIFT)
x input logic 入力サンプル (符号なし)
y output logic フィルタ出力 (符号なし)

LpfShiftSigned

ビットシフトによる一次ローパスフィルタ (指数移動平均、符号付き版) 乗算器を使用せず、シフト演算のみで実装

伝達関数: y[n] = y[n-1] + (x[n] - y[n-1]) >> SHIFT

カットオフ周波数の近似: fc ≈ fs / (2π * 2^SHIFT) 例: fs=48kHz, SHIFT=8 → fc ≈ 30Hz

SHIFT値が大きいほどカットオフ周波数が低くなり、より滑らかに補間される。 SHIFTはDATA_WIDTHより大きくても問題ない。

Parameters


DATA_WIDTH u32 入出力データ幅
SHIFT u32 シフト量 (1以上)。大きいほど低いカットオフ周波数

Ports


clk input clock システムクロック
rst input reset リセット (出力を0に初期化)
enable input bbool イネーブル信号 (trueでフィルタ更新)
x input signedlogic 入力サンプル (符号付き)
y output signedlogic フィルタ出力 (符号付き)

LpfShiftUnsigned

ビットシフトによる一次ローパスフィルタ (符号なし版) 乗算器を使用せず、シフト演算のみで実装

伝達関数: y[n] = y[n-1] + (x[n] - y[n-1]) >> SHIFT

カットオフ周波数の近似: fc ≈ fs / (2π * 2^SHIFT) 例: fs=48kHz, SHIFT=8 → fc ≈ 30Hz

SHIFT値が大きいほどカットオフ周波数が低くなり、より滑らかに補間される。 SHIFTはDATA_WIDTHより大きくても問題ない。

Parameters


DATA_WIDTH u32 入出力データ幅
SHIFT u32 シフト量 (1以上)。大きいほど低いカットオフ周波数

Ports


clk input clock システムクロック
rst input reset リセット (出力を0に初期化)
enable input bbool イネーブル信号 (trueでフィルタ更新)
x input logic 入力サンプル (符号なし)
y output logic フィルタ出力 (符号なし)

LpfShiftVariableSigned

可変シフト量に対応したLPF (符号付き版) 実行時にシフト量を変更可能

伝達関数: y[n] = y[n-1] + (x[n] - y[n-1]) >> shift

MAX_SHIFTはDATA_WIDTHより大きくても問題ない。

Parameters


DATA_WIDTH u32 入出力データ幅
MAX_SHIFT u32 最大シフト量
SHIFT_BITS u32 シフト量を表現するビット数

Ports


clk input clock システムクロック
rst input reset リセット (出力を0に初期化)
enable input bbool イネーブル信号 (trueでフィルタ更新)
shift input logic シフト量 (1 ~ MAX_SHIFT)
x input signedlogic 入力サンプル (符号付き)
y output signedlogic フィルタ出力 (符号付き)

LpfShiftVariableUnsigned

可変シフト量に対応したLPF (符号なし版) 実行時にシフト量を変更可能

伝達関数: y[n] = y[n-1] + (x[n] - y[n-1]) >> shift

MAX_SHIFTはDATA_WIDTHより大きくても問題ない。

Parameters


DATA_WIDTH u32 入出力データ幅
MAX_SHIFT u32 最大シフト量
SHIFT_BITS u32 シフト量を表現するビット数

Ports


clk input clock システムクロック
rst input reset リセット (出力を0に初期化)
enable input bbool イネーブル信号 (trueでフィルタ更新)
shift input logic シフト量 (1 ~ MAX_SHIFT)
x input logic 入力サンプル (符号なし)
y output logic フィルタ出力 (符号なし)

Module Prototypes


Interfaces


Packages