Matlab 如何过滤信号?
我需要通过我设计的模拟低通滤波器对时域简单信号进行滤波。我需要时域的输出信号Matlab 如何过滤信号?,matlab,filter,Matlab,Filter,我需要通过我设计的模拟低通滤波器对时域简单信号进行滤波。我需要时域的输出信号 %LPF order=3; ripple = 1; %pass band ripple f_c= 22e6; [num1, den1] = cheby1(order, ripple, 2*pi*1.10*f_c, 'low', 's'); %Create input signal Fs=200e6; Ts=1/Fs; NFFT=2^12; Runtime=(NFFT-1)*Ts; t=0:Ts:Runt
%LPF
order=3;
ripple = 1; %pass band ripple
f_c= 22e6;
[num1, den1] = cheby1(order, ripple, 2*pi*1.10*f_c, 'low', 's');
%Create input signal
Fs=200e6;
Ts=1/Fs;
NFFT=2^12;
Runtime=(NFFT-1)*Ts;
t=0:Ts:Runtime
a_in=1;
phase_in=0;
y_in=a_in*sin(2*pi*fin*t+phase_in); % 4096 points
我需要输出信号
y_out
在4096点的时域内。我需要做什么 我认为您必须使用信号处理工具箱的filter()
功能。它将滤波器系数和要滤波的信号作为参数:
y = filter(b,a,x)
其中,b
是分子系数,a
是分母,x
是要滤波的信号。输出向量通常与输入向量大小相同,因此,由于您的输入是4096个样本,因此您的输出也将是4096个样本。更多信息
因此,在你的情况下:
y_out = filter(num1, den1, y_in)
我认为您必须使用信号处理工具箱的
filter()
功能。它将滤波器系数和要滤波的信号作为参数:
y = filter(b,a,x)
其中,b
是分子系数,a
是分母,x
是要滤波的信号。输出向量通常与输入向量大小相同,因此,由于您的输入是4096个样本,因此您的输出也将是4096个样本。更多信息
因此,在你的情况下:
y_out = filter(num1, den1, y_in)
谢谢你的回复。我已经试过了。。但是我得到了NaN值,我还认为我可以得到滤波器的脉冲响应:sys=tf(num1,den1);ss=脉冲(sys);ss=ss/最大值(ss);我不知道怎么做卷积,我也不知道之后的结果。。。如何调整点数?f_in=20e6。。。输入频率嘿,我试过zpk方法。。它仍然是相同的[z,p,k]=cheby1(顺序,涟漪,2*pi*1.10*f_c,'low','s');[nd]=zp2tf(z,p,k);y_out=过滤器(n,d,y_in);其他想法?
cheby1(…,'s')
为您提供了一个模拟滤波器。要过滤数字信号,您需要一个数字滤波器,因此您可以/需要使用双线性
Matlab函数将模拟滤波器转换为数字滤波器(在您的例子中:[z,p,k]=双线性(z,p,k,Fs);[b,a]=zp2tf(z,p,k);滤波器(b,a,y_in)
)。之后,过滤器功能也应按预期工作。模拟滤波器通常用硬件实现,或者用NI Multisim之类的软件模拟。谢谢你的回复。我已经试过了。。但是我得到了NaN值,我还认为我可以得到滤波器的脉冲响应:sys=tf(num1,den1);ss=脉冲(sys);ss=ss/最大值(ss);我不知道怎么做卷积,我也不知道之后的结果。。。如何调整点数?f_in=20e6。。。输入频率嘿,我试过zpk方法。。它仍然是相同的[z,p,k]=cheby1(顺序,涟漪,2*pi*1.10*f_c,'low','s');[nd]=zp2tf(z,p,k);y_out=过滤器(n,d,y_in);其他想法?cheby1(…,'s')
为您提供了一个模拟滤波器。要过滤数字信号,您需要一个数字滤波器,因此您可以/需要使用双线性
Matlab函数将模拟滤波器转换为数字滤波器(在您的例子中:[z,p,k]=双线性(z,p,k,Fs);[b,a]=zp2tf(z,p,k);滤波器(b,a,y_in)
)。之后,过滤器功能也应按预期工作。模拟滤波器通常用硬件实现,或者用NI Multisim之类的软件模拟。这是一个模拟滤波器。。使用'freqs'功能我的错,跳过了's',你是对的,这是一个模拟过滤器。。使用“freqs”功能我的错,跳过了“s”,你是对的