2015-11-29 1 views
-1

J'ai reçu l'onde sinusoïdale d'origine (Image 1) et une version bruyante de celui-ci aussi (Image 2).J'ai besoin de créer cette onde sinusoïdale dans MATLAB. Comment va-t-on?

image 1

enter image description here

image 2

enter image description here

Maintenant, pour trouver le signal original, je suis à la recherche à la fréquence dans la première moitié du graphique qui a la plus grande valeur. Ce serait 21. Lorsque j'essaie de créer une onde sinusoïdale avec 21 comme une fréquence en utilisant le code ci-dessous, je reçois le résultat de Image 3.

% Creating the Sine Wave 
t = (1:1:256); 
A = 1; 
y = A*sin(2*pi*max_index*t); 

plot(t,y); 

image 3

enter image description here

Pourquoi est-ce le cas. Qu'est-ce que je fais mal?


CODE RUNNABLE

Voici ma fonction:

function [ ] = function1b(Sig_noise) 

% Max Index is the frequency of the pure tone 
noise_f = fft(Sig_noise); 
s_nf = size(noise_f); 
size_f = s_nf(2); 
max = 0; 
max_index = 1; 
for n = 1:(size_f/2) 
    if abs(noise_f(n)) > max 
     max = abs(noise_f(n)); 
     max_index = n; 
    end 
end 

% Creating the Sine Wave 
t = (1:1:256); 
A = 1; 
y = A*sin(2*pi*max_index*t); 

plot(t,y); 

end 

Et je l'appelle de cette partie du script:

load('Sig'); % Original Signal 
Sig_noise2=awgn(Sig,10); 
function1b(Sig_noise2); 

Solution Andras'

Ceci est le résultat me semble être obtenir:

enter image description here

En utilisant linspace(0,2,100); me donne ce résultat:

enter image description here

+1

Pouvez-vous envoyer un code exécutable? Pour moi cela semble correct, votre amplitude ne devrait pas changer, parce que A est constant, donc aucune idée pourquoi vous obtenez cette sortie. – lhcgeneva

+0

@lhcgeneva vient de faire le changement! –

Répondre

2

Votre code dit

t = (1:1:256); 
A = 1; 
y = A*sin(2*pi*max_index*t); 

Bien que votre amplitude est belle et grande et 1, si max_index est entier, alors votre phase à l'intérieur du sin est un multiple entier de 2*pi pour chaque t, ce qui est exactement zéro. C'est pourquoi votre fonction est numériquement zéro.Vous avez besoin de fréquence de l'indice max:

y = A*sin(2*pi*freq(max_index)*t); 

si les fréquences sont stockées dans freq, ou si max_index se tient déjà pour une fréquence, puis utilisez un maillage t plus dense, comme

t = linspace(1,256,1000); 

Vous risquez d'interpréter incorrectement la sortie de fft. De help fft:

For length N input vector x, the DFT is a length N vector X, 
with elements 
        N 
     X(k) =  sum x(n)*exp(-j*2*pi*(k-1)*(n-1)/N), 1 <= k <= N. 
        n=1 

The inverse DFT (computed by IFFT) is given by 
        N 
     x(n) = (1/N) sum X(k)*exp(j*2*pi*(k-1)*(n-1)/N), 1 <= n <= N. 
        k=1 

Cela signifie que les fréquences ne sont pas max_index, mais (max_index-1)/N si votre échantillon initial a N points. Cela transforme votre grande fréquence imparfaite dans la petite fréquence réelle, résoudre vos problèmes.

Pour le décomposer pour vous: essayez

t = 1:256; 
y = A*sin(2*pi*(max_index-1)/length(Sig_noise)*t); 
+0

'Fonction indéfinie ou variable 'freq'.' est l'erreur que j'obtiens quand j'essaie de changer' y = A * sin (2 * pi * max_index * t); 'à' y = A * sin (2 * pi * freq (max_index) * t); Laissez-moi essayer votre deuxième solution. –

+0

J'ai également modifié la question pour qu'elle contienne plus d'informations sur la façon dont j'ai obtenu la valeur de 'max_index'. –

+0

J'ai également posté le résultat de la deuxième solution que vous avez mentionnée. –

1

Je pense qu'il ya un problème dans le taux d'échantillonnage. remplacer

t=(1:1:256) 

avec

t = (1:1/(f*3):3) 

ici f = MAX_INDEX = 21

+0

Cela me donne certainement le bon graphique, mais pas avec le bon domaine. J'en ai besoin pour aller jusqu'à 256 comme le singal original? –

+0

Vous pouvez changer de domaine avec t = (1: 1/(f * 3): 256). Cependant, le graphique ne ressemblera pas à image1 en raison de la basse fréquence. Si vous le zoomez, alors vous verrez la sortie voir Image 1. – Anonymous

+0

Oui, j'ai besoin du même graphique que ** Image 1 **. Il semble que j'obtienne une onde sinusoïdale différente avec une fréquence beaucoup plus élevée ici. –