问题描述
我在 MATLAB 中使用下面的代码设计了一个 Parks-Mcclellan 滤波器----
我想创建上面提到的信号 (x(n)),然后通过这个过滤器检查输出。但我不确定如何生成信号,然后如何通过 matlab 中的滤波器。
clc; clear all; close all;
wp =0.36;
ws =0.4;
Rp =0.1;
As = 40;
delta1 = (10^(Rp/20)-1)/(10^(Rp/20)+1);
delta2 = (1+delta1)*10^(-As/20);
f = [wp ws];
m =[1 0];
DEV =[delta1 delta2];
[M F0 A0 W0]=firpmord(f,m,DEV);
h = firpm(M,F0,A0,W0);
[H,W]= freqz(h,1);
plot(W/pi,20*log10(abs(H)))
grid minor
解决方法
信号处理工具箱和filter()
函数
要声明信号,x[n]
可以根据 n
创建一个向量,范围从 0
到 499
。在 x[n]
.*
等式中使用逐元素乘法将允许您评估 n
的每个点/值的函数。
如果您安装了信号处理工具箱,则可以选择使用 filter()
函数。 filter()
函数允许您传递滤波器系数 h
和您希望过滤掉的信号。此函数返回此示例中声明为变量 y
的过滤信号。下图显示了原始信号与过滤掉的信号:
clc; clear; close all;
wp = 0.36;
ws = 0.4;
Rp = 0.1;
As = 40;
delta1 = (10^(Rp/20)-1)/(10^(Rp/20)+1);
delta2 = (1+delta1)*10^(-As/20);
f = [wp ws];
m =[1 0];
DEV =[delta1 delta2];
[M,F0,A0,W0]=firpmord(f,m,DEV);
h = firpm(M,W0);
[H,W]= freqz(h,1);
plot(W/pi,20*log10(abs(H)));
grid minor
n = (0: 499);
x = sin(0.3*pi.*n) + 2*cos(0.4*pi.*n);
y = filter(h,1,x);
subplot(2,1); plot(x);
title("Original Signal");
xlabel("Sample Index [n]"); ylabel("Amplitude");
subplot(2,2); plot(y);
title("Filtered Signal");
xlabel("Sample Index [n]"); ylabel("Amplitude");