Generated filter reduces signal time

4 ビュー (過去 30 日間)
farzad
farzad 2020 年 12 月 18 日
コメント済み: Star Strider 2020 年 12 月 18 日
Hi All
I desgined a filter with the following data, but it reduced the signal time to half , after filtering. is there a reason ? how to resolve?
function y = myFilter(x)
persistent Hd;
if isempty(Hd)
N = 3; % Order
Fstop1 = 55; % First Stopband Frequency
Fpass1 = 65; % First Passband Frequency
Fpass2 = 9998; % Second Passband Frequency
Fstop2 = 10000; % Second Stopband Frequency
Fs = 256000; % Sampling Frequency
h = fdesign.bandpass('n,fst1,fp1,fp2,fst2', N, Fstop1, Fpass1, Fpass2, ...
Fstop2, Fs);
Hd = design(h, 'equiripple');
set(Hd,'PersistentMemory',true);
end
y = filter(Hd,x);
end

回答 (1 件)

Star Strider
Star Strider 2020 年 12 月 18 日
The ‘y’ output should be the same length as the ‘x’ input. The filter should not change that.
It is important not to confuse time duration with frequency. The frequency displayed will only be up to the Nyquist frequency, half the original sampling frequency. (The Nyquist frequency is the highest frequency that can be uniquely resolvable in a sampled signal.)
  6 件のコメント
Star Strider
Star Strider 2020 年 12 月 18 日
If you want to filter out the mains frequency noise, the easiest way would be to use the bandstop function, introduced in R2018a. If you have an earlier version, it’s easy to design a IIR bandstop filter:
Fs = 256000; % Sampling Frequency
Fn = Fs/2; % Nyquist Frequency
Ws = [48 62]/Fn; % Stopband Frequency (Normalised)
Wp = [0.99 1.01].*Ws; % Passband Frequency (Normalised)
Rp = 1; % Passband Ripple
Rs = 90; % Passband Ripple (Attenuation)
[n,Wp] = ellipord(Wp,Ws,Rp,Rs); % Elliptic Order Calculation
[z,p,k] = ellip(n,Rp,Rs,Wp,'stop'); % Elliptic Filter Design: Zero-Pole-Gain
[sos,g] = zp2sos(z,p,k); % Second-Order Section For Stability
figure
freqz(sos, 2^20, Fs) % Filter Bode Plot
set(subplot(2,1,1), 'XLim',Wp*Fn.*[0.8 1.2]) % Optional
set(subplot(2,1,2), 'XLim',Wp*Fn.*[0.8 1.2]) % Optional
Use filtfilt to do the actual filtering:
y = filtfilt(sos,g,x);
Experiment with the ‘Ws’ frequencies to get the result you want. (The ‘Wp’ frequencies are calculated automatically from them.)

サインインしてコメントする。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by