Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在matlab代码中,如何在一个音频通道上同时输出由两个不同时间段的信号组成的复合信号? %------------------------------------------------------------------- %用于生成1个心跳信号的ECG的函数 功能[心跳,t1]=心电图(心率,脉宽,安培) Fs=48000; 延迟=((60/HR)/2)-(0.5*脉冲宽度); t1=-延迟:(1/Fs):延迟; 心跳=安培*三脉冲(t1,脉冲宽度); %------------------------------------------------------------------- %测试电路配置 功能[FECG\U MECG,混合ECG,快速时间]=测试电路(FHR,MHR) Fs=48000; %FHR=150; %MHR=60; F脉冲宽度=30e-3; 脉冲宽度=60e-3; FAmp=0.2; MAmp=0.5; %胎儿心电发生器 %------------------------------------------------ [FECG,FHR\U延迟]=ECG\U Gen(FHR,F脉冲宽度,FAmp); %母体心电图发生器 %------------------------------------------------ [MECG,MHR_延迟]=ECG_Gen(MHR,M脉冲宽度,MAmp); %复合信号实现 %------------------------------------------------ %为复合信号算法设置参数 如果长度(MECG)>长度(FECG)%检查两个ECG信号的时间序列 slowECG=FECG;%将插值设置为较慢的速率 fastECG=MECG; timeSeg=长度(MECG); fastTime=MHR_延迟;%设置采样时间 slowTime=FHR\U延迟; 其他的 slowECG=MECG; fastECG=FECG; timeSeg=长度(FECG); fastTime=FHR\U延迟; slowTime=MHR\u延迟; 结束 FECG_MECG=零(时间间隔,2);%保持立体声输出 FECG_MECG(:,2)=快速心电图(1,:);%将更高速率的信号分配给一个通道 %低速率采样心电图的插值 slowECGInterp=interp1(slowTime、slowECG、fastTime); slowECG=num2单元(SLOWECGERP);%转换为单元阵列以删除NaN slowECG(cellfun(@(slowECG)any(isnan(slowECG)),slowECG))=[]; slowECG=cell2mat(slowECG); j=1; 对于i=1:timeSeg FECG_MECG(i,1)=慢wecg(1,j); 如果j==长度(slowECG) j=0; 结束 j=j+1; 结束 混合心电图=FECG\U MECG(:,1)+FECG\U MECG(:,2);%保持单声道输出 %而(1) %声音(混合心电图,Fs); %结束 %------------------------------------------------------------------- %测试波形脚本 清除所有 %clc clc Fs=48000; %对于i=1:3 %toc MHR=60; FHR=200; %心电插值信号的获取与合成 [FECG\U MECG,混合心电图,快速时间]=测试电路(FHR,MHR); %用于测试目的 [MECG,MHR_延迟]=ECG_Gen(60,60e-3,0.5); %t=计时器('TimerFcn','stat=false','Period',2.0); wavwrite(FECG_-MECG(:,2),Fs,'ECGwav.wav'); i=0; a=1; 抽搐 而(1) 而(总有机碳4 打破 结束 结束 %启动(t) %抽搐 %t=cputime; %y=wavread('ECGwav.wav'); %而(1) %声音(y,Fs); %结束 %toc_Matlab_Signal Processing_Composite_Audio - Fatal编程技术网

在matlab代码中,如何在一个音频通道上同时输出由两个不同时间段的信号组成的复合信号? %------------------------------------------------------------------- %用于生成1个心跳信号的ECG的函数 功能[心跳,t1]=心电图(心率,脉宽,安培) Fs=48000; 延迟=((60/HR)/2)-(0.5*脉冲宽度); t1=-延迟:(1/Fs):延迟; 心跳=安培*三脉冲(t1,脉冲宽度); %------------------------------------------------------------------- %测试电路配置 功能[FECG\U MECG,混合ECG,快速时间]=测试电路(FHR,MHR) Fs=48000; %FHR=150; %MHR=60; F脉冲宽度=30e-3; 脉冲宽度=60e-3; FAmp=0.2; MAmp=0.5; %胎儿心电发生器 %------------------------------------------------ [FECG,FHR\U延迟]=ECG\U Gen(FHR,F脉冲宽度,FAmp); %母体心电图发生器 %------------------------------------------------ [MECG,MHR_延迟]=ECG_Gen(MHR,M脉冲宽度,MAmp); %复合信号实现 %------------------------------------------------ %为复合信号算法设置参数 如果长度(MECG)>长度(FECG)%检查两个ECG信号的时间序列 slowECG=FECG;%将插值设置为较慢的速率 fastECG=MECG; timeSeg=长度(MECG); fastTime=MHR_延迟;%设置采样时间 slowTime=FHR\U延迟; 其他的 slowECG=MECG; fastECG=FECG; timeSeg=长度(FECG); fastTime=FHR\U延迟; slowTime=MHR\u延迟; 结束 FECG_MECG=零(时间间隔,2);%保持立体声输出 FECG_MECG(:,2)=快速心电图(1,:);%将更高速率的信号分配给一个通道 %低速率采样心电图的插值 slowECGInterp=interp1(slowTime、slowECG、fastTime); slowECG=num2单元(SLOWECGERP);%转换为单元阵列以删除NaN slowECG(cellfun(@(slowECG)any(isnan(slowECG)),slowECG))=[]; slowECG=cell2mat(slowECG); j=1; 对于i=1:timeSeg FECG_MECG(i,1)=慢wecg(1,j); 如果j==长度(slowECG) j=0; 结束 j=j+1; 结束 混合心电图=FECG\U MECG(:,1)+FECG\U MECG(:,2);%保持单声道输出 %而(1) %声音(混合心电图,Fs); %结束 %------------------------------------------------------------------- %测试波形脚本 清除所有 %clc clc Fs=48000; %对于i=1:3 %toc MHR=60; FHR=200; %心电插值信号的获取与合成 [FECG\U MECG,混合心电图,快速时间]=测试电路(FHR,MHR); %用于测试目的 [MECG,MHR_延迟]=ECG_Gen(60,60e-3,0.5); %t=计时器('TimerFcn','stat=false','Period',2.0); wavwrite(FECG_-MECG(:,2),Fs,'ECGwav.wav'); i=0; a=1; 抽搐 而(1) 而(总有机碳4 打破 结束 结束 %启动(t) %抽搐 %t=cputime; %y=wavread('ECGwav.wav'); %而(1) %声音(y,Fs); %结束 %toc

在matlab代码中,如何在一个音频通道上同时输出由两个不同时间段的信号组成的复合信号? %------------------------------------------------------------------- %用于生成1个心跳信号的ECG的函数 功能[心跳,t1]=心电图(心率,脉宽,安培) Fs=48000; 延迟=((60/HR)/2)-(0.5*脉冲宽度); t1=-延迟:(1/Fs):延迟; 心跳=安培*三脉冲(t1,脉冲宽度); %------------------------------------------------------------------- %测试电路配置 功能[FECG\U MECG,混合ECG,快速时间]=测试电路(FHR,MHR) Fs=48000; %FHR=150; %MHR=60; F脉冲宽度=30e-3; 脉冲宽度=60e-3; FAmp=0.2; MAmp=0.5; %胎儿心电发生器 %------------------------------------------------ [FECG,FHR\U延迟]=ECG\U Gen(FHR,F脉冲宽度,FAmp); %母体心电图发生器 %------------------------------------------------ [MECG,MHR_延迟]=ECG_Gen(MHR,M脉冲宽度,MAmp); %复合信号实现 %------------------------------------------------ %为复合信号算法设置参数 如果长度(MECG)>长度(FECG)%检查两个ECG信号的时间序列 slowECG=FECG;%将插值设置为较慢的速率 fastECG=MECG; timeSeg=长度(MECG); fastTime=MHR_延迟;%设置采样时间 slowTime=FHR\U延迟; 其他的 slowECG=MECG; fastECG=FECG; timeSeg=长度(FECG); fastTime=FHR\U延迟; slowTime=MHR\u延迟; 结束 FECG_MECG=零(时间间隔,2);%保持立体声输出 FECG_MECG(:,2)=快速心电图(1,:);%将更高速率的信号分配给一个通道 %低速率采样心电图的插值 slowECGInterp=interp1(slowTime、slowECG、fastTime); slowECG=num2单元(SLOWECGERP);%转换为单元阵列以删除NaN slowECG(cellfun(@(slowECG)any(isnan(slowECG)),slowECG))=[]; slowECG=cell2mat(slowECG); j=1; 对于i=1:timeSeg FECG_MECG(i,1)=慢wecg(1,j); 如果j==长度(slowECG) j=0; 结束 j=j+1; 结束 混合心电图=FECG\U MECG(:,1)+FECG\U MECG(:,2);%保持单声道输出 %而(1) %声音(混合心电图,Fs); %结束 %------------------------------------------------------------------- %测试波形脚本 清除所有 %clc clc Fs=48000; %对于i=1:3 %toc MHR=60; FHR=200; %心电插值信号的获取与合成 [FECG\U MECG,混合心电图,快速时间]=测试电路(FHR,MHR); %用于测试目的 [MECG,MHR_延迟]=ECG_Gen(60,60e-3,0.5); %t=计时器('TimerFcn','stat=false','Period',2.0); wavwrite(FECG_-MECG(:,2),Fs,'ECGwav.wav'); i=0; a=1; 抽搐 而(1) 而(总有机碳4 打破 结束 结束 %启动(t) %抽搐 %t=cputime; %y=wavread('ECGwav.wav'); %而(1) %声音(y,Fs); %结束 %toc,matlab,signal-processing,composite,audio,Matlab,Signal Processing,Composite,Audio,嘿,非常感谢你回复我,我已经使用了你的插值,但是从显示器上获得的读数仍然有一些小问题。首先,假设我有一个固定时间周期的恒定信号,比如说,0.8s,我想添加0.3s的合成信号,我已经设法使用你的插值方法,以0.8s信号的速率对0.3s信号进行采样。我想我已经解决了这个问题。第二个问题涉及如何组合这两个信号,我已经设法做到了,但当我使用while循环来重复合成信号时,比如说超过20秒,从声音输出中获得的信号与我预期的不太一样,因为它探测到存储的合成信号阵列,其中包含(0.8s的信号=0.3s的慢波信

嘿,非常感谢你回复我,我已经使用了你的插值,但是从显示器上获得的读数仍然有一些小问题。首先,假设我有一个固定时间周期的恒定信号,比如说,0.8s,我想添加0.3s的合成信号,我已经设法使用你的插值方法,以0.8s信号的速率对0.3s信号进行采样。我想我已经解决了这个问题。第二个问题涉及如何组合这两个信号,我已经设法做到了,但当我使用while循环来重复合成信号时,比如说超过20秒,从声音输出中获得的信号与我预期的不太一样,因为它探测到存储的合成信号阵列,其中包含(0.8s的信号=0.3s的慢波信号)。我已经包括了所有的代码和功能。基本上,我需要while循环中的声音输出与复合信号同步。例如:如果我有一个信号每1s重复一次,我希望在while循环中听到一声嘟嘟声,持续10秒以产生10声嘟嘟声,等等。很难确切地说出你需要什么,但可能需要执行interpola对以较慢速率采样的序列进行优化将适用于您的应用程序

如果
t1s
是较快序列的时间,
t2s
是较慢序列的时间,
slow
是较慢序列的时间,则执行以下操作:

%-------------------------------------------------------------------

% 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
现在,您将以更快的速率对序列
slow
进行采样

这只在显示时间序列时有用。如果您正在进行任何频谱分析,这将引入伪影,但这是一个更高级的主题


使用信号处理工具箱中的
重采样
功能也可能有用。

我真的不知道该如何帮助,你很清楚你想要得到什么,但是代码太多了,它缺少
ECG\u Gen
功能,很难判断从何处开始。看起来他们在同一步,但有很多太多的未知,很难说。我已经用额外的代码和注释重新发布了问题。非常感谢您回复我,我已经使用了您的插值,但是从监视器获得的读数中仍然存在一些小问题。我已经用所有的代码和注释重新发布了问题
slowInterp = interp1(t2s, slow, t1s);