Filter Sound from Data
2 次查看(过去 30 天)
显示 更早的评论
I have frequency-based data sets (with column 1 for time and column 2 for amplitude), and I use the following code to filter out the sound. I'm not convinced that this is the most effective system as I believe this process changes the time at which other signals occur. Is there a better system for filtering data?
BP = [0.8725 0.8925]; %Frequency filter band
Fs = 1/(data(2,1)-data(1,1)); %Sampling Freq.
Y00 = bandpass(data(:,2),BP,Fs); %Filtered data
0 个评论
回答(2 个)
Star Strider
2022-2-22
That appears to me to be correct.
If you are using the same filter for all the data sets, return the digital filter object after the first set:
[Y00,df] = bandpass(data(:,2),BP,Fs, 'ImpulseResponse','iir'); %Filtered data
Then in subsequent data sets, use it with filtfilt to do the filtering:
Y01 = filtfilt(df, data2(:,2));
That elimiinates the computational expense of designing the same filter for each signal.
.
2 个评论
Star Strider
2022-2-22
The bandpass and related functions optionally return the digital filter object they created as the second output. See for example the Bandpass Filter Steepness section of the documentation.
data = randn(500,2); % Create Matrix
data(:,1) = linspace(0, 499, 500)'/100;
data2 = randn(500,2); % Create Matrix
t = data(:,1);
BP = [0.8725 0.8925]; %Frequency filter band
Fs = 1/(data(2,1)-data(1,1)); %Sampling Freq.
[Y00, df] = bandpass(data(:,2),BP,Fs,'ImpulseResponse','iir'); %Filtered data
Y01 = filtfilt(df, data2(:,2));
figure
plot(t, Y00)
grid
figure
plot(t, Y01)
grid
The data are synthetic, however the code demonstrates the correct procedure.
.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Single-Rate Filters 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!