Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于MATLAB的噪声抵消滤波器_Matlab_Filter_Signals_Noise - Fatal编程技术网

基于MATLAB的噪声抵消滤波器

基于MATLAB的噪声抵消滤波器,matlab,filter,signals,noise,Matlab,Filter,Signals,Noise,我有一个输入信号: 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] = 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函数,只做了一个向量,在0处有1,在其他地方有0,但这也不起作用。我哪里出错了?谢谢你的关注

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)

你确定你在做你想做的事吗?狄拉克(n)在你的数字中插入了一个INF。我知道diracs是这样的,不确定Matlab是否正确处理了它。y应该是什么?H是回音还是系统的回音行为?如果是行为(因为它更有意义),y是声音后的回声。它有意义吗?还有,你为什么不在拉普拉斯空间工作?在我看来,这样做比较好。