在 MATLAB 中创建 50hz 梳状滤波器

信息处理 过滤器 matlab
2021-12-22 02:40:01

我在一维向量 X 中有一个信号,我需要去除 50Hz 及其谐振频率。我已经研究过使用fdesign.comb,但我不确定如何在我的数据上应用该过滤器(在使用构建它之后design)。

或者,我想我也可以这样做,iircomb但同样,我不知道该怎么做。如果有人可以引导我完成此操作(以及如何将其应用于信号 X),我将不胜感激。

2个回答

为了使用fdesign.comb,您必须执行以下操作来指定过滤器的参数

D = fdesign.comb('notch','N,BW',8,.01); 

但是您必须按照您在问题中提到的那样生成过滤器。

H = design(D); % H is a DFILT

然后您可以像这样查看过滤器

fvtool(H)

将过滤器应用于数据的一种方法是使用filter函数

y=filter(H.Numerator,H.Denominator,inArray)

我最喜欢的设计我从未使用过的过滤器的方法是使用,fdatool因为您可以使用所有参数。这是我的做法:

  • 在命令提示符下输入 fdatool 会弹出一个窗口
  • 在最初显示微分器的下拉列表中指定 Notching
  • Inder IIR 选择梳
  • 输入你的参数
  • 单击设计过滤器

一旦您玩弄它并且看起来如您所愿,您可以导出系数或生成将创建此过滤器的代码。

导出系数

  • 转到文件并单击导出
  • 记下变量名称并单击导出
  • 现在您可以使用过滤器命令y = filter(num,den,data)

生成代码

  • 转到文件并单击生成 MATLAB 代码
  • 保存文件

您在此文件中看到如下内容

Fs = 48000;  % Sampling Frequency

N     = 10;    % Order
BW    = 1200;  % Bandwidth
Apass = 1;     % Bandwidth Attenuation

[b, a] = iircomb(N, BW/(Fs/2), Apass);
Hd     = dfilt.df2(b, a);

iircomb是生成滤波器系数的内容,您现在可以使用y=filter(b,a,data);

希望这可以帮助。

我最近需要做这样的事情!

下面是一些您可能希望用作起点的示例 Matlab 代码。. .

clear all; 
%% // Make a harmonic signal and add it to another sine
sr = 44100; 
dt = 1/sr;
tAxis = dt:dt:2;

freq = 50;
x = mean(sin (2*pi*freq*(1:10)'*tAxis))'; %Harmonic noise
x = x+ sin(2*pi*440*tAxis)';


%% // Fractional delay comb filter
rho = 0.95; %This sets how narrow the rejection is. Must be between 0 and 1

delay = (sr/2)/freq - 1;
N = 2*floor(delay);



%// LAGRANGE  h=lagrange(N,delay) returns order N FIR 
%//          filter h which implements given delay 
%//          (in samples).  For best results, 
%//          delay should be near N/2 +/- 1.
n = 0:N;
h = ones(1,N+1);
for k = 0:N
    index = find(n ~= k);
    h(index) = h(index) *  (delay-k)./ (n(index)-k);
end


b = [1 -h];
a = [1 -rho*h];

nfft = 2^14;
figure; freqz(b, a, nfft, 'half', sr)

xf = filter(b,a,x);

soundsc([x; xf],sr);

该脚本生成 440 Hz 正弦波并添加 50 Hz 谐波噪声。使用分数延迟滤波器创建 50 Hz 梳状滤波器。然后使用滤波器对信号进行滤波,并在滤波过程之前和之后将输出作为声音播放。

有关更多详细信息,请尝试查看此处

http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=951433

希望这会有所帮助。