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

Shift-based first-order LPF/HPF filters (1:1 rate) for Veryl.

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

Modules

HpfShiftSigned ビットシフトによる一次ハイパスフィルタ (符号付き版)。
HpfShiftUnsigned ビットシフトによる一次ハイパスフィルタ (符号なし版)。
HpfShiftVariableSigned 可変シフト量に対応したHPF (符号付き版)。
HpfShiftVariableUnsigned 可変シフト量に対応したHPF (符号なし版)。
LpfShiftSigned ビットシフトによる一次ローパスフィルタ (指数移動平均、符号付き版)
LpfShiftUnsigned ビットシフトによる一次ローパスフィルタ (符号なし版)
LpfShiftVariableSigned 可変シフト量に対応したLPF (符号付き版)
LpfShiftVariableUnsigned 可変シフト量に対応したLPF (符号なし版)
SoftFade::<FORMAT> dutyディザによる線形フェードイン(ソフトミュート)モジュール

Modules


HpfShiftSigned ビットシフトによる一次ハイパスフィルタ (符号付き版)。
HpfShiftUnsigned ビットシフトによる一次ハイパスフィルタ (符号なし版)。
HpfShiftVariableSigned 可変シフト量に対応したHPF (符号付き版)。
HpfShiftVariableUnsigned 可変シフト量に対応したHPF (符号なし版)。
LpfShiftSigned ビットシフトによる一次ローパスフィルタ (指数移動平均、符号付き版)
LpfShiftUnsigned ビットシフトによる一次ローパスフィルタ (符号なし版)
LpfShiftVariableSigned 可変シフト量に対応したLPF (符号付き版)
LpfShiftVariableUnsigned 可変シフト量に対応したLPF (符号なし版)
SoftFade::<FORMAT> dutyディザによる線形フェードイン(ソフトミュート)モジュール

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 フィルタ出力 (符号なし)

SoftFade::<FORMAT>

dutyディザによる線形フェードイン(ソフトミュート)モジュール

fade_inがLowの間は出力を0に保持する。Highへ立ち上げると、窓内位置 fade_posがduty(fade_duty)未満の間だけ入力を通過させ、平均ゲインを duty/窓で線形に0→1へ増加させる。乗算器を使わないためDSP資源を消費しない。 通過/遮断のトグル周波数は clk/WINDOW で、PWMノイズは帯域外になる。

フェード時間は WINDOW * WINDOW / FADE_STEP クロック。 例: clk=50MHz, WINDOW=1024, FADE_STEP=2 → 約10.5ms。

Generic Parameters


FORMAT gndless_fixedpoint SignedFixedPointFormat

Parameters


CHANNELS u32 チャンネル数
WINDOW u32 ディザ窓長(クロック)。トグル周波数 = clk/WINDOW
FADE_STEP u32 窓あたりのduty増分。duty最大はWINDOW

Ports


clk input clock システムクロック
rst input reset リセット
fade_in input bbool フェード制御 (Lowで出力0、Highでフェードイン)
x modport gndless_fixedpoint FixedPointValue input_port [CHANNELS] 入力
y modport gndless_fixedpoint FixedPointValue output_port [CHANNELS] 出力

Module Prototypes


Interfaces


Packages