如何绘制频率与小波变换幅度的关系?


14

我正在运行Morlet连续小波变换。我有wscalogram信号,现在我想要绘制频率幅值,如下图所示。但是我不知道该怎么做:

在此处输入图片说明

我已经使用scal2freqMATLAB函数将标度转换为伪频率。另外,我的信号中的某些频率具有较大的阻尼比(4%),因此它们在图中不太清晰可见。如何夸大这些高阻尼模式?

我正在使用MATLAB,这是我的代码:

% 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 

我当前的情节看起来像这样:

在此处输入图片说明


小波变换数据采用什么形式?
吉姆·克莱

嗨@JimClay!我不确定我是否理解你的问题。但是如果您要说的是它的外观,则就像我在问题中维护的第二个链接一样。我想要一个像第一个链接的情节。(第二个[myplot])cubeupload.com/im/bSSlMI.jpg 第一个[所需])cubeupload.com/im/KbhGMI.jpg 这是我的信号< fileswap.com/dl/Lwf7n96fAt/test4.txt.html >这是我的Mfile < fileswap.com/dl/gMrslBFAdb/mfile.txt.html >最好的问候。
电工

我不确定自己的问题是什么...
Tarin Ziyaee 2013年

嗨@ user4619; 看第一个情节。您会在小波比例尺[由matlab获得]的右侧看到一个图[freq-magnitude]。第二张照片是我的小波比例尺。但我不知道如何像第一个图的右侧那样绘制[freq-magnitude]。有什么帮助吗?
电工

@Electricman频谱图与比例尺不同。如果要进行比例尺绘制,则没有频率VS时间,只有比例VS时间。那你到底在做什么?
Tarin Ziyaee

Answers:


4

稍微修改您的代码,但没有重大更改,无论哪种方式,我都能获得正确的结果。在这里使用此模板代码,您应该不会看到任何问题。我得到正确的结果。

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

为了使该图位于您放置的第一张图像的右侧,这就是时间切片频谱。换句话说,频率时间矩阵的一列。

例如,我们可以得到以下频率与时间的平方系数矩阵:

在此处输入图片说明

然后让我们假设我们希望在第47列中查看时间片的频谱。然后,在此处给出:

在此处输入图片说明

在这里,您将看到对应于第47列的时间片的系数幂与频率的关系。


感谢您修改代码。但是我的问题还没有得到答案。问题是如何绘制频率幅值或刻度幅值[无差异]。我想要一个像第一张图片右侧的图。在此先感谢
Electricman

1
@Electricman右侧的图只是频率与时间矩阵的一列。
Tarin Ziyaee

-@ user4619不是频率与时间的关系,时间范围是0-20,频率范围是0-2.5,但右侧图是频率与幅度的关系。我不确定其确切的系数或大小,但显然与cofes或cofes ^ 2成正比。tnx
Electricman

@Electricman请查看编辑。现在更清楚了吗?
Tarin Ziyaee

-@ user4619有效。感谢您的回答。我在mfile的末尾放了一些代码。并获得与上述图右侧相同的图。cof2 = abs(coefs)。^ 2; cof2trans = cof2'; maxmods = max(cof2trans); 数字; plot(maxmods,freq)axis([0 60 0 1])最好的问候
电工

4

连续小波变换(CWT)是一种时标分析方法。是的,您正确地阅读了它,按比例而不是频率。但是,可以将比例尺映射到频率,甚至非常容易。由于您是MATLAB用户,因此您可能需要使用此函数该函数将执行以下操作:

F = scal2frq(A,'wname',DELTA)返回与A给定的小数位对应的伪频率,小波函数'wname'(有关更多信息,请参见wavefun)和采样周期DELTA。

如您所见,频率不是信号中的实际频率,而是近似值。如果需要实际频率,则应使用短时傅立叶变换(STFT)。

那么,什么时候应该使用CWT?作为一般原则,当信号是瞬态的(即具有快速变化)时,小波效果很好。

编辑:哈哈,我不知道我在这里做什么。抱歉:-D完全没有回答您的问题。只需阅读标题即可。


@wave您的信息是正确的。但是那又怎样呢?我只想有一个像第一张图片右侧的图。频率与幅度。只要我可以使用scal2freq,就可以得到比例与幅度的关系。
电工

“如果想要真实的频率,则应该使用短时傅立叶变换(STFT)。” Morlet小波的频率与高斯窗STFT的频率相同。两种变换的“原子”是相同的。
endolith 2013年

0

不知道您是否仍然需要帮助...

如果您想要频率与幅度的关系,请使用“网格/冲浪”命令绘制系数。

然后更改绘图的方向,以便获得所需的结果。为此,请参见“查看”命令。


谢谢,我几个月前解决了这个问题,并发表了我的结果。但是,下次我会尝试您的替代方法。但是,请将您的答案移至评论位置。祝好运。@ asilva732
电工
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.