Matlab: menteni a mintákat, amelyek ismételjük minden 300 ms

szavazat
0

Azt akarom, hogy mintát az audio jelet. Van egy wav fájlt 5 másodperc hosszú. Azt akarom menteni minták minden 300 ms. ÉN használ funkció audioread Matlab, hogy olvassa el a mintákat tartalmazó fájl, ez a kód:

[signal,fs]=audioread('file.wav');

dt = 1/fs;
N = length(signal);
t = 0:dt:(N-1)*dt;

plot(t,signal)
ms=t*0.001;

Hogyan tudom menteni a tömb ismétlődő minták minden 300 ms?

A kérdést 24/10/2019 12:01
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
1

Tegyük fel, hogy a wavfájl mintavételezési sebességgel fs = 44100(ami elég gyakori), vagyis van 44100minta másodpercenként. Most azt szeretné, hogy egy minta minden 0.3 s. Be kell számítani a megfelelő minták száma „kihagyja” tekintetében az eredeti mintavételi frekvencia, vagyis skip = 0.3 * fs = 13230ebben az esetben. Most egyszerűen hozzáférhet minden skip„th eleme az eredeti signal(és időintervallum t).

Íme néhány kódot, hogy ezt a munkát, és láthatóvá a fenti:

% Artificial data
signal = sin(linspace(0, 2*pi, 5 * 44100));
fs = 44100;
dt = 1 / fs;
N = length(signal); 
t = 0:dt:(N-1)*dt; 

% "Re-sampling" parameters
dt_new = 0.3; 
skip = dt_new * fs;

% Extract every skip'th value from original time interval and signal
t_new = t(1:skip:end).'
signal_new = signal(1:skip:end);

% Some visualization
figure(1);
hold on;
plot(t, signal);
plot(t_new, signal_new, 'r.', 'MarkerSize', 15);
hold off;

Mi a következő eredményt kapjuk, az eredeti jel kék, a piros pontok a minták minden 0.3 s:

kibocsátás

Ha van egy pillantást t_new, látod, hogy a mintavételi pontokat pontosan egyezik meg a kívánt intervallum 0.3 s:

t_new =
     0.00000
     0.30000
     0.60000
     0.90000
     1.20000
     1.50000
     1.80000
     2.10000
     2.40000
     2.70000
     3.00000
     3.30000
     3.60000
     3.90000
     4.20000
     4.50000
     4.80000

Remélem segít!

EDIT: Van még egy resamplefunkció a Signal Processing Toolbox . Nem vagyok benne biztos, ha ez a funkció akkor hasznos, itt, hiszen az új mintavételi sebesség lenne fs_new = 1 / 0.3 = 3.3333, de resamplecsak akkor fogad egészek. Talán van egy másik kifinomultabb (eszköztár) függvény a munkát automatikusan.

Válaszolt 24/10/2019 12:53
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more