2015-08-26 156 views
2

我有一個包含從RF收發器獲得的相移信息的波形。它不是一個普通的波形,而是如下圖所示的不均勻。我已經說明了使用paint的信封,以及如何在MATLAB中做到這一點? enter image description here如何找到不均勻波形的包絡線

我也附上了waveform.csv。在我的MATLAB代碼中,我已經使用平均濾波器來平滑原始信號。

Waveform csv file

envelope.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 (simple averaging filter)

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 
+1

你想繪製一條從峯到峯的線條並使其平滑嗎?在這種情況下,您可以使用一個簡單的find命令來檢查一個點是否高於其最近的鄰居,將最大值分配給一個單獨的數組,平滑該數據並且存在您的信封。 – Adriaan

回答

3

簡單envelope detector可以按照使用二極管檢測器的思想可以容易地實現:

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)(其中fmax是您的信封帶寬,fs是採樣頻率)應該是一個很好的初始值。

這通常會跟隨一個低通濾波器(例如您提供的myfilter)。

如基於所提供的數據的樣本執行,使用decayfactor=exp(-5/5000)和平均濾波器具有300個樣本窗口產生以下情節(用藍色的原始數據和在紅色信封):

envelope plot

+0

謝謝您的建議和編輯。我會嘗試使用這種包絡檢測器的方式。 –