Matlab 使用Butterworth filter和recur函数过滤音频文件。

Matlab 使用Butterworth filter和recur函数过滤音频文件。,matlab,signal-processing,Matlab,Signal Processing,我试着用一个Butter-worth过滤器过滤一个短音频文件,然后用一个函数递归地用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';

我试着用一个Butter-worth过滤器过滤一个短音频文件,然后用一个函数递归地用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));

为什么要使用递归而不是“过滤”功能?对于NaN,我会检查您的数据在过滤过程中是否发散。这是一个课堂练习,说明我们必须使用递归函数。数据在大约第1000个元素处变为NaN。