我有一个Lanczos过滤器的代码:
dT = 1 % sampling interval
Cf = 1/40 % cutoff frequency
fl = 100 % ?
M = 100 % number of coefficients ? not sure about number
LoH = 1 % low pass
Nf=1/(2*dT); %Nyquist frequency
% Normalize the cut off frequency with the Nyquist frequency:
Cf = Cf/Nf;
% Lanczos cosine coeficients:
coef = lanczos_filter_coef(Cf,M); coef = coef(:,LoH);
% Filter in frequency space:
[window,Ff] = spectral_window(coef,length(vel)); Ff = Ff*Nf;
% Filtering:
[y,Cx] = spectral_filtering(vel,window);
function coef = lanczos_filter_coef(Cf,M)
% Positive coeficients of Lanczos [low high]-pass.
hkcs = lowpass_cosine_filter_coef(Cf,M);
sigma = [1 sin(pi*(1:M)/M)./(pi*(1:M)/M)];
hkB = hkcs.*sigma;
hkA = -hkB; hkA(1) = hkA(1)+1;
coef = [hkB(:) hkA(:)];
end
function coef = lowpass_cosine_filter_coef(Cf,M)
% Positive coeficients of cosine filter low-pass.
coef = Cf*[1 sin(pi*(1:M)*Cf)./(pi*(1:M)*Cf)];
end
function [window,Ff] = spectral_window(coef,N)
% Window of cosine filter in frequency space.
Ff = 0:2/N:1; window = zeros(length(Ff),1);
for i = 1:length(Ff)
window(i) = coef(1) + 2.*sum(coef(2:end).*cos((1:length(coef)-1)'*pi*Ff(i)));
end
end
function [y,Cx] = spectral_filtering(vel,window)
% Filtering in frequency space is multiplication, (convolution in time
% space).
Nx = length(vel);
Cx = fft(vel(:)); Cx = Cx(1:floor(Nx/2)+1);
CxH = Cx.*window(:);
CxH(length(CxH)+1:Nx) = conj(CxH(Nx-length(CxH)+1:-1:2));
y = real(ifft(CxH));
end我需要同时绘制时间窗口和频率窗口。我得到了时间窗口,它来自coef,但我不知道哪个输出会给我频率窗口。我已经绘制了所有可能的输出变量组合,并尝试对其中一些变量进行傅里叶变换,而我所做的任何尝试都没有给出预期的数字。
发布于 2021-03-10 14:49:39
频率窗口在输出“窗口”中,因此需要绘制(Ff,窗口)。你会得到一个在Cf (所以1/50)附近有一个强下降的图形,这是你选择的截止频率,在你将要用于低通滤波器的频率和高通滤波器的频率之间。
https://stackoverflow.com/questions/66555418
复制相似问题