0

我们在这里考虑如何创建重叠 64 的 Hamming-64 窗口。它是由

h = hamming(64);
h2 = hamming(38);
h = conv(h, h2);

现在,我们正在考虑如何将此窗口函数应用于时频工具箱中的 Auger 等人的 Wigner-Ville 分布函数的结果变量。函数tfrwv.m没有窗口函数的任何参数。

所以我们有这些变量

[B,T,F] = tfrwv(data, 1:length(data), length(data));

是相关问题的一个答案,但并不完全相同。有人说将窗口函数应用于结果

逐点相乘

h的尺寸为101x1 双倍,而TF的尺寸为5001x1 双倍。因此,如果逐点相乘,似乎需要对窗口向量进行外推。

这里还有一个解释

大约在第二个代码块进行到一半时,我将窗口函数应用于缓冲信号。这实际上是窗口函数与每个缓冲的时间序列数据块的向量乘法。我只是使用偷偷摸摸的对角矩阵技巧来有效地做到这一点。

如何对变量B、TF应用窗口函数?

4

4 回答 4

1

查看这篇关于 Wigner 分布的论文。从第8页到第11页。我想tfr(indices,icol) = x(ti+tau,1) .* conj(x(ti-tau,xcol));在代码中实现公式(23)。和和指数部分等价于tfr= fft(tfr);。或者您也可以将我引用的那两行代码视为公式(24)。注意:在论文和代码中,他们都假设信号是周期性的N/2,其中Nlength(data)。没关系,你不需要在data这里改变你的。他们只是对原始数据进行排序。

从论文中引用,在处理 WDF 之前,对时域信号应用一个修改的 Hamming 窗口,以减少由数据的有限记录的不连续性引起的泄漏,这将被称为数据锥化。据我了解,你可以在这里做的是

data1 = conv(h,data);
[B,T,F] = tfrwv(data1, 1:length(data1), length(data1)); 

我的回答是根据您的实施完成的。你现在可以试一试。


我不完全理解的是您创建重叠 60% 的 Hamming-64 窗口的方法。在spectrogram中,代码将您data分成长度为每个 64 的小段。如果您想达到与spectrogramwith相同的效果tfrwv,我想您可能还需要拆分您的data, 并使用conv(data(1:64),hamming(64)), conv(data(38:101),hamming(64)), conv(data(76:139),hamming(64)),....作为tfrwv分别。

于 2013-12-25T23:44:39.980 回答
0

延伸到 lennon310 的答案。

我跑

data1 = conv(h,data);
[B,T,F] = tfrwv(data1, 1:length(data1), length(data1));

然后用没有窗口的图片绘制它

在此处输入图像描述

我知道没有窗口的图片是正确的,因为我可以看到 60 Hz 水平线是由 MIT-BIH 心律失常数据库中的测量系统设置引起的。患者68岁,心肌梗塞陈旧,每秒65次的节拍是适合这种方法的。

我的原始版本 hamming-64 的实现图片不合适。每分钟有这样的节拍,这个人不会活很久。

于 2013-12-26T00:12:48.343 回答
0

2nd Extension to lennon310's answer

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

I do not know how I should combine the picees of data from b to B. Matrix diagonalization does not seem to be the appropriate choice.

I run using only hamming(64) for simplification, discussed here about implementation of matrix diagonalization

    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

I get

enter image description here

This is not proper result. The problem is in understanding what the matrix B should be. What should the matrix B look like after adding b to B?

于 2013-12-26T01:05:09.743 回答
0

在我对 lennon310 答案的第三次扩展中有一个错误及其症状。lennon310 答案的第四次扩展

我跑

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

得到这样的照片

在此处输入图像描述

我没有设法在一张照片中显示所有薄峰。这里有一个关于它的新问题。

我正在策划这个

t = 1/360; % 360 samples per second
fs = 360.5;
imagesc(T*t, F*fs, abs(B))

该算法正在将点累积到正确的维度。 我不确定乘以虚拟常数是否是更早的正确方法。

于 2013-12-26T13:23:26.650 回答