我们在考虑here如何创建重叠的汉明-64窗口64。 它是由
完成的h = hamming(64);
h2 = hamming(38);
h = conv(h, h2);
现在,我们正在考虑如何将此窗口函数应用于Time-Frequency Toolbox中Auger等人的Wigner-Ville分布函数的结果变量。 函数tfrwv.m没有窗口函数的任何参数。
所以我们有这些变量
[B,T,F] = tfrwv(data, 1:length(data), length(data));
Here是相关问题的一个答案,但不完全相同。 有人说将窗口函数应用于结果
只需逐点增加
h 的尺寸为101x1双倍,而 T 和 F 5001x1加倍。 因此,如果逐点相乘,窗口向量似乎需要外推。
还有一个解释here
在第二个代码块的大约一半时,我应用了一个窗口 对缓冲信号起作用。这实际上是一个向量 窗口函数与每个缓冲的时间块相乘 系列数据。我只是使用偷偷摸摸的对角矩阵技巧来做到这一点 有效。
如何将窗口函数应用于变量 B,T,和 F ?
答案 0 :(得分:1)
查看有关Wigner分发的this paper。从第8页到第11页。我认为代码中的tfr(indices,icol) = x(ti+tau,1) .* conj(x(ti-tau,xcol));
实现了公式(23)。和和指数部分相当于tfr= fft(tfr);
。或者您也可以将我引用的那两行代码视为公式(24)。注意:在论文和代码中,他们假设信号是N/2
的周期性信号,其中N
是length(data)
。没关系,您无需在此处更改data
。他们只是对原始数据进行了各种扩展。
引用文章 在处理WDF之前,应用了修改后的汉明窗口 时域信号,以减少由不连续性引起的泄漏 有限的数据记录,将被称为数据逐渐减少。 据我所知,你在这里可以做的是
data1 = conv(h,data);
[B,T,F] = tfrwv(data1, 1:length(data1), length(data1));
我的答案是根据您的实施完成的。你现在可以尝试一下。
我不完全理解的是你创建Hamming-64重叠窗口60%的方法。在spectrogram
中,代码会将您的data
拆分为每个长度为64的小段。如果您希望spectrogram
与tfrwv
达到相同的效果,我想你可能还需要拆分data
,并分别使用conv(data(1:64),hamming(64))
,conv(data(38:101),hamming(64))
,conv(data(76:139),hamming(64))
,....作为tfrwv
的输入。
答案 1 :(得分:0)
扩展到lennon310的答案。
我跑
data1 = conv(h,data);
[B,T,F] = tfrwv(data1, 1:length(data1), length(data1));
然后用无窗口的图片绘制
我知道没有窗口的图片是正确的,因为我可以看到由MIT-BIH心律失常数据库中的测量系统的设置引起的60Hz水平线。 患者年龄为68岁,患有老年心肌梗塞,因此每秒节拍达到65次是合适的。
实现原始版本的hamming-64的图片不合适。 这个人不会每分钟都有这样的节拍。
答案 2 :(得分:0)
第二次延伸到lennon310的回答
data1 = conv(data(1:64),hamming(64)); [B,T,F] = tfrwv(data1, 1:length(data1), length(data1));
data1 = conv(data(38:101),hamming(64)); [b,t,f] = tfrwv(data1, 1:length(data1), length(data1));
我不知道应该如何将 b 的数据与 B 结合起来。 矩阵对角化似乎不是合适的选择。
我仅使用hamming(64)
进行简化,讨论here关于矩阵对角化的实现
B = 0; T = 0; F = 0;
data1 = conv(data(1 : 64),hamming(64)); [B,T,F] = tfrwv(data1, 1:length(data1), length(data1));
for i=1:10
data1 = conv(data( 1 + i*37 : 64 + i*37 ),hamming(64)); [b,t,f] = tfrwv(data1, 1:length(data1), length(data1));
B = blkdiag(B,b); T = [T t]; F = [F; f];
end
我得到了
这不是正确的结果。 问题在于理解矩阵 B 应该是什么。 将 b 添加到 B 后矩阵B应该是什么样?
答案 3 :(得分:0)
在我的第三次延期中,有一个错误及其症状是lennon310的答案。 lennon310答案的第4次延期
我跑
h = hamming(64);
h2 = hamming(38);
h = conv(h, h2);
B = 0; T = 0; F = 0;
data1 = filter(data(1 : 64),1,h); [B,T,F] = tfrwv(data1, 1:length(data1), length(data1));
for i=1:133
data1 = filter(data( 1 + i*37 : 64 + i*37 ),1,h); [b,t,f] = tfrwv(data1, 1:length(data1), length(data1));
B = [B b']; T = [T t]; F = [F; f];
end
data1 = filter(data(4959 : 5001),1,h); [b,t,f] = tfrwv(data1, 1:length(data1), length(data1));
B = [B b']; T = [T t]; F = [F; f];
T = 49.8899*T; % dummy constant to get appropriate time interval
并获得这样的照片
我没有设法在一张照片中显示所有薄的峰值。 关于它的新问题here。
我正在通过
绘图t = 1/360; % 360 samples per second
fs = 360.5;
imagesc(T*t, F*fs, abs(B))
算法正在将点累积到正确的维度。 我不确定是否乘以虚拟常数是提前行走的正确方法。