1
%-------------------------------------------------------------------

% Function to Generate ECG of 1 heart beat signal

function [Heartbeat,t1] = ECG_Gen (HR,pulse_width,Amp)

Fs = 48000;

delay = ((60/HR)/2)-(0.5*pulse_width);

t1 = -delay:(1/Fs):delay;

Heartbeat = Amp*tripuls (t1,pulse_width);

%-------------------------------------------------------------------
%Test Circuit configuration

function [FECG_MECG,Mixed_ECG,fastTime] = Test_Circuit (FHR,MHR)

Fs = 48000;
%FHR = 150;
%MHR = 60;
Fpulse_width = 30e-3;
Mpulse_width = 60e-3;
FAmp = 0.2;
MAmp = 0.5;

% Fetal ECG Gen
%------------------------------------------------

[FECG,FHR_Delay]= ECG_Gen (FHR,Fpulse_width,FAmp);

% Maternal ECG Gen
%------------------------------------------------

[MECG,MHR_Delay]= ECG_Gen (MHR,Mpulse_width,MAmp);

% Composite signal implementation
%------------------------------------------------

% Set parameters for Composite signal Algorithms

if length (MECG) > length (FECG)        % Check for time sequences for both ECG signal
    slowECG = FECG;                     % Set interpolation to slower rate
    fastECG = MECG;
    timeSeg = length(MECG);
    fastTime = MHR_Delay;               % Set sampling times
    slowTime = FHR_Delay;    
else 
    slowECG = MECG;
    fastECG = FECG;
    timeSeg = length(FECG);
    fastTime = FHR_Delay;              
    slowTime = MHR_Delay;
end

FECG_MECG = zeros (timeSeg,2);    % To hold stereo output

FECG_MECG(:,2) =  fastECG(1,:);        % Assign higher rate signal to one channel

% Interpolation on the slower rater sampled ECG

slowECGInterp = interp1 (slowTime,slowECG,fastTime);

slowECG = num2cell(slowECGInterp);          % Conversion to cell Array in order to remove NaN

slowECG(cellfun(@(slowECG) any(isnan(slowECG)),slowECG)) = [];

slowECG = cell2mat(slowECG);

j = 1;

for i = 1:timeSeg

    FECG_MECG(i,1) =  slowECG(1,j);   

     if j == length(slowECG)
         j = 0;
     end     

    j = j+1; 
end

Mixed_ECG  =  FECG_MECG(:,1) + FECG_MECG(:,2);      % to hold mono output






 %while (1)
  %sound(Mixed_ECG ,Fs);
%end

%-------------------------------------------------------------------
% Test Wave script

clear all
%clc
clc
Fs = 48000;

%for i = 1:3
%toc

MHR = 60;
FHR = 200;

% Obtain ECG interpolated signal and composite
[FECG_MECG,Mixed_ECG,fastTime] = Test_Circuit (FHR,MHR);

% for test purposes
[MECG,MHR_Delay]= ECG_Gen (60,60e-3,0.5);

%t = timer ('TimerFcn','stat=false','Period',2.0);
wavwrite (FECG_MECG(:,2),Fs,'ECGwav.wav');
i = 0;
a = 1;
tic
while (1)

while (toc < 20*a)

sound (MECG,Fs);

end
toc
a = a+1;
[MECG,MHR_Delay]= ECG_Gen (60*a,60e-3,0.5);

if a > 4
    break
end

end

%start(t)
%tic
%t = cputime;

%y = wavread('ECGwav.wav');


%while (1)
%    sound(y,Fs);
%end
%toc

返信ありがとうございます。補間を使用しましたが、モニターから取得した読み取り値にはまだ小さな問題があります。まず第一に、固定時間0.8秒の一定信号があり、0.3秒の複合信号を追加したいとします。補間法を使用して、0.8秒のレートで0.3秒信号をサンプリングすることができましたの信号。私はこの問題を解決したと思います。2番目の問題は、私がなんとかして2つの信号を結合する方法を扱いますが、複合信号を20秒以上繰り返すためにwhileループを使用すると、サウンド出力から得られた信号は、私が期待したものとはまったく異なりますそのサウンディングは、格納された複合信号の配列を含みます (0.8s の信号 = 0.3s の slowInterp 信号)。すべてのコードと機能を含めました。基本的、

4

1 に答える 1

0

何が必要かを正確に伝えるのは難しいですが、おそらく、より遅いレートでサンプリングされたシーケンスで補間を行うと、アプリケーションでうまくいくでしょう。

t1sが速いシーケンスからのt2s時間であり、遅いシーケンスからの時間であり、遅いシーケンスからの時間である場合は、次のslowようにします。

slowInterp = interp1(t2s, slow, t1s);

slowこれで、より高速なレートでシーケンスがサンプリングされます。

これは、時系列を表示する場合にのみ役立ちます。スペクトル分析を行っている場合、これによりアーティファクトが発生しますが、これはより高度なトピックです。

信号処理ツールボックスで関数を使用するresampleことも役立つ場合があります。

于 2013-06-28T19:14:53.713 に答える