我正在尝试使用 Butter 值过滤器过滤短音频文件,然后使用 Butter.m 给出的系数递归求解差分方程的函数。
我的代码如下。
[x,Fs]=wavread('bugsbunny1');
wn=2500/(Fs/2);
n=10;
[B,A]=butter(n,wn);
C=zeros(1,10);
for n=2:10
C(n-1)=-A(n); %rearrange A for the recur function
end
A=C;
x=x'; % make x a row vector
n=11:length(x);
y0=zeros(1,11);
x0=zeros(1,11);
y1=recur(A,B,n,x,x0,y0); %calculate approximation recursively
y1=[y0 y1]; %add initial conditions to vector
这样做会导致 y1 是由“NaN”给出的无效数据矩阵,感谢您的帮助。
递归函数的代码:
function [ y ] = recur(a,b,n,x,x0,y0)
%Use Recursion to approximate solution to first order differential equation
% Detailed explanation goes here
N=length(a);
M=length(b)-1;
y=[y0 zeros(1,length(n))];
x=[x0 x];
a1=a(length(a):-1:1);
b1=b(length(b):-1:1);
for i=N+1:N+length(n),
y(i)=-a1*y(i-N:i-1)'+b1*x(i-N:i-N+M)';
end
y=y(N+1:N+length(n));