/ Forside / Karriere / Uddannelse / Højere uddannelser / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Højere uddannelser
#NavnPoint
Nordsted1 1588
erling_l 1224
ans 1150
dova 895
gert_h 800
molokyle 661
creamygirl 610
berpox 610
jomfruane 570
10  3773 570
Butterworth lavpas-filter i matlab. Hvorda~
Fra : bamse


Dato : 10-03-04 13:25

Hej

Jeg har et tids-signal f(t) som jeg sampler således at jeg får
sekvensen

S[n]=f(n*T)

hvor 1/T er samplefrekvensen og n går fra 0 til M.

Hvordan lavpasfiltrerer jeg sekvensen S[n] således at
frekvenskomposanter over en valgt frekvens fv er
bortfiltreret??

Jeg ønsker at ende ud med en ny sekvens i tidsdomænet som
jeg kan afbilde grafisk.

Det hele skal laves i matlab og ikke simulink.







 
 
Martin Sørensen (10-03-2004)
Kommentar
Fra : Martin Sørensen


Dato : 10-03-04 16:55

> Jeg har et tids-signal f(t) som jeg sampler således at jeg får
> sekvensen
> S[n]=f(n*T)
> hvor 1/T er samplefrekvensen og n går fra 0 til M.

> Hvordan lavpasfiltrerer jeg sekvensen S[n] således at
> frekvenskomposanter over en valgt frekvens fv er
> bortfiltreret??
> Jeg ønsker at ende ud med en ny sekvens i tidsdomænet som
> jeg kan afbilde grafisk.
> Det hele skal laves i matlab og ikke simulink.

Noget lignende:

[num,den] = butter(N,2*fv*T); % N er ordenen, fv er grænsefrekvens i
Hz, T sampletid
Y = FILTER(num,den,S); % S input-signal

Så har du det filtrerede output i Y, er dog ikke testet..

--
signing off.. Martin Sørensen



bamse (10-03-2004)
Kommentar
Fra : bamse


Dato : 10-03-04 17:35


> Y = FILTER(num,den,S); % S input-signal
>
> Så har du det filtrerede output i Y, er dog ikke testet..
>

Og S er signalet i tidsdomænet og ikke frekvensdomænet??




Martin Sørensen (10-03-2004)
Kommentar
Fra : Martin Sørensen


Dato : 10-03-04 21:18

>> Y = FILTER(num,den,S); % S input-signal
>> Så har du det filtrerede output i Y, er dog ikke testet..
> Og S er signalet i tidsdomænet og ikke frekvensdomænet??

Ja, det arbejder udelukkende i tidsdomænet.

--
signing off.. Martin Sørensen



bamse (10-03-2004)
Kommentar
Fra : bamse


Dato : 10-03-04 17:37

> Så har du det filtrerede output i Y, er dog ikke testet..
>
> --

Det virker ikke. Matlab 6.5 kan ikke genkende funktionen "butter"




Heureka (10-03-2004)
Kommentar
Fra : Heureka


Dato : 10-03-04 19:37

Så skyldes det nok at du ikke har signal processing toolbox'en installeret!

Cheers
Thomas S


"bamse" <bamse@kyllingen.dkkkk> wrote in message
news:XuH3c.5348$TN4.1234@news.get2net.dk...
> > Så har du det filtrerede output i Y, er dog ikke testet..
> >
> > --
>
> Det virker ikke. Matlab 6.5 kan ikke genkende funktionen "butter"
>
>
>



bamse (10-03-2004)
Kommentar
Fra : bamse


Dato : 10-03-04 20:28


> Så skyldes det nok at du ikke har signal processing toolbox'en
installeret!
>

Ok Men det jeg var ude efter var en algoritme til hvordan man
lavpasfiltrerer et tidsdiskret signal s[n]=f(n*T) ???




Martin Sørensen (10-03-2004)
Kommentar
Fra : Martin Sørensen


Dato : 10-03-04 21:27

>> Så skyldes det nok at du ikke har signal processing toolbox'en
>> installeret!
> Ok Men det jeg var ude efter var en algoritme til hvordan man
> lavpasfiltrerer et tidsdiskret signal s[n]=f(n*T) ???

Det er rimeligt nemt at implementere et FIR eller IIR filter manuelt i
Matlab, men problemet kommer når man skal bestemme
filterkoefficienterne. Hvad skal din grænsefrekvens være, og hvor stor
orden skal filtret have?

Har du 'filter' funktionen? Ellers hvad med 'conv' (foldning)? 'conv'
kan nemlig bruges direkte som FIR filter.

Du har allerede skrevet at det skal være med Butterworth karakteristik,
men der findes jo andre karakteristikker, der muligvis er bedre alt
efter hvad det er for et signal, og hvad det skal bruges til
efterfølgende. Kan man f.eks. leve med ripple i frekvensresponsen, så
kan man få en stejlere flanke i overgangen fra pas- til stopbånd uden at
tilføje filterkoefficienter.

--
signing off.. Martin Sørensen



bamse (11-03-2004)
Kommentar
Fra : bamse


Dato : 11-03-04 07:14

Hvad skal din grænsefrekvens være, og hvor stor
> orden skal filtret have?
>

Lad os kalde grænsefrekvensen fg og ordenen for m

> Har du 'filter' funktionen? Ellers hvad med 'conv' (foldning)? 'conv'
> kan nemlig bruges direkte som FIR filter.
>

Jeg har filter og conv, men jeg vil gerne have 100% styr over hvad der
sker i programmet. Så hvis jeg kan lave det selv uden brug af indbyggede
funktioner, så foretrækker jeg det.

