Implementing FILTFILT using FILTER
2 ビュー (過去 30 日間)
古いコメントを表示
Hello fellow Matlab users,
I am trying to understand how FILTFILT.m works & am trying to implement it using FILTER.m. To my understanding:
1. It uses reflected signal extension at the edges (left and right side of original signal).
2. Length of each reflected extension is 3*(filter_order-1).
3. Signal is filtered in forward direction.
4. Then filtered signal from 3 is filtered in backward direction.
5. Finally, filtered output from 4 (after flipping the filtered signal) corresponding to original signal length is chosen as output.
I have implemented the above in 2 m-files. One is a function I wrote (my_filtfilt.m) and the other one (compare_matlab_filtfilt_my_filtfilt.m) calls this function and Matlab filtfilt.m for comparison.
While results are close for a noisy Matlab sample ECG signal (>> load noisysignals x), they are not EXACTLY identical (see attached image/plot)!
Also attached are my m-files.
How to make the 2 outputs to match perfectly?
Any help would be greatly appreciated :)
Thanks!
Saif
0 件のコメント
回答 (1 件)
Martin Schätz
2015 年 10 月 17 日
Hi, my first idea is that the signal is not padded with zeroes, but mirrored (as is used in 2D convolution). Because as i understand filtfilt, you are doing all as it should be.
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Digital Filtering についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!