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

Trennen eines Rechtecksignals vom Rauschsignal

 

Thomas90
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 08.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2014, 18:30     Titel: Trennen eines Rechtecksignals vom Rauschsignal
  Antworten mit Zitat      
Hallo liebes Forum,
ich habe folgendes Problem:

Ich habe ein Rechtecksignal, welches durch weisses gaussches Rauschen gestört wird (additiv). Das Signal liegt als *.wav Datei vor. Aus dem Spektrum kann man erkennen, das es sich um ein 400Hz-Nutzsignal handelt. Ich soll Nutz -sowie Störsignal trennen, bin aber mit meinem Wissen am Ende. Über eine Hilfestellung würde ich mich sehr freuen.

Die *.wav Datei ist leider verboten anzuhängen.

Bild.png
 Beschreibung:

Download
 Dateiname:  Bild.png
 Dateigröße:  639.47 KB
 Heruntergeladen:  621 mal
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 25.09.2014, 18:44     Titel:
  Antworten mit Zitat      
Auch wenn es dir verboten ist das Signal anzuhängen, hast du schon mal versucht ein theoretisches Testsignal zu erzeugen, das in etwa dem Audiosignal entspricht?

Falls der Code im Bild die gezeigten figures erzeugt, kann ich dir schon mal sagen, dass die Skalierung deines Amplitudenspektrums nicht stimmt.

Schau mal dir mal hier die Funktion Betragsspektrum an. Kannst sie so eigentlich gleich übernehmen. Ich empfehle dir außerdem die Darstellung in dB.

Problem an der Überlagerung von Rechteck und einem weißen Rauschen ist ja, dass beide Signalanteile über den ganzen Frequenzbereich vorliegen. Das weiße Rauschen ohnehin und das Rechtecksignal zumindest über einer großen Bereich. Die 400Hz spiegeln ja nur die Periode des Rechtecks wieder. Aber mit einem Bandpass kommt man hier nicht wirklich weiter.

Hast du mal den SNR bestimmt? Dann kann man schon mal grob einschätzen wie weit man mit einer herkömmlichen Filterung überhaupt kommt. Evtl. ist es sogar sinnvoll neben dem Betragsspektrum ein Leistungsdichtespektrum zu erzeugen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2014, 19:02     Titel:
  Antworten mit Zitat      
Ist das Rechtecksignal denn noch irgendwie moduliert? Also hat es eine schwankende Amplitude oder ändert sich das Verhältnis von Einschalt- zu Periodendauer? Und muss das in Echtzeit funktionieren?

Wenn alles nicht, solltest Du eigentlich irgendwie mit einer Kreuzkorrelation und einem selbst hergestellten ungestörtem Rechteck die Phasenlage des gestörten Rechteck-Signals herausfinden können. Wenn Du die kennst, kannst Du damit das gestörte Rechteck ungestört rekonstruieren und vom gestörten Signal abziehen.

Falls alles nicht, aber mit benötigter Echzeitfähigkeit, könntest Du die Phasenlage mit einer PLL bestimmen und so ein ungestörtes Signal konstruieren.

Beides sind aber nur Gedankenspiele - keine Ahnung, ob man das vernünftig und funktionierend umgesetzt bekommt und ob ich nicht noch nen Denk- oder Verständnisfehler drin habe...
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas90
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 08.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2014, 20:47     Titel:
  Antworten mit Zitat      
Danke für die schnellen Antworten.
Ich habe nun mal ein Testsignal erzeugt das in etwa der Tonlage entspricht und das selbe Spektrum aufweist. Natürlich sind es nicht genau dieselben Signale.
Um die Skalierung werd ich mich nun kümmern.
Den SNR habe ich nicht bestimmt. Ich habe keine Idee wie ich das tun soll.

Ich weiss nur das es ein Rechtecksignal, überlagert mit weissem gausschen Rauschen ist. Ich vermute das es ein einfaches Rechtecksignal mit konstanter Amplitude und konstanter Periodendauer ist, da man neben dem Rauschen keine Lautstärkenschwankungen oder Frequenzschwankungen erkennen kann.
Da das Signal periodisch ist, kann man doch mit Hilfe einer Fourierreihen die relevanten Frequenzen bestimmen. Das wäre mein nächster Ansatz gewesen. Um die Kreuzkorrelation und das Leistungsdichtespektrum werde ich mich als nächstes kümmern. Diese Lösungsansätze scheinen mir auf ersten Blick sinnvoll. Da ich Anfänger bin freue ich mich über weitere Hilfen Smile

Code:

