我正在研究一个 2 极 IIR 高通滤波器。过滤器是固定点,它给我带来了一些问题。我相信我只是误解了一些东西。我现在在 Octave 中实现所有东西,但最终它将在 32 位处理器中实现。转折频率非常低,.
当我通过传入一个脉冲然后对输出进行 fft 来测试滤波器时,我会根据脉冲的大小得到不同的结果。
首先,我使用带符号的 64 位整数制作了过滤器,仅用于测试。所以我输入过滤器的冲动看起来像这样:
Fs = 51200; %sample frequency
impulse = int64( [2^31, zeros(1,Fs*10-1)] ); %multiply by 10 to get 0.1 Hz resolution
这是定点脉冲响应与浮点脉冲响应的比较。
如果我重新运行代码但脉冲更大,我会得到所需的频率响应。
Fs = 51200; %sample frequency
impulse = int64( [2^63, zeros(1,Fs*10-1)] ); %multiply by 10 to get 0.1 Hz resolution
它们匹配得如此紧密,您几乎看不到红色的浮点响应。
为什么仅仅改变输入的幅度会有这种差异?
我需要以 32 位实现它,但是当我这样做时,输入的幅度被限制为所以我最终得到了失真的脉冲响应。我该如何解决这个问题或解决这个问题?