Matlab donne une erreur quand je bits augmentation de 42 à 43 ouplus

M

moonnightingale

Guest
J'ai fait un code dans Matlab.Concernant ce régime est la modulation.
Il ruuns bien jusqu'à l'époque où je définir le nombre de bits à 42.
Quand je accroître le nombre de bits de 42 à 43 ou toute autre valeur plus élevée que celle qu'elle donne une erreur
L'erreur est

??Error using ==> plot
Les vecteurs doivent être les mêmes longueurs.

Error in ==> BaseBandModulator à 23
plot (t1, Y) shift% l'impulsion de Nyquist par un T, puis les représenter

Error in ==> D2 à 21
NyquistPulsesData = BaseBandModulator (données, number_of_bits)

Quel est le décalage de si particulier à partir de 43 et plus haut.Si un corps est prêt à m'aider, de bien vouloir me donner ur email.Je vais envoyer le code U et U de bien vouloir clarifier ma query.ThanksAjouté après 23 minutes:I AM postiing le code de cette fonction

Quand je inrease nombre de bits de 42 à 43 il donne une erreur
Nombre de bits sont defiined en fonction principalefonction NyquistPulsesData = BaseBandModulator (données, number_of_bits)
lowLimit = -0.5; limite inférieure% du temps "tableau t"
upperLimit = 0,5;
T = 0,1;
t = [lowLimit: 0.01: upperLimit];% cette fois-tableau ne change pas
tempData = [];
Temptime = [];
pour k = 1:1: number_of_bits
t1 = [lowLimit: 0.01: upperLimit]% de ce tableau des changements de temps à chaque itération de boucle, les deux extrémités du tableau shift par T
ln = length (T1)
k
Si les données (k) == 1;% pour un binaire générer une impulsion de Nyquist

y = sinc (t / T);

si k == 1% Si des données est l'un & binaire premier membre de données de tableau
plot (t, y)

tempData = y;
fin

si k> 1
************************************************** ******
plot (t1, Y) shift% l'impulsion de Nyquist par un T, puis les représenter
********************** En raison de cette COMES MESSAGE D'ERREUR

= tempData [tempData, zeros (1,10)] [zeros (1, (k-1) * 10), y];
tempData% = [tempData, y];
fin

grille
patienter
fin

Si les données (k) == 0% si l'élément de données est de zéro
pour m = 1:101
Y (m) = 0;
fin
si k == 1
plot (t, y)

tempData = y;
fin
si k> 1
************************************************** **********
plot (t1, Y)
*********************** En raison de cette COMES MESSAGE D'ERREUR

= tempData [tempData, zeros (1,10)] [zeros (1, (k-1) * 10), y];
tempData% est poursuivi en justice pour connaître la résultante de toutes les pulsese
fin

grille
patienter
fin

