Matlab: her 300 ms tekrar numune kaydetmek

oy
0

Bir ses sinyalini örneklemek istiyoruz. Ben 5 saniye uzunluğunda bir wav dosyası var. Ben örnekleri her 300 ms kaydetmek istiyorum. Ben dosyasında içeren numuneler okumak Matlab fonksiyon audioread kullanmak, bu benim kodudur:

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

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

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

Nasıl her 300 ms tekrarlanan bir dizi örneklerinde kaydederim ki?

Oluştur 24/10/2019 saat 12:01
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
1

Senin varsayalım wavdosya bir örnekleme oranına sahip fs = 44100sahip, yani (oldukça yaygındır) 44100saniyede örnekleri. Şimdi, bir tane örnek her istiyorum 0.3 s. Sen yani orijinal örnekleme oranına göre "atla" numune tekabül sayısını hesaplamak zorunda skip = 0.3 * fs = 13230bu durumda. Şimdi, sadece her erişebilir skipsenin orijinal 'inci elemanı signal(ve ayrıca zaman aralığı t).

Burada iş yapmak ve yukarıda görselleştirmek için bazı kod:

% 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;

Aşağıdaki çıkış, orijinal sinyal mavi olsun, kırmızı noktalar her fırsatta örnekleridir 0.3 s:

Çıktı

Eğer bir göz at varsa t_new, sen örnekleme noktaları tam istediğiniz aralığı içinde aynı olmasını bkz 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

Umarım yardımcı olur!

DÜZENLEME: Bir de var resamplemevcut fonksiyon Sinyal İşleme Toolbox . Bu fonksiyon burada yararlıdır eğer yeni örnekleme oranı olacağından, emin değilim fs_new = 1 / 0.3 = 3.3333, ama resamplesadece tamsayılar kabul eder. Belki, otomatik işi yapmak için başka daha sofistike (araç kutusu) işlevi var.

Cevap 24/10/2019 saat 12:53
kaynak kullanıcı

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