2014-04-06 12 views
6

Ho un file audio che rappresenta il suono di un motore. Ho letto che il fft "normale" non fornisce un'analisi valida sulla macchina e che dovrei usare l'analisi per l'ordine per descrivere il "comportamento" della macchina. Ho registrato il suo suono mentre aumentavo la sua velocità, e ho messo insieme i record e calcolato il suo spettogramma. Ecco il codice per questo:Come implementare l'analisi degli ordini in MATLAB

%% read the Audio file and plot its 
clear, clc , clf; 
M = 512; 
k =1 
data= 0 ; 
    for i =100:5:180 
    fileName =['A10_uSp0_Mic100k_2nd_V_',int2str(i),'.wav'] 
    [x(:,k),Fs] = audioread(fileName); 
    k = k+1 ; 
end 
for i = 1:length(x(1,:)) 
    data = [data(:);x(:,i)]; 
end 
k = length(x(1,:)); 
    while k ~= 2 
    data = [data(:);x(:,k)]; 
    k = k -1; 
    end 
spectrogram(data,hamming(M),M/2,0:20:4000,Fs,'yaxis'); 

e il risultato si presenta come:

Spectogram

Come si può essere in grado di vedere, ho incrementato la velocità della macchina da 5 per ogni timepoint. La mia domanda è come calcolare l'analisi degli ordini per questo sistema !? Grazie mille per qualsiasi aiuto!

+0

Per eseguire l'analisi degli ordini è generalmente necessario conoscere la velocità di rotazione della macchina. Sul motore è presente un tachimetro o un sensore per giro per giro che è possibile registrare contemporaneamente al segnale di vibrazione? – Max

+0

No Non ce l'ho, posso solo ascoltare la macchina – Engine

+0

Controllate la velocità durante la misurazione, o dovete semplicemente prendere ciò che ottenete? Quanto è stabile la velocità – Max

risposta

2

Questa è più una questione scientifica che una domanda sulla programmazione. L'analisi degli ordini può essere eseguita utilizzando la trasformata di Fourier. Tutto quello che devi fare è cercare le linee diagonali nell'uscita, ad esempio dove la frequenza del rumore è proporzionale alla velocità di rotazione.

Nell'immagine di esempio c'è un tale ordine da 2000 Hz al tempo (velocità) da 0 a 4000 Hz al tempo (velocità) 150. Successivamente sembra riflesso verso il basso, probabilmente un artefatto di campionamento insufficiente.

Quindi quale ordine è? Per questo è necessario conoscere la velocità di rotazione del motore che non sembra conoscere. C'è anche un altro ordine più debole a partire da 3000 Hz al momento (velocità) 0. Con due o più ordini visibili si potrebbe essere in grado di dedurre la velocità di rotazione del motore (richiedendo che le frequenze siano multipli di numeri interi della velocità originale) .

In ogni caso il codice probabilmente non ha bisogno di essere cambiato tranne che per una risoluzione di frequenza più alta.

+0

innanzitutto grazie per la risposta, ma cosa intendi con dedurre la velocità di rotazione del motore, come lo farai nell'esempio di domanda? – Engine

+0

L'idea è che la frequenza del rumore sia proporzionale alla velocità di rotazione del motore. Per una singola linea diagonale non si sa: potrebbe essere due volte, potrebbe essere cinque volte la velocità di rotazione del motore. Ma è un intero numero intero. Tuttavia per due o più linee diagonali si ottiene un numero di equazioni che è possibile risolvere assumendo numeri interi per i fattori di proporzionalità. – Trilarion

+1

@Engine Ero interessato al tuo problema ed è per questo che ho messo una taglia. Ora, come indicato da alcuni, la questione riguarda più l'elaborazione del segnale rispetto alla codifica, la possibilità di postarla sul sito dsp o il sito fisico con il tag "acoustics". –

Problemi correlati