need to visualise this comb filter

14 ビュー (過去 30 日間)
Tom
Tom 2012 年 5 月 20 日
I need to visualise this schroeder comb filter - y_n=x_(n-tau)+g*y(n-tau). I have that the z-transfer function is H(z)=1/(z^tau - g).
I don't really know how to do this - any help would be greatly appreciated.
Many thanks
  1 件のコメント
Matt Fig
Matt Fig 2012 年 11 月 2 日
Tom's question
I need to visualise this schroeder comb filter - y_n=x_(n-tau)+g*y(n-tau). I have that the z-transfer function is H(z)=1/(z^tau - g).
I don't really know how to do this - any help would be greatly appreciated.
Many thanks

サインインしてコメントする。

採用された回答

Wayne King
Wayne King 2012 年 5 月 20 日
You can visualize it in pole-zero form, or the phase, magnitude etc, which evaluates it on the unit circle.
However, you should rewrite it in the form:
H(z) = z^{-\tau}/1-gz^{-\tau}
I'll assume tau = 3 here and g = 1/2. The actual value of g will determine whether the filter is stable and therefore whether it has a Fourier transform. The first element of the numerator, B, and denominator, A, coefficient vectors is the 0-th order term in the Z-transform.
g = 1/2;
B = [0 0 0 1];
A = [1 0 0 -g];
%pole-zero plot
zplane(B,A)
% magnitude and phase response
freqz(B,A)

その他の回答 (1 件)

Wayne King
Wayne King 2012 年 5 月 20 日
You have to know tau. In your example, tau is 1, just as long as that is correct. Also, the sign on g is incorrect and you don't need to feed freqz a frequency vector. Finally, h is complex-valued, so you want to plot the magnitude or phase.
fs = 11025;
g = 0.8;
b = [0 1];
a = [1 -g];
[h,f] = freqz(b,a,fs);
plot(f,abs(h)); grid on;
xlabel('Hz');
The b values are the coefficients on the x-side of the difference equation. The a's are the coefficients on the y-side
y(n)-g y(n-1) = x(n-tau)
1 and -g are the only nonzero a coefficients, 1 is the only nonzero b coefficient. To use freqz(), you want the power of z to be negative.

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by