我有一个输入信号:
x[n] = sin(pi/10*n) * (u[n] - u[n-10])
和脉冲响应:
h[n] = 0.9^n * u[n] + delta(n)
代表系统的回声。所以我正在尝试设计一个回声消除滤波器,但它似乎并不正确。我想我在使用 delta 函数时犯了一个错误。无论如何,我找到了 DTFT,它是倒数,然后是 IDTFT:
g[n] = dirac[n] - 1/2(0.45^n u[n])
所以如果我卷积y[n] = x[n] * h[n],然后卷积v[n] = y[n] * g[n],我不应该得到我的原始信号x[n] ? 我也尝试不使用 dirac delta 函数,只是在其他地方创建了一个 1 为零和零的向量,但这也不起作用。我哪里做错了?感谢您的关注
MATLAB 代码:
n = -10:0.1:10;
% input signal
x = sin(pi/10 * n) .* (heaviside(n) - heaviside(n-10));
% echo
h = 0.9 .^ n .* heaviside(n) + dirac(n);
% echo cancelation
g = dirac(n) - 0.5 * (0.45.^n) .* heaviside(n);
% convolutions
y = conv(x,h);
v = conv(y,g);
% plots
figure(1)
stem(x)
figure(2)
stem(y)
figure(3)
stem(v)