【问题标题】:To scale values from Matlab's spectrogram to real range将 Matlab 频谱图中的值缩放到实际范围
【发布时间】:2013-12-23 17:18:15
【问题描述】:

我跑

spectrogram(data, 64, 60, 256, 2,  'yaxis');

我明白了

我想获得从 0 到 180 Hz 的范围,而不是从 0 到 1 的标准化范围。 我可以改变轴

axis([0 450 0 180])

但它不会改变值。

我跑不成功

spectrogram(180 .* data, 64, 60, 256, 2,  'yaxis');

如何将范围从标准化范围扩展到实际范围?

【问题讨论】:

  • spectrogram 实际上将时间作为 y 轴,将频率作为 x 轴。所以你确定你只是把你的坐标轴标记错了吗?
  • @thewaywewalk 你是对的。我正在绘制数据的傅立叶变换,而不是时间和频率。

标签: matlab signal-processing spectrogram


【解决方案1】:

x 轴应该是频率。您需要知道data 的采样率fs(是2 吗?)。那么频率范围将是(0:63)/64*fs

其实可以在谱图函数中得到频率输出:

[B,F,T]=spectrogram(data,64,60,256,2);  % if fs = 2 in your case

F是频率范围。

【讨论】:

  • 如何从 F 和 T 中的这些点绘制时频图?我得到 F 的 129x1 双倍和 T 的 1x218 双倍。
  • 使用imagesc(abs(B)),F代表列,T代表行
  • imagesc(T, F, abs(B)) 似乎正在工作。仍然是范围的问题。值来自 [0,1],但应该是 [0,180] Hz。
  • F*fs 是您的实际频率,在您的情况下为 (2*F)。请参阅我在 (0:63)/64*fs 上的回答。它们是等价的。但问题是,你的采样率只有 2 Hz,所以你不会得到 180 Hz 的信号。
  • imagesc(abs(B(end:-1:1,:)))
猜你喜欢
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 2023-02-14
  • 1970-01-01
  • 2019-11-09
  • 2011-03-18
相关资源
最近更新 更多