2017-08-15 3 views
-1

J'ai un signal dans lequel je souhaite introduire plusieurs décalages et retards, où les décalages vont de 0.5 à 5 et les retards vont de 1 à 7.Ajout de décalage et de retard

Je fournis ici un exemple de signal pour illustrer le problème que j'ai, mais la taille de mes données réelles est 1x1666520.

Comment introduire ces changements dans le signal?

code Exemple:

t = [ 0 : 1 : 50];   % Time Samples 
f = 45;      % Input Signal Frequency 
Fs = 440;      % Sampling Frequency 
data = sin(2*pi*f/Fs*t)'; 

T.InputOffset = 5; 
T.OutputOffset = 5; 

addoffset = retrend(data); 
Y = step(delay,data); 

figure(); plot(t,addoffset,t,Y); 
+0

La prochaine fois, s'il vous plaît préciser l'erreur/problème que vous obtenez dans le corps de la question. –

+0

Merci beaucoup et bien sûr la prochaine fois que je vais aussi attacher le type d'erreur que je reçois en question – Peter

+0

Dev-iL pouvez-vous s'il vous plaît jeter un oeil à la dernière édition. – Peter

Répondre

1

Lorsque vous essayez d'exécuter votre code d'exemple, je reçois cette erreur:

Undefined function retrend for input arguments of type double .

La cause de cela est que la fonction retrend, qui est partie du System Identification Toolbox, nécessite une data object (iddata) comme une entrée.

Si vous avez la boîte à outils mentionnée ci-dessus, vous pouvez créer un objet de données comme dans example for retrend, puis ajouter une tendance similaire à ce que vous avez déjà essayé. À mon avis, ajouter un délai est plus délicat, car vous devez maintenir la même longueur de vecteur. Vous pouvez remplir vos vecteurs avec des valeurs factices (telles que NaN) dans le bon sens.

Appliqué à votre cas, nous obtenons:

function q45688607 
%% Generate data: 
t = (0 : 1 : 50).';  % Time Samples 
f = 45;     % Input Signal Frequency 
Fs = 440;     % Sampling Frequency 
y = sin(2*pi*f/Fs*t); 
d_data = iddata(y, t, 1/Fs); 

%% Add offset: 
T = getTrend(d_data); 
% <detrend data if needed> 
T.InputOffset = 5; 
T.OutputOffset = 5; 
afterOffset = retrend(d_data,T); 

%% Add delay: 
delaySamples = 8; % Must be a non-negative value 
afterDelay = iddata([NaN(delaySamples,1); d_data.OutputData],... 
        [d_data.InputData; NaN(delaySamples,1)], 1/Fs);  
%% Plot: 
figure(); plot(d_data,afterOffset, afterDelay); 

Cédant:

After adding a trend + offset

+0

Merci beaucoup Dev-iL C'est la réponse parfaite qui Je cherchais juste à me demander si je veux faire cela pour différents ensembles de valeurs de décalage et de retard – Peter