Come posso tracciare la frequenza rispetto all'entità della trasformazione wavelet?


14

Sto eseguendo la trasformazione wavelet continua di Morlet. Ho il wscalogramsegnale e ora voglio tracciare la grandezza di freq come nella figura seguente, ma non so come farlo:

inserisci qui la descrizione dell'immagine

Ho usato la scal2freqfunzione MATLAB per convertire le scale in pseudo frequenze. Inoltre ho alcune frequenze nel mio segnale che hanno un ampio rapporto di smorzamento (4%), quindi non sono ben visibili nella trama. Come posso esagerare con queste modalità altamente smorzate?

Sto usando MATLAB, ecco i miei codici:

% Import the text4.txt to matlab workspace. and save it under name "data"
t=linspace(0,30,301);
Fs=ceil(inv(t(2)-t(1)));
x=data(:,4); % use x=data(:,3),x=data(:,5) too. first column is time,second is refrence
wname = 'morl';
scales = 1:1:256;
coefs = cwt(x,scales,wname,'lvlabs');
freq = scal2frq(scales,wname,1/Fs);
surf(t,freq,abs(coefs));shading('interp');
axis tight; xlabel('Seconds'); ylabel('Pseudo-Frequency (Hz)');
axis([0 30 0 1 0 60])
xlabel('Time'); ylabel('Frequency');
figure;
sc=wscalogram('image',coefs,'scales',freq,'ydata',x);
hold on 

La mia trama attuale si presenta così:

inserisci qui la descrizione dell'immagine


In che forma prendono i dati di trasformazione wavelet?
Jim Clay,

Ciao @JimClay! Non sono sicuro di aver compreso la tua domanda. ma se intendi come appare, è come il secondo link che ho mantenuto alla domanda. e voglio una trama come il 1 ° link. (2nd [myplot]) cubeupload.com/im/bSSlMI.jpg 1st [desiderato]) cubeupload.com/im/KbhGMI.jpg ecco il mio segnale < fileswap.com/dl/Lwf7n96fAt/test4.txt.html > qui è my Mfile < fileswap.com/dl/gMrslBFAdb/mfile.txt.html > cordiali saluti.
Electricman,

Non sono proprio sicuro di quale sia la tua domanda ...
Tarin Ziyaee,

Ciao @ utente4619; Guarda la prima trama. vedi un diagramma [freq-magnitude] sul lato destro dello scalogramma wavelet [ottenuto da matlab]. la seconda foto è il mio scalogramma wavelet. ma non so come tracciare [freq-magnitude] come il lato destro della prima trama. qualche aiuto per favore?
Electricman,

@Electricman Uno spettrogramma non è uguale a uno scalogramma. Se stai eseguendo uno scalogramma, non vi è alcuna frequenza VS tempo, solo scala VS tempo. Quindi quale stai facendo esattamente?
Tarin Ziyaee,

Risposte:


4

Modificando un po 'il tuo codice, ma senza grandi cambiamenti, e ottengo risultati corretti in entrambi i modi. Usa questo codice modello qui e non dovresti vedere alcun problema. Ottengo i risultati corretti.

clear all; 
t=linspace(0,30,301); 
Fs = (inv(t(2)-t(1))); 
x=randn(100,1);  
wname = 'morl'; 
scales = 1:1:256; 
chefs = cwt(x,scales,wname,'lvlabs');

freq = scal2frq(scales,wname,1/Fs);

figure; 
coefsSquared = abs(coefs).^2; 
imagesc(coefsSquared); 
grid off;

%Pick one of the columsn to plot: 
figure; 
plot(coefsSquared(:,47))

Per ottenere la figura sul lato destro della prima immagine che hai messo, questo è semplicemente lo spettro della fascia oraria. In altre parole, una colonna della tua matrice frequenza-tempo.

Ad esempio, potremmo ottenere la seguente matrice a coefficienti quadrati, in frequenza rispetto al tempo:

