RoomAcoustics.jl/src/utils.jl
2022-10-13 15:50:42 +02:00

62 lines
965 B
Julia
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export h2RT60, Sabine_RT60
"""
"""
function h2RT60(h::AbstractVector{<:Number}, Fs::Real)
cs = cumsum(reverse(h.^2))
edc = 10*log10.(reverse(cs./cs[end])) # energy decay curve
ind = findfirst(edc .<= -60. )
if ind == nothing
rt = length(h)/Fs
else
rt = ind/Fs
end
rt, edc
end
"""
"""
function Sabine_RT60(T60, L::Tuple, c)
# Compute volume of the room
V = prod(L)
# Compute surface of the room
S = 2*(L[1]*L[2] + L[1]*L[3] + L[2]*L[3])
#
α = 24 * V * log(10)/(c * S * T60)
#
sqrt(1-α)
end
"""
b = [1, -B1, -B2]
a = [1, A1, R1]
"""
function AllenBerkley_highpass100(x, fs)
o = x .* 0
Y = zeros(3)
W = 2π*100/fs
R1 = exp(-W)
B1 = 2*R1*cos(W)
B2 = -R1 * R1
A1 = -(1+R1)
for i = 1:length(x)
Y[3] = Y[2]
Y[2] = Y[1]
Y[1] = B2*Y[3] + B1*Y[2] + x[i]
o[i] = Y[1] + A1*Y[2] + R1*Y[3]
end
return o
end