Real-time implementation of cascaded all-pass filters from given transfer function
2 views (last 30 days)
Show older comments
I am working on real-time implementation of spring reverb based on scientific paper called the Parametric Spring Reverberation Effect by Välimäki, Vesa; Parker, Julian; Abel, Jonathan S. One block of this effect is a cascade of 100 stretched all-pass filters. Single stretched all-pass filter is defined by:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/168551/image.png)
I calculated the difference equation of this filter and used it for implementing the cascade of M = 100 stretched all-pass filters in Matlab.
for i = 1:M
for n = 1+K1+1:(length(x))
y(n) = a1 * x(n) + a1*a2 * x(n-1) + a2 * x(n-K1) + ...
x(n-1-K1) - a2 * y(n-1) - a1*a2 * y(n-K1) - a1 * y(n-1-K1);
end
x = y;
end
However, the problem seems to be that I need to add another filters to the structure which are not cascaded (as you can see in the following block diagram), therefore they cannot be "repeated" like the all-pass filter.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/168553/image.png)
How can I calculate the output of my all-pass filter cascade sample-by-sample?
I can imagine the multiplication of two or three transfer functions in order to obtain the transfer function of the whole cascade, but multiplying 100 transfer functions seems to be a crazy and wrong idea. There is probably a simple solution, but I just couldn't figure anything out. That's why I am asking you for help.
0 Comments
Answers (1)
Darshan Ramakant Bhat
on 17 Jan 2018
I think you can use the cascade function available in the signal processing toolbox. Please try to use this function in a loop to cascade the filter 100 times:
0 Comments
See Also
Categories
Find more on Filter Analysis in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!