Comment puis-je tracer la fréquence en fonction de l'amplitude de la transformation en ondelettes?


14

J'utilise la transformation en ondelettes continue de Morlet. J'ai wscalogramdu signal et maintenant je veux tracer une amplitude de fréquence comme l'image suivante, mais je ne sais pas comment le faire:

entrez la description de l'image ici

J'ai utilisé la scal2freqfonction MATLAB pour convertir des échelles en pseudo-fréquences. De plus, j'ai quelques fréquences dans mon signal qui ont un grand rapport d'amortissement (4%), donc elles ne sont pas bien visibles dans l'intrigue. Comment exagérer ces modes très amortis?

J'utilise MATLAB, voici mes codes:

% 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 

Mon intrigue actuelle ressemble à ceci:

entrez la description de l'image ici


Quelle forme prennent vos données de transformation en ondelettes?
Jim Clay

Salut @ JimClay! Je ne sais pas si je comprends votre question. mais si vous voulez dire à quoi il ressemble, c'est comme le 2ème lien que j'ai maintenu à la question. et je veux un complot comme le 1er lien. (2e [myplot]) cubeupload.com/im/bSSlMI.jpg 1er [souhaité]) cubeupload.com/im/KbhGMI.jpg voici mon signal < fileswap.com/dl/Lwf7n96fAt/test4.txt.html > voici mon Mfile < fileswap.com/dl/gMrslBFAdb/mfile.txt.html > meilleures salutations.
Electricman

Je ne sais pas vraiment quelle est votre question ...
Tarin Ziyaee

Salut @ user4619; Regardez le premier complot. vous voyez un tracé [magnitude fréq.] sur le côté droit du scalogramme en ondelettes [qui a été obtenu par matlab]. la deuxième image est mon scalogramme en ondelettes. mais je ne sais pas comment tracer [fréquence-magnitude] comme le côté droit du premier tracé. toute aide plz?
Electricman

@Electricman Un spectrogramme n'est pas la même chose qu'un scalogramme. Si vous allez sur un scalogramme, il n'y a pas de fréquence VS temps, seulement une échelle VS temps. Alors lequel faites-vous exactement?
Tarin Ziyaee

Réponses:


4

Modifier un peu votre code, mais pas de changements majeurs, et j'obtiens des résultats corrects de toute façon. Utilisez ce code de modèle ici et vous ne devriez voir aucun problème. J'obtiens les bons résultats.

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))

Pour obtenir le chiffre sur le côté droit de la première image que vous mettez en place, il s'agit simplement du spectre de tranche de temps. En d'autres termes, une colonne de votre matrice fréquence-temps.

Par exemple, nous pourrions obtenir la matrice de coefficients carrés suivante, en fréquence en fonction du temps:

entrez la description de l'image ici

Supposons alors que nous souhaitons regarder le spectre de la tranche de temps à la colonne 47. Ensuite, ceci est donné ici:

entrez la description de l'image ici

Ici, vous voyez alors la puissance des coefficients, en fonction de la fréquence, pour la tranche de temps correspondant à la colonne 47.


Merci d'avoir modifié le code. Mais je n'ai pas encore obtenu de réponse à ma question. La question est de savoir comment puis-je tracer la fréquence-magnitude ou l'échelle-magnitude [aucune différence]. Je veux une intrigue comme le côté droit de la première photo. [C'est en question]. merci d'avance
Electricman

1
@Electricman L'intrigue sur le côté droit est simplement une colonne de votre matrice Fréquence VS Temps.
Tarin Ziyaee

- @ user4619 Ce n'est pas Freq vs time, La plage de temps est 0-20 et la plage de fréquence est 0-2.5 mais le tracé de droite est freq vs magnitude. Je ne suis pas sûr que ce soit exactement ses coefs ou sa magnitude mais évidemment son proportionnel aux cofes ou aux cofes ^ 2. tnx
Electricman

@Electricman Veuillez voir les modifications. Est-ce plus clair maintenant?
Tarin Ziyaee

- @ user4619 Cela fonctionne. Merci pour votre réponse. J'ai mis un petit code à la fin de mfile. et a obtenu la même parcelle que le côté droit de la parcelle mentionnée. cof2 = abs (coefs). ^ 2; cof2trans = cof2 '; maxmods = max (cof2trans); figure; plot (maxmods, freq) axe ([0 60 0 1]) Cordialement
Electricman

4

La transformée en ondelettes continue (CWT) est une méthode d' analyse d'échelle de temps . Oui, vous l'avez lu correctement, l' échelle , pas la fréquence . Cependant, il est possible de faire correspondre les échelles aux fréquences, et même assez facilement. Puisque vous êtes un utilisateur MATLAB, vous souhaiterez probablement utiliser cette fonction , qui effectue les opérations suivantes:

F = scal2frq (A, 'wname', DELTA) renvoie les pseudo-fréquences correspondant aux échelles données par A, la fonction d'ondelette 'wname' (voir wavefun pour plus d'informations) et la période d'échantillonnage DELTA.

Comme vous pouvez le lire, les fréquences ne sont pas les fréquences réelles du signal, mais des approximations. Si vous voulez les fréquences réelles, vous devez utiliser la transformée de Fourier à court terme (STFT).

Alors, quand doit-on utiliser le CWT? En règle générale, les ondelettes fonctionnent bien lorsque les signaux sont transitoires (c'est-à-dire qu'ils ont des changements rapides).

EDIT: haha, je ne sais pas ce que je fais ici. désolé: -D complètement manqué le point de votre question. Il suffit de lire le titre ....


@wave vos informations sont correctes. Mais alors quoi? Je veux juste avoir un tracé comme le côté droit de la première photo. la fréquence vs l'amplitude. et c'est OK si je reçois des échelles par rapport à la magnitude aussi longtemps que je peux utiliser scal2freq.
Electricman

"Si vous voulez les fréquences réelles, vous devriez utiliser la transformée de Fourier à court terme (STFT)." L'ondelette de Morlet a une fréquence de la même manière qu'une STFT à fenêtre gaussienne a une fréquence. Les "atomes" des deux transformées sont les mêmes.
endolith

0

Je ne sais pas si vous avez encore besoin d'aide ...

Si vous voulez la fréquence par rapport à la magnitude, utilisez une commande "mesh / surf" pour tracer les coefficients.

Modifiez ensuite l'orientation de l'intrigue pour obtenir le résultat recherché. Pour cela, voir la commande "view".


Merci, j'ai résolu ce problème il y a plusieurs mois et j'ai publié mes résultats. Mais je vais essayer votre alternative la prochaine fois.Mais, veuillez déplacer votre réponse dans le commentaire. bonne chance. @ asilva732
Electricman
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.