Fourietransformerad signal i matlab

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Användarvisningsbild
hento
Inlägg: 54
Blev medlem: 1 oktober 2011, 18:48:46

Fourietransformerad signal i matlab

Inlägg av hento »

Har precis fourietransformerat ett stycke klassisk musik och plottat det på en axel med samma längd som fourietransformens vektor. Enligt tidigare uppgifter skall ju toppar visas vid de mest påtagliga frekvenserna i signalen men enligt plotten nu så får jag endast toppar i början och slutet av x-axeln och den ser helt symmetrisk ut.

Hur ska jag tolka detta och vad är det jag missförstår?
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7235
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

Re: Fourietransformerad signal i matlab

Inlägg av psynoise »

Har du verkligen använt fourietransform (FT)? I Matlab är det betydligt enklare att använda någon tiddiskret transform istället som till exempel diskret fouriertransform (DFT).

Iaf beskrivningen av din graf påminner om vikningsdistorsion. Nu var det ett bra tag sedan jag håll på med liknande. Men bifoga grafen och koden direkt här på forumet så kan vi se exakt vad du gjort.
Användarvisningsbild
hcb
Moderator
Inlägg: 5991
Blev medlem: 23 februari 2007, 21:44:50
Skype: hcbecker
Ort: Lystrup / Uppsala
Kontakt:

Re: Fourietransformerad signal i matlab

Inlägg av hcb »

Har du viktat dina indata med någon viktningsfunktion?
hatten
Inlägg: 94
Blev medlem: 9 maj 2008, 22:16:23
Ort: Uppsala

Re: Fourietransformerad signal i matlab

Inlägg av hatten »

Det FFT-algoritmen spottar ur sig är alltid symmetriskt runt Nyquistfrekvensen (halva samplingsfrekvensen fs). Hälften av datat är alltså rent redundant och kan tas bort i plotten.

Om du plottar första halvan av datamängden, samt därefter skalar om x-axeln till 0 ... fs/2 så blir det mer lättolkat! Se exemplet i dokumentationen; doc fft eller http://www.mathworks.se/help/matlab/ref/fft.html

Vill man vara mer formell och plotta från -fs/2 till fs/2 så finns funktionen fftshift. Men notera, igen, att ena halvan är en ren spegling av den andra.
Användarvisningsbild
LHelge
Inlägg: 1772
Blev medlem: 2 september 2007, 18:25:31
Ort: Östergötland
Kontakt:

Re: Fourietransformerad signal i matlab

Inlägg av LHelge »

Kod: Markera allt

fs = 44000; 
ts = 1/fs; 
t = 0:ts:10;
 N2 = floor(length(t)/2); 
x = sin(440 * t * 2*pi); 
f = fft(x); 
plot(linspace(0, fs/2, N2), abs(f(1:N2)));
Skapar en 440 Hz sinus samplad med 44000 Hz och plottar den i frekvensdomänen.
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7235
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

Re: Fourietransformerad signal i matlab

Inlägg av psynoise »

hento:

Vad kom du fram till?
guckrum
Inlägg: 1932
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: Fourietransformerad signal i matlab

Inlägg av guckrum »

Ett sätt att titta på en ljudsignals frekvensinnehåll är att titta på dess
energispektrum. Det gör man genom att plotta kvadraten av
absolutbeloppet av den diskreta Fouriertransformen av signalen.
Ofta är det lämpligt att logaritmera också, dvs att ta tex
10*log10( abs(fft(x)).^2 ), eller, ekvivalent 20*log10( abs( fft(x) ) ).

Detta för att energin är amplituden i kvadrat, och amplituden är
absolutbeloppet av (den komplexvärda) signalen. 10*log10() gör att
det blir uttryckt i deciBel. Just logaritmeringen gör att det blir lättare
att se.

Notera att en Fouriertransform generellt har komplexvärd insignal och
komplexvärd utsignal. Med reelvärd insignal blir utsignalen "symmetrisk"
och komplexvärd. Hälften av utsignalen finns representerad i den andra
hälften och är helt redundant.

Om man vill analysera ett helt musikstycke bryter man lämpligen ner
signalen i kortare bitar, fönstrar dem och Fouriertransformerar var för sig.
Det är ju just en inverterbar linjär transform, och i det diskreta fallet
produceras precis lika många "bins" utsignal som "sampel" insignal.
Med en stor transform får man någon sorts "medelfrekvensspektrum"
där ljud från alla tidpunkter blandas, men med fönstringen får man
upplösning både i tid och frekvens.
Användarvisningsbild
hento
Inlägg: 54
Blev medlem: 1 oktober 2011, 18:48:46

Re: Fourietransformerad signal i matlab

Inlägg av hento »

Tack för alla svar, tror dock att jag varit lite otydlig i min frågeställning.

Anledningen till att jag fourietransformerade musikstycket var att hitta en gömd puls.
Varpå resultatet med två pikar förvirrade mig, att de blev tokigt var på grund av att svaret skulle plottas på nyqvistfrekvensen, görs inte detta får man också med speglingen.
Efter att halveringen gjorts finns bara pulsen i början kvar, vilket antagligen är den gömda pulsen.

Problemet löst.

Tack!
Skriv svar