inserisci qui la descrizione dell'immagine

Supponiamo quindi che desideriamo esaminare lo spettro per la fascia oraria nella colonna 47. Quindi, questo è dato qui:

inserisci qui la descrizione dell'immagine

Qui, quindi, viene visualizzata la potenza dei coefficienti, rispetto alla frequenza, per l'intervallo di tempo corrispondente alla colonna 47.


Grazie per aver modificato il codice. Ma non ho ancora ricevuto una risposta per la mia domanda. La domanda è: come posso tracciare Freq-magnitudo o scale-magnitudine [nessuna differenza]. Voglio una trama come il lato destro della prima immagine [è in questione]. grazie in anticipo
Electricman,

1
@Electricman La trama sul lato destro è semplicemente una colonna della tua matrice di frequenza VS VS.
Tarin Ziyaee,

- @ user4619 Non è Freq vs tempo, L'intervallo di tempo è 0-20 e l'intervallo di frequenza è 0-2,5 ma il diagramma a destra è freq vs magnitudo. Non sono sicuro che sia esattamente coefs o magnitudo ma ovviamente è proporzionale a caffè o caffè ^ 2. tnx
Electricman,

@Electricman Si prega di consultare le modifiche. Adesso è più chiaro?
Tarin Ziyaee,

- @ user4619 Funziona. Grazie per la tua risposta. Ho messo un piccolo codice alla fine di mfile. e ha ottenuto la stessa trama del lato destro della trama menzionata. COF2 = abs (coefs) ^ 2.; cof2trans = COF2' ; maxmods = max (cof2trans); figura; trama (maxmods, freq) asse ([0 60 0 1]) Cordiali saluti
Elettricista

4

La trasformazione wavelet continua (CWT) è un metodo per l' analisi della scala temporale . Sì, l'hai letto correttamente, scala , non frequenza . Tuttavia, è possibile mappare le scale alle frequenze e persino abbastanza facilmente. Dato che sei un utente MATLAB, probabilmente vorrai utilizzare questa funzione , che procede come segue:

F = scal2frq (A, 'wname', DELTA) restituisce le pseudo-frequenze corrispondenti alle scale date da A, la funzione wavelet 'wname' (vedi wavefun per maggiori informazioni) e il periodo di campionamento DELTA.

Come puoi leggere, le frequenze non sono le frequenze reali nel segnale, ma le approssimazioni. Se vuoi le frequenze reali, dovresti usare la trasformata di Fourier di breve durata (STFT).

Quindi, quando si dovrebbe usare il CWT? Come principio generale, le wavelet funzionano bene quando i segnali sono transitori (cioè hanno rapidi cambiamenti).

EDIT: haha, non so cosa sto facendo qui. scusa MrGreen completamente perso il punto della tua domanda. Leggi il titolo ....


@wave le tue informazioni sono corrette. Ma allora? Voglio solo avere una trama come il lato destro della prima foto. la frequenza vs magnitudo. ed è OK se ottengo scale vs magnitudine fintanto che posso usare scal2freq.
Electricman,

"Se vuoi le frequenze reali, dovresti usare la trasformata di Fourier di breve durata (STFT)." Il wavlet Morlet ha la frequenza allo stesso modo di un STFT con finestre gaussiane. Gli "atomi" di entrambe le trasformazioni sono uguali.
endolith,

0

Non sono sicuro se hai ancora bisogno di aiuto ...

Se si desidera la frequenza rispetto all'ampiezza, utilizzare un comando "mesh / surf" per tracciare i coefficienti.

Quindi cambia l'orientamento della trama in modo da avere il risultato che cerchi. Per questo vedere il comando "visualizza".


Grazie, ho risolto questo problema diversi mesi fa e ho pubblicato i miei risultati. Ma proverò la tua alternativa la prossima volta. Ma, per favore, sposta la tua risposta per inserire un commento. in bocca al lupo. @ asilva732
Electricman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.