Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Institute of Technical Acoustics (ITA)
ITACTC
Commits
c6edadb2
Commit
c6edadb2
authored
Sep 28, 2016
by
Michael Kohnen
Browse files
Correction of CTC-Factor
parent
b9e87de1
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/ITANCTC.cpp
View file @
c6edadb2
...
...
@@ -291,44 +291,50 @@ bool ITANCTC::CalculateFilter( std::vector< ITAHDFTSpectra* >& vpCTCFilter )
pHRTF
->
Export
(
"HRIR_LS"
+
IntToString
(
n
+
1
)
+
"_WICKed"
);
#endif // NCTC_EXPORT_FILTER_TO_HARDDRIVE
// --- CTC compensation factor + weighting ---
// Weighting
float
fWeight
=
float
(
m_vdWeights
[
n
]
);
// diag element
// --- CTC compensation factor ---
// CTC compensation factors
int
iLSSide
=
GetLoudspeakerSide
(
n
+
1
);
int
iLSSide
=
GetLoudspeakerSide
(
n
+
1
);
float
fRightChannelCTC
=
1.0
f
;
if
(
iLSSide
==
Config
::
Loudspeaker
::
LEFT_SIDE
)
if
(
iLSSide
==
Config
::
Loudspeaker
::
LEFT_SIDE
)
fRightChannelCTC
*=
m_fCrossTalkCancellationFactor
;
// only apply to left channel if LS is at left side
float
fLeftChannelCTC
=
1.0
f
;
if
(
iLSSide
==
Config
::
Loudspeaker
::
RIGHT_SIDE
)
if
(
iLSSide
==
Config
::
Loudspeaker
::
RIGHT_SIDE
)
fLeftChannelCTC
*=
m_fCrossTalkCancellationFactor
;
// only apply to right channel if LS is at right side
(
*
pHRTF
)[
0
]
->
mul
(
fLeftChannelCTC
);
(
*
pHRTF
)[
1
]
->
mul
(
fRightChannelCTC
);
#ifdef NCTC_EXPORT_FILTER_TO_HARDDRIVE
pHRTF
->
Export
(
"HRIR_LS"
+
IntToString
(
n
+
1
)
+
"_WICKedPlusCTCFactor"
);
#endif // NCTC_EXPORT_FILTER_TO_HARDDRIVE
// --- Weighting ---
float
fWeight
=
float
(
m_vdWeights
[
n
]
);
// diag element
// Element wise (a and d): HWH* -> 2x2
t
->
copy
(
(
*
pHRTF
)[
0
]
);
t
->
mul
(
fWeight
*
fLeftChannelCTC
);
t
->
mul
(
fWeight
);
t
->
mul_conj
(
(
*
pHRTF
)[
0
]
);
n
==
0
?
a
->
copy
(
t
)
:
a
->
add
(
t
);
t
->
copy
(
(
*
pHRTF
)[
1
]
);
t
->
mul
(
fWeight
*
fRightChannelCTC
);
t
->
mul
(
fWeight
);
t
->
mul_conj
(
(
*
pHRTF
)[
1
]
);
n
==
0
?
d
->
copy
(
t
)
:
d
->
add
(
t
);
// Cross elements (b and c): HWH*
t
->
copy
(
(
*
pHRTF
)[
1
]
);
t
->
mul
(
fWeight
*
fRightChannelCTC
);
t
->
mul
(
fWeight
);
t
->
mul_conj
(
(
*
pHRTF
)[
0
]
);
n
==
0
?
b
->
copy
(
t
)
:
b
->
add
(
t
);
t
->
copy
(
(
*
pHRTF
)[
0
]
);
t
->
mul
(
fWeight
*
fLeftChannelCTC
);
t
->
mul
(
fWeight
);
t
->
mul_conj
(
(
*
pHRTF
)[
1
]
);
n
==
0
?
c
->
copy
(
t
)
:
c
->
add
(
t
);
...
...
@@ -375,38 +381,27 @@ bool ITANCTC::CalculateFilter( std::vector< ITAHDFTSpectra* >& vpCTCFilter )
for
(
int
n
=
0
;
n
<
GetN
();
n
++
)
{
// Again, apply CTC compensation factors
int
iLSSide
=
GetLoudspeakerSide
(
n
+
1
);
float
fRightChannelCTC
=
1.0
f
;
if
(
iLSSide
==
Config
::
Loudspeaker
::
LEFT_SIDE
)
fRightChannelCTC
*=
m_fCrossTalkCancellationFactor
;
float
fLeftChannelCTC
=
1.0
f
;
if
(
iLSSide
==
Config
::
Loudspeaker
::
RIGHT_SIDE
)
fLeftChannelCTC
*=
m_fCrossTalkCancellationFactor
;
ITAHDFTSpectra
*
pHRTF
(
m_vpHRTFs
[
n
]
);
// two-channel, already WICKed
ITAHDFTSpectra
*
pCTCFilter
(
vpCTCFilter
[
n
]
);
// two-channel
float
fWeight
=
float
(
m_vdWeights
[
n
]
);
// diag element
t
->
copy
(
a
);
t
->
mul_conj
(
(
*
pHRTF
)[
0
]
);
t
->
mul
(
fWeight
*
fLeftChannelCTC
);
t
->
mul
(
fWeight
);
(
*
pCTCFilter
)[
0
]
->
copy
(
t
);
t
->
copy
(
b
);
t
->
mul_conj
(
(
*
pHRTF
)[
1
]
);
t
->
mul
(
fWeight
*
fRightChannelCTC
);
t
->
mul
(
fWeight
);
(
*
pCTCFilter
)[
0
]
->
add
(
t
);
t
->
copy
(
c
);
t
->
mul_conj
(
(
*
pHRTF
)[
0
]
);
t
->
mul
(
fWeight
*
fLeftChannelCTC
);
t
->
mul
(
fWeight
);
(
*
pCTCFilter
)[
1
]
->
copy
(
t
);
t
->
copy
(
d
);
t
->
mul_conj
(
(
*
pHRTF
)[
1
]
);
t
->
mul
(
fWeight
*
fRightChannelCTC
);
t
->
mul
(
fWeight
);
(
*
pCTCFilter
)[
1
]
->
add
(
t
);
#ifdef NCTC_EXPORT_FILTER_TO_HARDDRIVE
...
...
@@ -415,7 +410,6 @@ bool ITANCTC::CalculateFilter( std::vector< ITAHDFTSpectra* >& vpCTCFilter )
// Time-shift
m_ifft
.
execute
(
(
*
pCTCFilter
)[
0
]
->
data
(),
m_sfCTC_temp
[
0
].
data
()
);
m_ifft
.
execute
(
(
*
pCTCFilter
)[
1
]
->
data
(),
m_sfCTC_temp
[
1
].
data
()
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment