Como plotar frequência versus magnitude da transformação wavelet?

14

Estou executando a transformação de wavelet contínua de Morlet. Eu tenho wscalogramsinal e agora quero plotar a magnitude da frequência como na figura a seguir., Mas não sei como fazê-lo:

insira a descrição da imagem aqui

Eu usei a scal2freqfunção MATLAB para converter escalas em pseudo-frequências. Também tenho algumas frequências no meu sinal que têm uma grande taxa de amortecimento (4%), para que não sejam bem visíveis na plotagem. Como posso exagerar esses modos altamente amortecidos?

Estou usando o MATLAB, aqui estão meus 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 

Meu enredo atual é assim:

insira a descrição da imagem aqui

Homem elétrico
fonte
De que forma sua wavelet transforma dados?
Jim Clay
Olá @JimClay! Não tenho certeza se entendi sua pergunta. mas se você quer dizer como é, é o segundo link que eu mantive na pergunta. e eu quero um enredo como o 1º link. (2nd [myplot]) cubeupload.com/im/bSSlMI.jpg 1st [desejado]) cubeupload.com/im/KbhGMI.jpg aqui está o meu sinal < fileswap.com/dl/Lwf7n96fAt/test4.txt.html > aqui está meus Mfile < fileswap.com/dl/gMrslBFAdb/mfile.txt.html > Atenciosamente.
Eletricista
Eu não sou realmente certo o que sua pergunta é ...
Tarin Ziyaee
Olá @ user4619; Veja o primeiro enredo. você vê um gráfico [magnitude da frequência] no lado direito do escalograma da wavelet [que foi obtido pelo matlab]. segunda imagem é o meu escalograma wavelet. mas não sei plotar [freq-magnitude] como o lado direito do primeiro enredo. alguma ajuda plz?
Eletricista
@ Electricman Um espectrograma não é o mesmo que um escalograma. Se você estiver fazendo um escalograma, não há frequência VS tempo, apenas escala VS tempo. Então, qual você está fazendo exatamente?
Tarin Ziyaee

Respostas:

4

Modificando seu código um pouco, mas sem grandes alterações, e eu recebo resultados corretos de qualquer maneira. Use este código de modelo aqui e você não verá nenhum problema. Eu obtenho os resultados corretos.

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 obter a figura no lado direito da primeira imagem exibida, esse é simplesmente o espectro da fatia de tempo. Em outras palavras, uma coluna da sua matriz de frequência e tempo.

Por exemplo, podemos obter a seguinte matriz de coeficiente quadrado, em frequência x tempo:

insira a descrição da imagem aqui

Suponhamos, então, que desejamos examinar o espectro para o intervalo de tempo na coluna 47. Então, isso é fornecido aqui:

insira a descrição da imagem aqui

Aqui, você vê o poder dos coeficientes, versus frequência, para o intervalo de tempo correspondente à coluna 47.

Tarin Ziyaee
fonte
Obrigado por modificar o código. Mas ainda não recebi uma resposta para minha pergunta. A pergunta é: Como posso plotar Freq-magnitude ou escalas-magnitude [sem diferença]. Eu quero um enredo como o lado direito da primeira foto. [Está em questão]. Agradecemos antecipadamente
Electricman
1
@ Electricman O gráfico no lado direito é simplesmente uma coluna da sua matriz Frequency VS Time.
Tarin Ziyaee
- @ user4619 Não é Freq x tempo, o intervalo de tempo é de 0 a 20 e o intervalo de frequência é de 0 a 2,5, mas o gráfico do lado direito é freq x magnitude. Não tenho certeza de que sejam exatamente coefos ou magnitude, mas obviamente é proporcional a cafés ou cafés ^ 2. tnx
Eletricista
@ Eletricman Por favor, veja as edições. Está mais claro agora?
Tarin Ziyaee
- @ user4619 Funciona. Obrigado pela sua resposta. Coloquei um pequeno código no final do mfile. e obteve o mesmo gráfico do lado direito do gráfico mencionado. cof2 = abs (coefs). ^ 2; cof2trans = cof2 '; maxmods = max (cof2trans); figura; eixo plot (maxmods, freq) ([0 60 0 1]) Atenciosamente
Electricman
4

A transformada contínua de wavelets (CWT) é um método para análise de escala de tempo . Sim, você leu corretamente, escala , não frequência . No entanto, é possível mapear as escalas para frequências e até com bastante facilidade. Como você é um usuário do MATLAB, provavelmente desejará usar esta função , que faz o seguinte:

F = scal2frq (A, 'wname', DELTA) retorna as pseudo-frequências correspondentes às escalas dadas por A, a função wavelet 'wname' (consulte wavefun para obter mais informações) e o período de amostragem DELTA.

Como você pode ler, as frequências não são as freqüências reais no sinal, mas sim aproximações. Se você deseja frequências reais, deve usar a transformada de Fourier de curta duração (STFT).

Então, quando alguém deve usar o CWT? Como princípio geral, as wavelets funcionam bem quando os sinais são transitórios (ou seja, têm mudanças rápidas).

EDIT: haha, eu não sei o que estou fazendo aqui. desculpe :-D perdeu completamente o ponto de sua pergunta. Basta ler o título ....

wav
fonte
@wave suas informações estão corretas. Mas e daí? Eu só quero ter um enredo como o lado direito da primeira foto. a frequência vs magnitude. e tudo bem se eu conseguir escalas versus magnitude, desde que eu possa usar o scal2freq.
Eletricista
"Se você deseja as frequências reais, deve usar a transformada de Fourier de curta duração (STFT)." A wavelet de Morlet tem frequência da mesma maneira que um STFT com janelas gaussianas tem frequência. Os "átomos" de ambas as transformadas são os mesmos.
endolith 6/09/13
0

Não tenho certeza se você ainda precisa de ajuda ...

Se você deseja frequência versus magnitude, use um comando "mesh / surf" para plotar os coeficientes.

Em seguida, altere a orientação do gráfico para obter o resultado que deseja. Para isso, consulte o comando "view".

asilva732
fonte
Obrigado, resolvi esse problema há vários meses e publiquei meus resultados. Mas tentarei sua alternativa da próxima vez. Mas, mova sua resposta para o local do comentário. boa sorte. @ asilva732
Electricman