2

RF トランシーバーから取得した位相シフト情報を含む波形があります。規則的な波形ではなく、下の写真のように凹凸があります。ペイントを使用してエンベロープを説明しましたが、MATLAB でそれを行うにはどうすればよいですか? ここに画像の説明を入力

また、waveform.csv を添付しました。私の MATLAB コードでは、生の信号を平滑化するために既に平均化フィルターを使用しています。

波形csvファイル

エンベロープ.m :

clc; clear all; close all;

%% Extract data from .csv
file = '150825_px6_human_rotcw_0to60cm_Ch1.csv';
data = csvread(file, 0, 3);

%% Shift time
shift = data(1,1);
for i = 1:length(data)
    t(i) = data(i,1) - shift;
end

%% Low pass filter
filterlen = 500;
y = myfilter(data(:,2), filterlen);

%% Plot
figure;
plot(data(:,1), data(:,2));
title('Raw signal');

figure;
plot(t(1:end-filterlen+1), y);
title('After low pass filter');

myfilter.m (単純な平均化フィルター) :

function y = myfilter(x,a) 
    for i = 1:(length(x)-(a-1))
        y(i) = sum(x(i:(i+a-1)))/a;
    end
    y = y';
end
4

2 に答える 2

4

単純なエンベロープ検出器は、以下を使用してダイオード検出器のアイデアに従って簡単に実装できます。

envelope = data(1,2);
for  i = 2:length(data)
    if (abs(data(i,2)) > envelope)
        envelope = abs(data(i,2));
    else
        envelope  = envelope * decayfactor;
        data(i,2) = envelope;
    end
end

decayfactor、不均一な信号の変動よりもはるかに長く、予想される信号エンベロープの帯域幅の逆数よりも小さい減衰時定数を持つように選択する必要があります。少し実験する必要があるかもしれませんが、 (エンベロープ帯域幅はどこで、サンプリング周波数はdecayfactor=exp(-fmax/fs)どこですか) などの値が適切な開始値になるはずです。fmaxfs

これには通常、ローパスフィルターが続きます(myfilter提供したものなど)。

提供されたデータに基づくサンプル実行として、decayfactor=exp(-5/5000)300 サンプル ウィンドウで平均フィルターを使用すると、次のプロットが得られます (元のデータは青、エンベロープは赤)。

エンベロープ プロット

于 2015-08-26T13:42:38.163 に答える