bandpass filter in multiple frequencies with a for- if- ifelse loop
1 次查看(过去 30 天)
显示 更早的评论
Hi everyone!
I have to filter a signal in 5 frequency bands, each with its own range and calculate, for each band, an RMS value. I tried to create a loop, but RMS is overwritten every time a new signal is filtered.
the code:
for freq=1:5
if freq==1
freq_min=0,1
freq_max=0,7
fs=1000
[blow,alow]=butter(2,freq_max/(fs/2));
[bhigh,ahigh]=butter(2,freq_min/(fs/2),'high');
filt_signal=filtfilt((blow,alow,signal);
filt_signal=filtfilt(bhigh,ahigh,filt_signal);
RMS_freq1=rms(filt_signal);
elseif freq==2
freq_min=0,7
freq_max=0,9
fs=1000
[blow,alow]=butter(2,freq_max/(fs/2));
[bhigh,ahigh]=butter(2,freq_min/(fs/2),'high');
filt_signal=filtfilt((blow,alow,signal);
filt_signal=filtfilt(bhigh,ahigh,filt_signal);
RMS_freq2=rms(filt_signal);
ecc..
RMS=[RMS_freq1 RMS_freq2 RMS_freq3 RMS_freq4 RMS_freq5];
end
end
each time the script restarts with a new signal, the RMS array is overwritten.
4 个评论
Sulaymon Eshkabilov
2021-5-17
You don't need all of these "if .. elseif ... end" conditional statements. A simple [for ... end] loop.
回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!