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.1.0
Repository https://github.com/AkiyukiOkayasu/gndless-filter-veryl
License MIT OR Apache-2.0

Modules

CicDecimator CIC間引きフィルタ
CicInterpolator CIC補間フィルタ
HalfbandInterpolator2x 2倍補間用の固定係数halfband FIR
HpfShiftSigned ビットシフトによる一次ハイパスフィルタ (符号付き版)。
HpfShiftUnsigned ビットシフトによる一次ハイパスフィルタ (符号なし版)。
HpfShiftVariableSigned 可変シフト量に対応したHPF (符号付き版)。
HpfShiftVariableUnsigned 可変シフト量に対応したHPF (符号なし版)。
LpfShiftSigned ビットシフトによる一次ローパスフィルタ (指数移動平均、符号付き版)
LpfShiftUnsigned ビットシフトによる一次ローパスフィルタ (符号なし版)
LpfShiftVariableSigned 可変シフト量に対応したLPF (符号付き版)
LpfShiftVariableUnsigned 可変シフト量に対応したLPF (符号なし版)

Modules


CicDecimator CIC間引きフィルタ
CicInterpolator CIC補間フィルタ
HalfbandInterpolator2x 2倍補間用の固定係数halfband FIR
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

2倍補間用の固定係数halfband FIR

COEFFICIENT_SETは1段目(103tap)または2段目(39tap)を選ぶ。 係数はQ2.(COEFFICIENT_WIDTH - 2)、入力と出力はQ1.(SAMPLE_WIDTH - 1)とする。 halfbandの対称性を使い、非ゼロ係数の対称tapを1回の積和へまとめる。 もう一方のpolyphaseは中心係数が1なので、遅延入力をそのまま出力する。

input_valid && input_readyで1入力を受理し、MAC完了後にeven、oddの順で2出力を生成する。 output_valid && !output_readyの間は同じpayloadを保持し、2出力目が受理されるまで次の入力を受け付けない。

Parameters


SAMPLE_WIDTH u32 入出力サンプルのビット幅
COEFFICIENT_WIDTH u32 係数のビット幅
ACCUMULATOR_WIDTH u32 MACアキュムレータのビット幅
COEFFICIENT_SET u32 使用する係数セット (1または2)

Ports


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

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