Hi, folgendes Blockschaltbild.. Dieses soll verdeutlichen wo Up and
Downsampling stattfinden soll
Beim Downsampling werden ja zuerst alle Werte durch einen Tiefpass mit
entsprechender Frequenz geschickt und anschließend nur jeder zweite Wert
genommen.
Beim Upsampling soll an jeder zweiten Stelle eine 0 eingefügt werden und
anschließend werden diese ja wieder durch einen Tiefpass gefiltert.
Die Theorie ist sehr klar und Up und Downsampling habe ich auch schon
per Hand programmiert.Ist ja auch nicht schwer. Aber beim LMS hab ich
Probleme.
Alles wird in Matlab programmiert.
Der LMS sieht folgendermaßen aus, ist auch korrekt implementiert.( Mit
Anmerkungen wo das Up and Downsampling stattfinden soll, vielleicht
liegt da ja auch bei mir ein Denkfehler das blockschaltbild liegt ja
vor)
1 | for i=1:length(x_ref);
|
2 |
|
3 | [Dieser Teil muss Downgesampelt werden]
|
4 | eingang=[x_ref(i,1);eingang(1:parameter-1)];
|
5 | y(i)=w_voll*eingang;
|
6 |
|
7 | [Dieser Teil upgesampelt]
|
8 | e(i)=y(i)+d(i);
|
9 |
|
10 | [Hier wieder ein Downsampling]
|
11 | w_voll=w_voll-(mu*e(i)*eingang)';
|
12 |
|
13 | end
|
Nun zu meinem Code der zwar funktioniert, aber sehr sehr lange fürs
Rechnen braucht . Über jegliche Hilfe wäre ich sehr dankbar!
Wahrscheinlich ist die Implementierung auch falsch.
1 | %Initialisierungen
|
2 | w_para=zeros(1,parameter);
|
3 | eingang=zeros(parameter,1);
|
4 | y=zeros(1,length(x_ref));
|
5 | e=zeros(1,length(x_ref));
|
6 |
|
7 | v_parallel=filter(wtest,1,x_ref);
|
8 |
|
9 | filt = fdesign.lowpass('N,Fc',12,10000,40000);
|
10 | Hd = design(filt);
|
11 |
|
12 | % Tiefpass gefiltertes Signal
|
13 | x_ref_do=filter(Hd,x_ref);
|
14 |
|
15 | mu=0.1;
|
16 |
|
17 | for i=1:length(x_ref_do);
|
18 |
|
19 | %Hier nur jeden zweiten Wert berechnen
|
20 | if(mod(i,2)==0)
|
21 | eingang=[x_ref_do(i,1);eingang(1:parameter-1)];
|
22 | y(i)=w_para*eingang;
|
23 |
|
24 | % Die Addition bei e muss in jedem Schritt gemacht werden oder? daher ist
|
25 | % dieser Teil in jeder Schleife zu finden
|
26 | y_up(i)=filter(Hd,y(i));
|
27 | e(i)=y_up(i)+d(i)+v_parallel(i);
|
28 | e_do(i)=filter(Hd,e(i));
|
29 |
|
30 | else
|
31 |
|
32 | %Hier Upsampling, also mit 0 aufüllen jeden zweiten Wert
|
33 | y(i)=0;
|
34 |
|
35 | %Wert filtern für Upsampling
|
36 | y_up(i)=filter(Hd,y(i));
|
37 |
|
38 | %addition der werte
|
39 | e(i)=y_up(i)+d(i)+v_parallel(i);
|
40 |
|
41 | %e muss ja wieder downgesampelt werden
|
42 | e_do(i)=filter(Hd,e(i));
|
43 |
|
44 | end
|
Danke für eure Hilfe und Bemühungen