¿Cómo puedo trazar la frecuencia frente a la magnitud de la transformación wavelet?


14

Estoy ejecutando la transformación de wavelet continua de Morlet. Tengo wscalogramseñal y ahora quiero trazar una magnitud de frecuencia como la siguiente imagen, pero no sé cómo hacerlo:

ingrese la descripción de la imagen aquí

He usado la scal2freqfunción MATLAB para convertir escalas a pseudo frecuencias. También tengo algunas frecuencias en mi señal que tienen una gran relación de amortiguamiento (4%), por lo que no son bien visibles en la trama. ¿Cómo puedo exagerar estos modos altamente amortiguados?

Estoy usando MATLAB, aquí están mis códigos:

% 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 

Mi trama actual se ve así:

ingrese la descripción de la imagen aquí


¿Qué forma toma su onda transformada de datos?
Jim Clay

Hola @JimClay! No estoy seguro si entiendo tu pregunta. pero si te refieres a cómo se ve, es como el segundo enlace que mantuve en la pregunta. y quiero una trama como el 1er enlace. (2nd [myplot]) cubeupload.com/im/bSSlMI.jpg 1st [deseado]) cubeupload.com/im/KbhGMI.jpg aquí está mi señal < fileswap.com/dl/Lwf7n96fAt/test4.txt.html > aquí está my Mfile < fileswap.com/dl/gMrslBFAdb/mfile.txt.html > saludos cordiales.
Electricman

No estoy realmente seguro de cuál es tu pregunta ...
Tarin Ziyaee

Hola @ user4619; Mira la primera trama. ve una gráfica [magnitud de frecuencia] en el lado derecho del escalograma wavelet [que obtuvo por matlab]. La segunda imagen es mi escalograma wavelet. pero no sé cómo trazar [magnitud de frecuencia] como el lado derecho de la primera trama. alguna ayuda por favor?
Electricman

@ Electricman Un espectrograma no es lo mismo que un escalograma. Si va a utilizar un escalograma, no hay frecuencia VS tiempo, solo escala VS tiempo. Entonces, ¿cuál estás haciendo exactamente?
Tarin Ziyaee

Respuestas:


4

Modificando un poco su código, pero sin cambios importantes, y obtengo resultados correctos de cualquier manera. Use este código de plantilla aquí, y no debería ver ningún problema. Obtengo los resultados correctos.

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

Para obtener la figura en el lado derecho de la primera imagen que colocas, eso es simplemente el espectro de segmento de tiempo. En otras palabras, una columna de su matriz de frecuencia-tiempo.

Por ejemplo, podríamos obtener la siguiente matriz de coeficientes cuadrados, en frecuencia vs. tiempo:

ingrese la descripción de la imagen aquí

Supongamos entonces que deseamos observar el espectro para el segmento de tiempo en la columna 47. Luego, esto se da aquí:

ingrese la descripción de la imagen aquí

Aquí, verá la potencia de los coeficientes, frente a la frecuencia, para el segmento de tiempo correspondiente a la columna 47.


Gracias por modificar el código. Pero todavía no obtuve una respuesta a mi pregunta. La pregunta es ¿Cómo puedo trazar la magnitud de frecuencia o la escala de magnitud [sin diferencia]? Quiero una trama como el lado derecho de la primera imagen [está en cuestión]. gracias de antemano
Electricman

1
@Electricman La gráfica en el lado derecho es simplemente una columna de su matriz de Frecuencia VS Tiempo.
Tarin Ziyaee

- @ user4619 No es Freq vs time, el rango de tiempo es 0-20 y el rango de frecuencia es 0-2.5 pero el diagrama del lado derecho es freq vs magnitud. No estoy seguro de si es exactamente coeficiente o magnitud, pero obviamente es proporcional a los cafés o los cafés ^ 2. tnx
Electricman

@ Electricista Por favor, vea las ediciones. ¿Está más claro ahora?
Tarin Ziyaee

- @ user4619 Funciona. Gracias por tu respuesta. Puse un pequeño código al final de mfile. y obtuve la misma trama que el lado derecho de la trama mencionada. cof2 = abs (coefs). ^ 2; cof2trans = cof2 '; maxmods = max (cof2trans); figura; eje plot (maxmods, freq) ([0 60 0 1]) Saludos cordiales
Electricman

4

La transformación de wavelet continua (CWT) es un método para el análisis de escala de tiempo . Sí, lo has leído correctamente, escala , no frecuencia . Sin embargo, es posible asignar las escalas a frecuencias, e incluso con bastante facilidad. Como usted es un usuario de MATLAB, probablemente desee usar esta función , que hace lo siguiente:

F = scal2frq (A, 'wname', DELTA) devuelve las pseudo-frecuencias correspondientes a las escalas proporcionadas por A, la función wavelet 'wname' (ver wavefun para más información) y el período de muestreo DELTA.

Como puede leer, las frecuencias no son las frecuencias reales en la señal, sino aproximaciones. Si desea las frecuencias reales, debe utilizar la transformada de Fourier de corto tiempo (STFT).

Entonces, ¿cuándo se debe usar el CWT? Como principio general, las wavelets funcionan bien cuando las señales son transitorias (es decir, tienen cambios rápidos).

EDITAR: jaja, no sé lo que estoy haciendo aquí. lo siento: perdí completamente el punto de tu pregunta. Acabo de leer el título ...


@wave su información es correcta. ¿Y qué? Solo quiero tener una trama como el lado derecho de la primera imagen. la frecuencia vs magnitud. y está bien si obtengo escalas vs magnitud siempre que pueda usar scal2freq.
Electricman

"Si desea las frecuencias reales, debería utilizar la transformada de Fourier de corto tiempo (STFT)". La wavelet de Morlet tiene frecuencia de la misma manera que un STFT con ventana gaussiana tiene frecuencia. Los "átomos" de ambas transformaciones son iguales.
Endolith

0

No estoy seguro si aún necesita ayuda ...

Si desea frecuencia vs. magnitud, use un comando "mesh / surf" para trazar los coeficientes.

Luego cambie la orientación de la trama para que tenga el resultado que busca. Para esto vea el comando "ver".


Gracias, resolví ese problema hace varios meses y publiqué mis resultados. Pero intentaré tu alternativa la próxima vez. Pero, por favor mueve tu respuesta al lugar del comentario buena suerte. @ asilva732
Electricista
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.