⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fiter_design.m

📁 用自适应的方法设计FIR滤波器
💻 M
字号:
%用自适应方式设计FIR滤波器
%迭代因子全部取1

clear all
N=100;
fs=8000;
delta_f=fs/2/(N-1);
% f=[0:fs/2/(N-1):fs/2].';
f=[0:fs/2/(N):fs/2-fs/2/(N)].';
for i=1:length(f)
    A(i,1)=RequiredAmplitudeRespone(f(i));
end

M=33;%
PD=(M-1)/2;%相位延迟
omega=2*pi.*f./fs;
phi=-PD*omega;

% L-->信号长度
L=3032;
% x-->未乘以代价因子的输入信号矩阵
x=sin(2*pi*f./fs*[0:L-1]);
% A1-->无量纲的理想幅度值
A1=10.^(A./10);
% d-->未乘以代价因子的理想输出矩阵
d=A1*ones(1,L).*sin(2*pi*f./fs*[0:L-1]+phi*ones(1,L));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                    用LMS算法逼近理想值                                    %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
c=ones(N,1);
cc=c;

% mu-->步长
mu=2.5e-4;

% w-->权值,也即滤波器系数
w=0.*ones(M,1);
K=10;
N2=floor(2500/delta_f);%调整范围

%=============================================%
%                迭代                         %
%=============================================%

for i=1:L-M+1
    %================输入信号==================%
    x1=cc*ones(1,M).*x(:,i:i+M-1);
    x2=sum(x1).';
    %================期望信号==================%
    d1=cc.*d(:,i+(M-1));

    d2=sum(d1);
    y=w'*x2(M:-1:1);
    er(i)=d2-y;
    w((M+1)/2,1)=w((M+1)/2,1)+mu*er(i)*x2((M+1)/2,1);
    w(1:(M-1)/2,1)=w(1:(M-1)/2,1)+0.5*mu*er(i)*(x2(1:(M-1)/2,1)+x2(M:-1:(M+1)/2+1,1));
    w(M:-1:(M+1)/2+1,1)=w(1:(M-1)/2,1);
end
H=freqz(w,1,f,fs);
HH=abs(H)./max(abs(H));
Hphase=angle(H);
HRphase=phi./pi*180;
for i=1:length(HRphase)
    HRphase1(i,1)=WrapPhase(HRphase(i,1));
end
% Hphase1=UnWrap(Hphase);
subplot(211)
% plot(f,10*log10(abs(H)))
semilogx(f,10*log10(abs(H)))
hold on
semilogx(f,A,'rp')
% semilogx(f,10*log10(HH))
grid on
xlabel('Frequency / Hz');
ylabel('Amplitude respone /dB')

subplot(212)
plot(f,Hphase./pi*180)
% semilogx(f,Hphase)
hold on
plot(f,HRphase1,'rp')
grid on
xlabel('Frequency / Hz');
ylabel('Phase respone')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -