WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

highpass Filter gegen periodisches Störsignal

 

Thomas_74
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2010, 15:25     Titel: highpass Filter gegen periodisches Störsignal
  Antworten mit Zitat      
Hi,

ich möchte ein periodisch ~1s auftretendes störsignal aus einer wav Datei "entfernen/dämpfen".

Ich habe es mit einem highpass Filter versucht:

Code:

hpf=fdesign.highpass;
hpf1=design(hpf,'cheby1');
wavout=filter(hpf1,wavin);
 


was ich nicht verstehe ist wie ich die Parameter da ändern kann. Ich möchte einfach alles unter 20Hz abschneiden. Aber der Filter verwendet so was wie relative(?) Frequenzen.

Leider hab ich da keine Idee ob das so geht oder ob ich da voll auf dem Holzweg bin?

MfG Thomas
Private Nachricht senden Benutzer-Profile anzeigen


Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2010, 15:28     Titel:
  Antworten mit Zitat      
P.S.

sowas sollte doch auch mit:

Code:

x=fft(wavin);
y= x-(leider hab ich keine Ahnung wie ich da frequenzen angeben kann)
wavout=ifft(y);
 


gehen? Allerdings hab ich nicht mal ne grobe Vorstellung wie fft/ifft funktioniert. Ich kann meine Daten hin und her wandeln aber beim bearbeiten kommt chaos raus.

Wink Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 25.10.2010, 11:56     Titel:
  Antworten mit Zitat      
Hi,

in Deinem beispiel verwendest Du ein Tschebyscheff-Filter.

Tippe an der Kommandozeile doch mal ein:

>> help cheby1

Dort kannst Du sehen, wie z.B. ein Hochpass-Filter definiert wird.
Gearbeitet wird mit normierten Frequenzen.

Falls Du für einen Frequenzwert 0.1 angibst, entspricht dies 0.1* der halben Abtastrate.

Entsprechend kannst Du auch mit Butter o.ä. arbeiten.

Du erhältst Filterkoeffizienten eines IIR-Filters.
Mit Hilfter der Funktion filter kannst Du dann filtern mit

y=filter(B,A,x)

Grüße
Andreas
_________________

Andreas Geißler
Private Nachricht senden Benutzer-Profile anzeigen
 
vega1013
Forum-Century

Forum-Century


Beiträge: 162
Anmeldedatum: 26.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2010, 16:41     Titel:
  Antworten mit Zitat      
Hallo,
wie du schon gesagt hast, funktioniert das auch im Frequenzbereich. Hatte auch mal was in dieser Richtung geschrieben, vielleicht hilft es dir ja weiter. Ist schicherlich noch eleganter zu programmieren, aber seinen Dienst sollte es tun...

Code:

fa=40000;
N  = 2^nextpow2(length(y));
df = fa/N;                          % Frequenzauflösung

Y = fft(y, N);                      % fft
Yshift=fftshift(Y);                
fshift=[-fa/2:df:+fa/2-df];         % Frequenzvektor, zur Darstellung des
                                    % geschifteten Freq.-Signals
figure; plot(fshift,Yshift)                                    
                                   
% Fenster / Filter:
fgrenz=20;
filter=ones(length(Y),1);
for i=1:length(filter)
    if abs(fshift(i))<=fgrenz
        filter(i)=0;
    end;
end;

Ykomplneushift=filter.*Yshift;
figure; plot(fshift,Ykomplneushift)  

Ykomplneu=ifftshift(Ykomplneushift);      

yneu=ifft(Ykomplneu,N);
 


Kannst ja mal ein Feedback geben ob es dir weiterhilft.

Gruß Vega
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 09:45     Titel:
  Antworten mit Zitat      
Hi,

ich spiel gerade damit und hab da noch ein paar Fragen.

fa => ist die anzahl der Datenpunkte / länge der Datei (in s) ?
y => ist die anzahl der Datenpunkte ?

wenn ich mir yneu ausplotte sehe ich am anfang das "normale" Signal und am ende etwas geglättetes. Wo hängt das mit den Einstellungen zusammen?

Sorry aber ich kenn mich mit fft ... wirklich nicht aus.

MfG Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 09:55     Titel: Filter
  Antworten mit Zitat      
Hi,

bei der Filter Hilfe bin ich auf das Bsp.:

Code:

d=fdesign.highpass('n,fp,ap',7,20,.4,50);
 


allerdings steht da nicht wofür die Variablen/Zahlen stehen.
Ich vermute aber das ich damit irgendwie den Filter einstellen kann?

MfG Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 11:49     Titel:
  Antworten mit Zitat      
Hi könnte vielleicht so was funktionieren??

Code:

T=audio.totalDuration/length(audio.data);   % Sample time
t = (0:T:audio.totalDuration)';
t=t(1:end-1);                               % Time vector
%%
figure;
    title('Signal')
    xlabel('time (seconds)')
    plot(t,audio.data)
    axis tight
    grid on
%% FFT
N  = 2^nextpow2(length(audio.data));  %y=audio.data
df = T/N;        
Y = fft(audio.data, N);                      % fft
Yshift=fftshift(Y);                
fshift=-T/2:df:+T/2-df;         % Frequenzvektor, zur Darstellung des geschifteten Freq.-Signals
%%                                
figure;
    title('Shift')
    xlabel('time (shift)')
    plot(fshift,Yshift)
    axis tight
    grid on
%% Fenster / Filter:
fgrenz=20;
filter=ones(length(Y),1);
for i=1:length(filter)
    if abs(fshift(i))<=fgrenz
        filter(i)=0;
    end;
end;
%%
Ykomplneushift=filter.*Yshift;
%%
figure;
    title('')
    xlabel('')
    plot(fshift,Ykomplneushift)  
    axis tight
    grid on
%%
Ykomplneu=ifftshift(Ykomplneushift);      
yneu=ifft(Ykomplneu,N);

t2 = (0:length(yneu):audio.totalDuration)';
t2=t2(1:end-1);      
%%
figure;
    title('Signal bearbeitet')
    xlabel('time (seconds)')
    plot(yneu)
    axis tight
    grid on

 
Private Nachricht senden Benutzer-Profile anzeigen
 
vega1013
Forum-Century

Forum-Century


Beiträge: 162
Anmeldedatum: 26.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 12:40     Titel:
  Antworten mit Zitat      
Hi,

alos fa ist die Abtastfrequenz und y ist wie du schon richtig vermutet hast der Datenvektor.
Zu dem Filter aus dem Beispiel kann ich dir leider nichts sagen, damit habe ich mich bis jetzt nicht beschäftigt.
Dein Programmcode müste soweit schon funktionieren, nur müsste, da fa=1/Ta ist, die Zeile
Code:

df = T/N;
 

angepasst werden.
Dann weiterhin viel Erfolg. Kannst ja über deinen Fortschritt bescheid geben...

Gruß vega
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.