lowLimit = lowLimit 0,1
upperLimit = upperLimit 0,1
% ylim ([-1.5 1.5]);
fin
( 'title Nyquist Légumineuses');
grille
NyquistPulsesData = tempData;
time = -0.5:0.01: (0,5 (number_of_bits -1) * 0.1);
% de temps = Temptime;
% Tenir à distance
Figure (3)
plot (temps, NyquistPulsesData)
titre ( «bande de base Signal vs TEMPS ');
grille
ylim ([-1.5 1.5]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 
Est-ce qu'il ya quelqu'un qui peut m'aider pour supprimer cette erreur mineure
Si quelqu'un veut m'aider, de bien vouloir me donner ur email
Le problème est très faible et l'erreur se produit en raison de différences dans les tailles de tableau lorsque bits augmentation de plus de 42.Sinon, il est ok

 
Salut moonnightingale,

Je ne suis pas d'accord que c'est une très petite ou une erreur mineure, comme vous dites.Une erreur comme celui-ci rend inutile tout votre programme.

Le problème est que quand vous faites ceci:

lowLimit = lowLimit 0,1
upperLimit = upperLimit 0,1

les résultats ne sont pas ce que vous attendez en raison d'erreurs numériques.
Voir le prochain morceau de code, très semblable à la vôtre (vous faites cela avec les 2 limites):

x = 0;
pour k = 1:100
x = x 0,1;
fin

Vous pourriez vous attendre que la valeur finale de x est exactement à 10, non?
Non!
Tapez «X-10":x-10
ans =
-1.9540e-014

in floating point arithmetic; there are small errors that accumulate over the sums.

En fait, 0,1 ne peuvent pas être représentés exactement
en arithmétique à virgule flottante, il ya des petites erreurs qui s'accumulent au fil des sommes.
À un certain point, (dans votre cas après 42 ou 43 itérations) le vecteur t1 défini dans

t1 = [lowLimit: 0.01: upperLimit]

a moins que l'une des composantes devrait avoir.

J'espère que vous pourrez résoudre le problème.
Observe

Z

 
LowLimit =

3,6000upperLimit =

4,6000T1 =

Colonnes 1 à 11

3,6000 3,6100 3,6200 3,6300 3,6400 3,6500 3,6600 3,6700 3,6800 3,6900 3,7000

Colonnes 12 à 22

3,7100 3,7200 3,7300 3,7400 3,7500 3,7600 3,7700 3,7800 3,7900 3,8000 3,8100

Colonnes 23 à 33

3,8200 3,8300 3,8400 3,8500 3,8600 3,8700 3,8800 3,8900 3,9000 3,9100 3,9200

Colonnes 34 à 44

3,9300 3,9400 3,9500 3,9600 3,9700 3,9800 3,9900 4,0000 4,0100 4,0200 4,0300

Colonnes 45 à 55

4,0400 4,0500 4,0600 4,0700 4,0800 4,0900 4,1000 4,1100 4,1200 4,1300 4,1400

Colonnes 56 à 66

4,1500 4,1600 4,1700 4,1800 4,1900 4,2000 4,2100 4,2200 4,2300 4,2400 4,2500

Colonnes 67 à 77

4,2600 4,2700 4,2800 4,2900 4,3000 4,3100 4,3200 4,3300 4,3400 4,3500 4,3600

Colonnes 78 à 88

4,3700 4,3800 4,3900 4,4000 4,4100 4,4200 4,4300 4,4400 4,4500 4,4600 4,4700

Colonnes 89 à 99

4,4800 4,4900 4,5000 4,5100 4,5200 4,5300 4,5400 4,5500 4,5600 4,5700 4,5800

Colonnes 100 à 101

4,5900 4,6000

ln =

101k =

42**************************************************
MAIS QUAND NOMBRE DE BITS DEVIENT K = 43 Longueur = 100

lowLimit =

3,7000upperLimit =

4,7000T1 =

Colonnes 1 à 11

3,7000 3,7100 3,7200 3,7300 3,7400 3,7500 3,7600 3,7700 3,7800 3,7900 3,8000

Colonnes 12 à 22

3,8100 3,8200 3,8300 3,8400 3,8500 3,8600 3,8700 3,8800 3,8900 3,9000 3,9100

Colonnes 23 à 33

3,9200 3,9300 3,9400 3,9500 3,9600 3,9700 3,9800 3,9900 4,0000 4,0100 4,0200

Colonnes 34 à 44

4,0300 4,0400 4,0500 4,0600 4,0700 4,0800 4,0900 4,1000 4,1100 4,1200 4,1300

Colonnes 45 à 55

4,1400 4,1500 4,1600 4,1700 4,1800 4,1900 4,2000 4,2100 4,2200 4,2300 4,2400

Colonnes 56 à 66

4,2500 4,2600 4,2700 4,2800 4,2900 4,3000 4,3100 4,3200 4,3300 4,3400 4,3500

Colonnes 67 à 77

4,3600 4,3700 4,3800 4,3900 4,4000 4,4100 4,4200 4,4300 4,4400 4,4500 4,4600

Colonnes 78 à 88

4,4700 4,4800 4,4900 4,5000 4,5100 4,5200 4,5300 4,5400 4,5500 4,5600 4,5700

Colonnes 89 à 99

4,5800 4,5900 4,6000 4,6100 4,6200 4,6300 4,6400 4,6500 4,6600 4,6700 4,6800

Colonne 100

4,6900ln =

100k =

43

HERE AFTER COULUM 100 AURAIT colonne 101 QUE DOIT ETRE EGAL A 4,70

COMMENT Pour résoudre ce problème
PLZ PLZHELP ME

 
Chers moonnightingale,

Avez-vous lu mon post précédent?
Avez-vous compris id?
Observe

Z

 
Oui je l'ai lu, mais je suis incapable de résoudre le problème uptill maintenant

 
Une «sale» façon, mais cela nécessite un minimum de changements dans votre code, serait de remplacer

upperLimit = 0,5;

par

upperLimit = 0.500001;

(Comprenez-vous pourquoi?)
Cela devrait marcher, même si ce n'est pas la meilleure façon.
Observe

Z

 

Welcome to EDABoard.com

Sponsor

Back
Top