% Signal mit Ähnlichkeit
clear
clc
fre=22000
[u,t] = gensig('square',1/425,10,1/fre);
signal = 0.5*u-0.25;
noise_signal = 0.2*randn(1,220001);
x = signal + noise_signal';
plot(t,x);
axis([0 10 -1.2 1.2])
title('Audiosignal');
grid on;
xlabel('t'); ylabel('Amplitude');

N = 1024;
freq = linspace(0,fre/2,N/2+1);
x_fft = fft(x,N);
x_amp = abs(x_fft(1:length(freq)));
figure(2);
plot(freq,x_amp);
xlabel('Frequency');
ylabel('Amplitude');
 


Bild.png
 Beschreibung:

Download
 Dateiname:  Bild.png
 Dateigröße:  472.05 KB
 Heruntergeladen:  592 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas90
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 08.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2014, 20:49     Titel:
  Antworten mit Zitat      
Das beigefügte Bild zeigt übrigens links das orginale Bild und rechts das selbst erzeugte Signal (siehe Programm)
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 26.09.2014, 08:40     Titel:
  Antworten mit Zitat      
Sollte das Testsignal tatsächlich in etwa deinem echten Signal entsprechen, dürfte der Weg über die klassische Filterung nahezu ausgeschlossen sein. Dafür ist die Leistung des Nutzsignals gegenüber der Störung einfach zu gering (SNR nur rund 14dB). Wie du hier aber sehen kannst, besteht ein Rechtecksignal eben nicht nur aus einer Frequenz sondern geht fast über den kompletten Frequenzbereich.

Auch ein adaptives Filter wird hier möglicherweise nicht die gewünschte Entstörung leisten können. Dennoch ist ein Ansatz über die (Kreuz-) Korrelation der beiden Signale sicher einen Versuch wert.

Für die Darstellung brauchst du die unten angehängte Funktion, welche ich ja auch schon in meinem ersten Post verlinkt hatte.

Code:

Fs = 22000;
Ts = 1/Fs;
[u,t] = gensig('square',1/425,10,Ts);
signal = 0.5*u-0.25;

% evtl. sinnvoller statt randn die Funktion wgn(1,220001) zu verwenden
noise_signal = 0.2*randn(1,220001);
x = signal + noise_signal';

% Butterworth Tiefpassfilter
fn= Fs/2;
wn = 1000/fn; % Filter Grenzfrequenz
[b,a] = butter(10,wn);
filt_sig = filter(b,a,x);

figure(1)
subplot(2,2,[1 2]);
plot(t,noise_signal,t,x,t,signal,'r-',t,filt_sig,'k-*');
axis([0 0.02 -1.2 1.2])
title('Audiosignal');
grid on;
xlabel('t'); ylabel('Amplitude');
legend('white gaus.','signal + noise','signal','signal filt');

N = 2^14;

% Funktion aufrufen
[mag, mag_dB, fv] = FFT_betragsspektrum( noise_signal, N, Fs, 0) ;
[mag2, mag_dB2, ~] = FFT_betragsspektrum( x, N, Fs, 0) ;
[mag3, mag_dB3, ~] = FFT_betragsspektrum( signal, N, Fs, 0) ;
 
subplot(2,2,3);
plot(fv,mag,fv,mag2,fv,mag3);grid on;
axis([0 5000  0 0.25]);
xlabel('Frequenz in Hz');
ylabel('Amplitude');
title('Betragsspektrum linear');
legend('white gaus.','signal + noise','signal');

subplot(2,2,4);
% Amplitude in dB
plot(fv,mag_dB,fv,mag_dB2,fv,mag_dB3);grid on;
axis([0 5000 -100 0]);
xlabel('Frequenz in Hz');
ylabel('Amplitude dB');
title('Betragsspektrum in dB');
legend('white gaus.','signal + noise','signal');

figure(2)
[pxx,f] = pwelch(x,1024,256,1024,Fs);
plot(f,10*log10(pxx));grid on;
title('Leistungsdichtespektrum')
xlabel('Hz'); ylabel('dB');
 


FFT_betragsspektrum.m
 Beschreibung:

Download
 Dateiname:  FFT_betragsspektrum.m
 Dateigröße:  1.13 KB
 Heruntergeladen:  555 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas90
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 08.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.09.2014, 14:16     Titel:
  Antworten mit Zitat      
Die Diagramme zeigen doch einen Signal-Rauschabstand, der zwar nicht groß ist, aber immerhin vorhanden. Kann man damit mathematisch nicht die Werte bis zu einem bestimmten Pegel herrausnehmen?

Amplitudenspektrum und Leistungsdichtespektrum.png
 Beschreibung:

Download
 Dateiname:  Amplitudenspektrum und Leistungsdichtespektrum.png
 Dateigröße:  829.46 KB
 Heruntergeladen:  545 mal
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.