2013-06-28 53 views
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.8s和我要加0.3s的複合信號,我設法用我的0.8的速率用你的插值方法對0.3s信號進行採樣s信號。我想我已經解決了這個問題。第二個問題涉及如何組合我設法做出的兩個信號,但是當我使用一個while循環以重複20s以上的複合信號時,從聲音輸出獲得的信號不是我期望的那樣它發出存儲的複合信號數組(包含0.8s = slowInterp信號0.3s的信號)。我已經包含了所有的代碼和功能。基本上,我需要while循環中的聲音輸出與複合信號同步,例如:如果我有一個信號每1s重複一次,我會希望在一個持續10秒鐘的循環中聽到一聲蜂鳴聲,以產生10聲嗶嗶聲等。如何在matlab代碼中的一個音頻通道上同時輸出由兩個具有不同時間段的信號組成的複合信號?

+0

我真的不知道該如何提供幫助,你很清楚你想得到什麼,但是代碼太多,缺少'ECG_Gen'功能,很難說從哪裏開始。看起來他們在同一個步驟,但是有這麼多的未知數,很難說。 – macduff

+0

我重新發布了附加代碼和評論的問題 – Federico

回答

0

很難準確地知道你需要什麼,但是可能對以較慢速率採樣的序列進行插值會適用於您的應用程序。

如果t1s是從你的快序列的時間,並t2s是從你慢序次,slow是你慢序列然後執行:

slowInterp = interp1(t2s, slow, t1s); 

現在你將不得不更快的採樣的列率slow率。

這僅用於顯示時間序列。如果您正在進行任何光譜分析,這將引入工件,但這是一個更高級的主題。

在信號處理工具箱中使用resample函數也可能有用。

+0

嘿非常感謝您回覆我,我已經利用了您的插值,但仍然存在從顯示器獲取的讀數中的小問題。我已重新發布了包含所有代碼和評論的問題 – Federico

相關問題