0

matlab の場合、入力信号に適用するために 50% オーバーラップする一連のハニング ウィンドウを生成したいと考えています。ウィンドウ間のオーバーラップ部分については、(x + y)/2 などの平均値を取り、信号にのみ適用するようにしたいと考えています。

4

2 に答える 2

0

次のスクリプトは、50%オーバーラップするハニングウィンドウのシフトされたバージョンを追加します。最初と最後のウィンドウを除いて、すべてのウィンドウは0.5でスケーリングされます。最初のウィンドウの後半は0.5でスケーリングされ、最後のウィンドウの前半は0.5でスケーリングされます。

% Length of input sequence
N = 600;
% Length of one Hanning window
L = 50;
% can be periodic or symmetric
sampling_flag = 'periodic';

all_windows = zeros(N, 1);
figure; hold all;
for k = 0:floor(2*(N-L)/L)
    current_window = hann(L, sampling_flag);
    if k == 0        
        current_window(L/2 + 1 : end) = current_window(L/2 + 1 : end) * 0.5;        
    elseif k == floor(2*(N-L)/L)
        current_window(1 : L/2) = current_window(1 : L/2) * 0.5;
    else
        current_window = current_window * 0.5;
    end
    all_windows = all_windows + [zeros(k*L/2, 1); current_window; zeros(N - L - k*L/2, 1)];
    plot([zeros(k*L/2, 1); hann(L); zeros(N - L - k*L/2, 1)]);
end
hold off;
figure;
plot(all_windows);
于 2012-11-20T08:24:50.643 に答える
0

Matlab でウィンドウを生成する場合、'periodic' オプションを追加できます。次に、50% のオーバーラップがある場合、2 つの連続するウィンドウのオーバーラップは 1 になります。例として、次のことを試すことができます。

w=hanning(100,'periodic');
x=w(1:50)+w(51:100);
unique(x)

ans =

    1.0000
于 2012-11-19T15:34:11.503 に答える