Bandpass filter

2 vues (au cours des 30 derniers jours)
Sampath reddy
Sampath reddy le 27 Mar 2012
I want to run a signal through bandpass filter, but the data is sent one by one.
t=0:0.0000001:1;
a=sin(2*pi*250*t)+sin(2*pi*500*t);
wn=[(240*0.00000001/2) (260*0.00000001/2)];
[B,A]=butter(2,wn,'bandpass');
for ii=0:length(t)
z(ii)=filter(B,A,a(ii));
end
I'm getting wrong data from the filter. What is wrong with the code??

Réponse acceptée

Jan
Jan le 27 Mar 2012
The wn contain very low frequencies. Is this really wanted?
You cannot filter scalars. Try to omit the loop:
z = filter(B,A,a);
If you really have a good reason to filter the data element by element, you have to consider the current status of the filter:
s = [];
z = zeros(1, length(t)); % pre-allocate!
for ii = 1:length(t) % Not 0:length(t) !
[z(ii), s] = filter(B, A, a(ii), s);
end

Plus de réponses (0)

Catégories

En savoir plus sur Fourier Analysis and Filtering dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by