> Du har allerede skrevet at det skal være med Butterworth karakteristik,
> men der findes jo andre karakteristikker, der muligvis er bedre alt
> efter hvad det er for et signal, og hvad det skal bruges til
> efterfølgende.

Sekvensen består af samples af en 2450 MHz moduleret bærebølge.
Modulationsteknikken
er offset QPSK. Det kontinuerte tidssignal udregnes således:

f(t) = ai(n)*sin(pi*t/(2*T) - n*pi) * [
u(t-2*T*n)-u(t-2*T*n-2*T)]*cos(2*pi*fc*t)+
+aq(n)*sin(pi*t/(2*T) - n*pi) * [
u(t-2*T*n-T)-u(t-2*T*n-2*T-3*T)]*sin(2*pi*fc*t)

hvor t er tiden, ai(n) og aq(n) kan enten antage +1 eller -1, fc=2450MHz,
T=1/2000000, u(t)
er heavisides stepfunktion, n er blot et positivt heltal (inkl. 0).

Sekvensen S[x]=f(x*tidsstep) hvor x er samplenummer.

For at kunne demodulere sekvensen, udregner jeg 2 nye sekvenser:

I[x] = f(x*tidsstep)* cos(2*pi*fc*x*tidsstep)
Q[x] = f(x*tidsstep)* sin(2*pi*fc*x*tidsstep)

Herefter skal jeg ideelt set frafiltrere alle frekvenskomposanter større end
og lig med 2*fc.
således at jeg står tilbage med den interessante frekvenskomposant ved
frekvensen 1/(4*T).
Jeg forestiller mig at et butterworth-filter af 2. orden må være godt til
formålet(?).

>Kan man f.eks. leve med ripple i frekvensresponsen, så
> kan man få en stejlere flanke i overgangen fra pas- til stopbånd uden at
> tilføje filterkoefficienter.

Ødelægger rippler ikke det oprindelig frekvensindhold, som man ønsker at
beholde?






Martin Sørensen (11-03-2004)
Kommentar
Fra : Martin Sørensen


Dato : 11-03-04 18:50

> Sekvensen består af samples af en 2450 MHz moduleret bærebølge.
> fc=2450MHz, T=1/2000000

Din bærebølge er 2450Mhz, men din samplefrekvens er kun 2Mhz? Så vil
bærebølgen altså være repræsenteret ved en DC (0Hz) værdi i det samplede
signal?

> er heavisides stepfunktion, n er blot et positivt heltal (inkl. 0).
> Sekvensen S[x]=f(x*tidsstep) hvor x er samplenummer.

Og tidsstep=T, ikke?

> Herefter skal jeg ideelt set frafiltrere alle frekvenskomposanter
> større end og lig med 2*fc.
> således at jeg står tilbage med den interessante frekvenskomposant ved
> frekvensen 1/(4*T).

500kHz.

> Jeg forestiller mig at et butterworth-filter af 2. orden må være godt
> til formålet(?).

Kan jeg ikke gennemskue.
Jeg har ikke lige haft tid til at gennemgå alt hvad du skrev, men jeg er
lidt i tvivl om hvad der er din samplefrekvens, hvilken frekvens dit
ønskede signal ligger på, og hvilken frekvens der skal være
knækfrekvensen for filtret.

>> Kan man f.eks. leve med ripple i frekvensresponsen, så
>> kan man få en stejlere flanke i overgangen fra pas- til stopbånd
>> uden at tilføje filterkoefficienter.
> Ødelægger rippler ikke det oprindelig frekvensindhold, som man ønsker
> at beholde?

Kommer an på hvor meget ripple der skal til før indholdet er ødelagt.
0.5dB, 3dB, 10dB? Hvis du ikke har nogle frekvenskomponenter tæt på
grænsefrekvensen, så vil det sikkert være godt at acceptere lidt ripple
og få et stejlere filter.

--
signing off.. Martin Sørensen



bamse (11-03-2004)
Kommentar
Fra : bamse


Dato : 11-03-04 20:32

> Din bærebølge er 2450Mhz, men din samplefrekvens er kun 2Mhz? Så vil
> bærebølgen altså være repræsenteret ved en DC (0Hz) værdi i det samplede
> signal?

Samplefrekvensen er 1/tidsstep.

> > Sekvensen S[x]=f(x*tidsstep) hvor x er samplenummer.
>
> Og tidsstep=T, ikke?

nej. Jeg glemte at forklare hvad T er! T er chipperioden. Men den er ikke så
relevant
i den her sammenhæng.



Niels L. Ellegaard (10-03-2004)
Kommentar
Fra : Niels L. Ellegaard


Dato : 10-03-04 19:47

"bamse" <bamse@kyllingen.dkkkk> writes:
> > Så har du det filtrerede output i Y, er dog ikke testet..
> Det virker ikke. Matlab 6.5 kan ikke genkende funktionen "butter"

Jeg vil gætte på at den en del af en toolbox som man skal betale
ekstra for. Der findes en gratis version af funktionen butter til
Octave, der er en gratis (og GPL) klon af Matlab. Måske virker den
uden problemer. Om ikke andet kan du kigge i koden og se hvad der sker:
http://cvs.sourceforge.net/viewcvs.py/octave/octave-forge/main/signal/butter.m?view=markup

Her er en oversigt over lignende filer i octave:
http://octave.sourceforge.net/index/signal.html#IIRFilterdesign

Held og lykke

Niels


--
Niels L Ellegaard http://dirac.ruc.dk/~gnalle/

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste