Skip to content

Commit 4f49e89

Browse files
committed
refactor: make silk_corrVector_FLP safe
1 parent 4cdd52e commit 4f49e89

File tree

3 files changed

+26
-13
lines changed

3 files changed

+26
-13
lines changed

Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ bytemuck = "1.16.1"
2929
# for slicing arrays to other arrays
3030
arrayref = "0.3.7"
3131
const-chunks = "0.3.0"
32+
33+
# better abstractions for multidimensional arrays
3234
ndarray = "0.15.6"
35+
# iterate over stuff
36+
itertools = "0.13.0"
3337

3438
# for dumping data in ent-dump
3539
hex = { version = "0.4.3", optional = true }

src/silk/float/corrMatrix_FLP.rs

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
use crate::silk::float::energy_FLP::silk_energy_FLP;
22
use crate::silk::float::inner_product_FLP::silk_inner_product_FLP;
33

4-
pub unsafe fn silk_corrVector_FLP(x: *const f32, t: *const f32, L: i32, Order: i32, Xt: *mut f32) {
5-
let mut lag: i32 = 0;
6-
let mut ptr1: *const f32 = 0 as *const f32;
7-
ptr1 = &*x.offset((Order - 1) as isize) as *const f32;
8-
lag = 0;
9-
while lag < Order {
10-
*Xt.offset(lag as isize) = silk_inner_product_FLP(
11-
std::slice::from_raw_parts(ptr1, L as usize),
12-
std::slice::from_raw_parts(t, L as usize),
13-
) as f32;
14-
ptr1 = ptr1.offset(-1);
15-
lag += 1;
4+
// Correlation matrix computations for LS estimate.
5+
6+
/// Calculates correlation vector X'*t
7+
///
8+
/// ```text
9+
/// x I x vector [L+order-1] used to create X
10+
/// t I Target vector [L]
11+
/// L I Length of vecors
12+
/// Order I Max lag for correlation
13+
/// *Xt O X'*t correlation vector [order]
14+
/// ```
15+
pub fn silk_corrVector_FLP(x: &[f32], t: &[f32], Xt: &mut [f32]) {
16+
let L = t.len();
17+
18+
for (out, x) in itertools::zip_eq(Xt.iter_mut(), x.windows(L).rev()) {
19+
*out = silk_inner_product_FLP(x, t) as f32;
1620
}
1721
}
22+
1823
pub unsafe fn silk_corrMatrix_FLP(x: *const f32, L: i32, Order: i32, XX: *mut f32) {
1924
let mut j: i32 = 0;
2025
let mut lag: i32 = 0;

src/silk/float/find_LTP_FLP.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ pub unsafe fn silk_find_LTP_FLP(
2323
while k < nb_subfr {
2424
lag_ptr = r_ptr.offset(-((*lag.offset(k as isize) + LTP_ORDER / 2) as isize));
2525
silk_corrMatrix_FLP(lag_ptr, subfr_length, LTP_ORDER, XX_ptr);
26-
silk_corrVector_FLP(lag_ptr, r_ptr, subfr_length, LTP_ORDER, xX_ptr);
26+
silk_corrVector_FLP(
27+
std::slice::from_raw_parts(lag_ptr, (subfr_length + LTP_ORDER - 1) as usize),
28+
std::slice::from_raw_parts(r_ptr, subfr_length as usize),
29+
std::slice::from_raw_parts_mut(xX_ptr, LTP_ORDER as usize),
30+
);
2731
xx = silk_energy_FLP(std::slice::from_raw_parts(
2832
r_ptr,
2933
(subfr_length + LTP_ORDER) as usize,

0 commit comments

Comments
 (0)