📄 mine.asv
字号:
function v=minE(yn,dn,k)
%实现时域最小平方误差逆滤波器;
%yn为受干扰信号;
%dn为理想输出信号;
%M为分子系数的个数;
%N为分母系数的个数;
%Ryy为输入信号的自相关矩阵;
%Ryd为输入信号和理想输出信号的互相关矩阵;
M=length(yn); %计算输入信号的长度
N=length(dn); %计算理想输出信号的长度
if M==N
dn1=[dn 0 0 0];
N=N+3;
else
dn1=dn;
end
Ryy=selfcorr(yn,N); %调用自相关矩阵函数
Ryd=intcorr(yn,dn1,N); %调用互相关矩阵函数
h=Ryy\Ryd; %得到中间h(n)
if k>M+N %检验要求项数合理与否
disp('请检查输入的期望输出项数k是否合理。');
else if k/2>M
k1=M;
k2=N-M;
else
[k1,k2]=optimizek(k); %优化分母、分子项数
end
end
h1=Toeplitz1(h,k1,k2); %得到h1
h2=Toeplitz2(h,k1,k2); %得到h2
a=h1\h2; %得到分母系数;
b=numerator(h,a',k1); %得到分子系数;
a=[1 a'];
disp('分子系数为:');
num=b
disp('分母系数为:');
den=a
[C A B]=dir2cas(b,a);
[r p k]=residuez(b,a); %计算极点
yn1=[yn 0 0 0 0 0];
v=filter(b,a,yn1); %求输出序列
figure(1)
subplot(2,1,1);stem(dn,'b','.');
subplot(2,1,2);stem(v,'r','x');
title('蓝色表示理想输出,红色表示时域最小平方逼近');
figure(2)
m=length(dn);
v1=v(1:1:m);
xn=v1-dn;
energy(xn);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -