我希望借助Matlab中的线性相位FIR陷波滤波器和IIR陷波滤波器来隔离基频。谁能告诉我怎么做?我知道我必须将陷波频率设置为基频。但是无法理解如何在MATLAB上实现。
答案 0 :(得分:1)
你需要知道的事情。 采样率。 您希望隔离的基本频率。 FIR滤波器基本和您想要的顺序。 我建议制作带阻滤波器,带有一个薄的阻带。 阻带频率fc1和fc2。 然后使用下面的代码。
fc1 = fundamental_freqeuncy1/sampling_rate;
fc2 = fundamental_freqeuncy2/sampling_rate;
N = 10; % number of taps you can change
n = -(N/2):(N/2); % 11 order filter
n = n+(n==0)*eps;
[h] = sin(n*2*pi*fc1)./(n*pi) - sin(n*2*pi*fc2)./(n*pi);
h(0) = 1 - (2*pi*(fc2-fc1))/pi;
%coefficient for band stop filter... which could be used % as notch filter
[w] = 0.54 + 0.46*cos(2*pi*n/N); % window for betterment
d = h.*w; % better coefficients
现在d是滤波器系数。 你的过滤器是
freqz(d); % use this command to see frequency response
在此之后,您需要使用系数' d'设计的过滤器过滤输入。 所以
y = filter(d,1,X) % X is input, y is filtered output
答案 1 :(得分:1)
这是您想要使用的一个IIR缺口代码。
fs = 20000; %#sampling rate
f0 = 50; %#notch frequency
fn = fs/2; %#Nyquist frequency
freqRatio = f0/fn; %#ratio of notch freq. to Nyquist freq.
notchWidth = 0.1; %#width of the notch
#%Compute zeros
zeros = [exp( sqrt(-1)*pi*freqRatio ), exp( -sqrt(-1)*pi*freqRatio )];
%Compute poles
poles = (1-notchWidth) * zeros;
figure;
zplane(zeros.', poles.');
b = poly( zeros ); %# Get moving average filter coefficients
a = poly( poles ); %# Get autoregressive filter coefficients
figure;
freqz(b,a,32000,fs) % 32000 are the sample numbers
%filter signal x
y = filter(b,a,x);