2014-09-17 1 views
1

J'ai un signal principal de 14 secondes (120000 échantillons) qui contient un signal d'échantillon à l'intérieur et j'ai le signal d'échantillon séparément avec moi de 2 secondes (20000 échantillons) (qui sont essentiellement des fichiers wave). Je veux trouver la position du signal de l'échantillon (c'est-à-dire le signal 2 secs) dans le signal principal dans matlab.Comment trouver la position d'un signal d'échantillon dans le signal principal?

J'ai essayé la logique de bouclage pour ce qui précède, mais le temps nécessaire pour produire la sortie est trop long. Je ne veux pas utiliser la fonction de corrélation croisée intégrée de matlab.

Veuillez suggérer une méthode pour obtenir le résultat dans le temps minimum (moins d'une minute).

+1

Y at-il une raison pour laquelle vous ne voulez pas utiliser la croix? -corrélation de matlab? Il semblerait que ce soit exactement ce que vous voulez utiliser cette situation. – uesp

+0

Le plus petit signal de l'échantillon et sa copie se trouvent-ils à l'intérieur du signal principal, avec une petite tolérance? En outre, cela se produit-il comme un ensemble «continu» de 20000 échantillons dans le signal principal? Ce que je veux dire, est-ce qu'il y a des échantillons bruyants entre les deux? –

+0

@uesp Je voulais trouver une approche différente pour le faire. – Sudhir91

Répondre

0

Une façon je peux penser est que vous pouvez convertir votre main signal et sample signal en string et utiliser regexp pour trouver le point de départ du signal. Voici un exemple:

a=randn(1,120000); % main signal 
b=a(100:20100); % Sample signal 
sig_str=num2str(a); % Convert main signal into string 
sampl_str=num2str(b); % Convert sample signal into string 
sig_split=regexp(sig_str,sampl_str,'split'); 
sampl_sig_start_point=length(num2str(sig_split{1}))+1; 
sampl_sig_end_point=sampl_sig_start_point+length(b)-1; 

Espérons que cela vous aide.

0

Je ne pense pas que vous pouvez échapper à tous vos 120.000.Mais pour augmenter la corrélation de faire une corrélation, vous pouvez essayer de corréler les 5000 premiers échantillons de 20.000 échantillons contre les 120.000 échantillons principaux .. Si vous obtenez une bonne corrélation à un certain point dans les 120 000 échantillons principaux, puis essayer de corréler 20 000 échantillons entiers contre 120 000 échantillons à ce moment-là. Essentiellement, vous devez vérifier la première partie de votre signal dans le signal principal et si vous trouvez votre première partie à un moment donné, vérifiez la partie complète à ce point.