logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Cyfrowe przetwarzanie sygnałów Matlab filtrowanie

WojtekWojtek 31 Sty 2010 12:48 6281 4
REKLAMA
  • #1 7620633
    WojtekWojtek
    Poziom 10  
    Analiza sygnału: x(t)=4×sin^3 8000πt×cos3000πt

    Zadania:
    Dobór parametrów próbkowania (częstotliwości oraz ilości próbek)
    Przeprowadzić szybką transformatę Fouriera

    Przekształcenie wzoru sygnału:

    x(t)=4×sin^3 8000πt×cos3000πt
    x(t)=4×sin^2 8000πt×(sin8000πt×cos3000πt)
    x(t)=4×sin^2 8000πt×(1/2[sin⁡(11000πt)+sin⁡(5000πt)])
    x(t)=2×sin^2 8000πt×[sin⁡(11000πt)+sin⁡(5000πt)]

    W przekształceniu wykorzystany został wzór:
    sinαcosβ= 1/2[sin⁡(α+β)+sin⁡(α-β)]

    Kolejnym etapem analizy sygnału jest określenie maksymalnej częstotliwości:
    f_max=ω/2π=11000π/2π=5,5kHz
    Zgodnie z kryterium Nyquista:
    f_s≥11kHz
    Wybrana przeze mnie częstotliwość równa się 16kHz.
    Następną rzeczą jest wyznaczenie ilości próbek N dla 1 i 2 okresów sygnału:
    Dla 1 okresu: N=64;
    Dla 2 okresów: N=128;








    t=linspace(0,(4/2)*0.001,10000);
    x=4*((sin(8000*pi*t).^3).*cos(3000*pi*t));%przebieg badanej funkcji dla 1 okresu
    subplot(3,2,1)
    plot(t,x) %rysuj wykres x=f(t)
    title('x=f(t)')
    xlabel('t')
    ylabel('x')
    grid on

    N=64; %liczba próbek
    fs=16000; %częstotliwość próbkowania
    ts=1/fs; %okres probkowania
    m=fs/N; %rozdzielczość próbkowania
    t=linspace(0,(N-1)*ts,N); %dyskretyzacja czasu
    x=4*((sin(8000*pi*t).^3).*cos(3000*pi*t)); %próbkowanie sygnału
    A=[x] %wektor próbek

    subplot(3,2,3)
    stem(fs*t,x) %rysuj próbkowany sygnał x=f(n)
    title('x=f(n)')
    xlabel('n')
    ylabel('x')

    X=fft(x); %wyznacz wartości z analizy fft
    f=linspace(0,fs-m,N) %dyskretyzacja czestotliwości
    subplot(3,2,5)
    stem(f,X) %rysuj fft X=f(f)
    title('X=f(f)')
    xlabel('f')
    ylabel('X')




    t=linspace(0,(8/2)*0.001,10000);
    x=4*((sin(8000*pi*t).^3).*cos(3000*pi*t));%przebieg badanej funkcji dla 2 okresów
    subplot(3,2,2)
    plot(t,x) %rysuj wykres x=f(t)
    title('x=f(t)')
    xlabel('t')
    ylabel('x')
    grid on

    N=128; %liczba próbek
    fs=16000; %częstotliwość próbkowania
    ts=1/fs; %okres probkowania
    m=fs/N; %rozdzielczość próbkowania
    t=linspace(0,(N-1)*ts,N); %dyskretyzacja czasu
    x=4*((sin(8000*pi*t).^3).*cos(3000*pi*t)); %próbkowanie sygnału
    A=[x] %wektor próbek

    subplot(3,2,4)
    stem(fs*t,x) %rysuj próbkowany sygnał x=f(n)
    title('x=f(n)')
    xlabel('n')
    ylabel('x')

    X=fft(x); %wyznacz wartości z analizy fft
    f=linspace(0,fs-m,N) %dyskretyzacja czestotliwości
    subplot(3,2,6)
    stem(f,X) %rysuj fft X=f(f)
    title('X=f(f)')
    xlabel('f')
    ylabel('X')

    Powyżej przedstawiłem moją analizę danego sygnału x. Powyższy sygnał musi zostać odfiltrowany za pomocą sygnału: S_a (2π12500t)=sin⁡(25000πt)/25000πt. Proszę o pomoc w rozwiązaniu tego zadania. Czy ktoś mógłby napisać jak się za to zabrać?
    Pozdrawiam
  • REKLAMA
  • Pomocny post
    #2 7620957
    __Grzegorz__
    Poziom 30  
    Maksymalna pulsacja tego sygnału to na pewno nie jest 11000*pi [1/s].

    Kolega zapomniał o
    x(t)=2×sin^2 8000πt×[sin⁡(11000πt)+sin⁡(5000πt)]
    ...

    Dodano po 20 [minuty]:

    żeby określić pulsację maksymalną musisz ze wzoru opisującego sygnał pozbyć się mnożeń.

    x(t)=2×sin^2 8000πt×[sin⁡(11000πt)+sin⁡(5000πt)]=
    2 x sin 8000πt x sin 8000πt x [sin⁡(11000πt)+sin⁡(5000πt)]...

    Musisz skorzystać jeszcze 2 x ze wzoru na iloczyn sinusów i zamienić to na sinusy/cosinusy sum/różnic pulsacji.
  • REKLAMA
  • #3 7621170
    WojtekWojtek
    Poziom 10  
    Dziękuje i zabieram się za poprawki:)

    Dodano po 57 [minuty]:

    Poprawione zadanie (przepraszam, że tak to długo trwało):

    Analiza sygnału: x(t)=4×〖sin〗^3 8000πt×cos3000πt

    Zadania:
    Dobór parametrów próbkowania (częstotliwości oraz ilości próbek)
    Przeprowadzić szybką transformatę Fouriera

    Przekształcenie wzoru sygnału:

    x(t)=4×sin^3 8000πt×cos3000πt;
    x(t)=4×sin^2 8000πt×(sin8000πt×cos3000πt);
    x(t)=4×sin^2 8000πt×(1/2 [sin⁡(11000πt)+sin⁡(5000πt) ] );;
    x(t)=2×sin^2 8000πt×[sin⁡(11000πt)+sin⁡(5000πt) ];
    x(t)=(cos⁡(0)-cos⁡(16000πt) )×[sin⁡(11000πt)+sin⁡(5000πt) ];
    x(t)=sin⁡(11000πt)+sin⁡(5000πt)-[sin⁡(11000πt)×cos⁡(16000πt) ]-[sin⁡(5000πt)×cos⁡(16000πt) ];
    x(t)=sin⁡(11000πt)+sin⁡(5000πt)-(0.5×sin⁡(27000πt) )-(0.5×sin⁡(-5000πt))-(0.5×sin⁡(21000πt))-(0.5×sin⁡(-11000πt));

    W przekształceniu wykorzystany zostały wzory:
    sinαcosβ= 1/2[sin⁡(α+β)+sin⁡(α-β)]
    sinαsinβ= 1/2[cos⁡(α-β)-cos⁡(α+β)]

    Kolejnym etapem analizy sygnału jest określenie maksymalnej częstotliwości:
    f_max=ω/2π=27000π/2π=13,5kHz
    Zgodnie z kryterium Nyquista:
    f_s≥27kHz
    Wybrana przeze mnie częstotliwość równa się 40kHz.
    Następną rzeczą jest wyznaczenie ilości próbek N dla 1 i 2 okresów sygnału:
    Dla 1 okresu: N=64;
    Dla 2 okresów: N=128;




    t=linspace(0,(4/2)*0.001,10000);
    x=4*((sin(8000*pi*t).^3).*cos(3000*pi*t)); %przebieg badanego funkcji dla 1 okresów
    subplot(3,2,1)
    plot(t,x) %rysuj wykres x=f(t)
    title('x=f(t)')
    xlabel('t')
    ylabel('x')
    grid on
    N=64; %liczba próbek
    fs=40000; %częstotliwość próbkowania
    ts=1/fs; %okres probkowania
    m=fs/N; %rozdzielczość próbkowania
    t=linspace(0,(N-1)*ts,N); %dyskretyzacja czasu
    x=4*((sin(8000*pi*t).^3).*cos(3000*pi*t)); %próbkowanie sygnału
    A=[x] %wektor próbek
    subplot(3,2,3)
    stem(fs*t,x) %rysuj próbkowany sygnał x=f(n)
    title('x=f(n)')
    xlabel('n')
    ylabel('x')
    X=fft(x); %wyznacz wartości z analizy fft
    f=linspace(0,fs-m,N) %dyskretyzacja czestotliwości
    subplot(3,2,5)
    stem(f,X) %rysuj fft X=f(f)
    title('X=f(f)')
    xlabel('f')
    ylabel('X')

    t=linspace(0,(8/2)*0.001,10000);
    x=4*((sin(8000*pi*t).^3).*cos(3000*pi*t)); %przebieg badanego funkcji dla 2 okresów
    subplot(3,2,2)
    plot(t,x) %rysuj wykres x=f(t)
    title('x=f(t)')
    xlabel('t')
    ylabel('x')
    grid on
    N=128; %liczba próbek
    fs=40000; %częstotliwość próbkowania
    ts=1/fs; %okres probkowania
    m=fs/N; %rozdzielczość próbkowania
    t=linspace(0,(N-1)*ts,N); %dyskretyzacja czasu
    x=4*((sin(8000*pi*t).^3).*cos(3000*pi*t)); %próbkowanie sygnału
    A=[x] %wektor próbek
    subplot(3,2,4)
    stem(fs*t,x) %rysuj próbkowany sygnał x=f(n)
    title('x=f(n)')
    xlabel('n')
    ylabel('x')
    X=fft(x); %wyznacz wartości z analizy fft
    f=linspace(0,fs-m,N) %dyskretyzacja czestotliwości
    subplot(3,2,6)
    stem(f,X) %rysuj fft X=f(f)
    title('X=f(f)')
    xlabel('f')
    ylabel('X')


    __Grzegorz__ czy wiesz może w jaki sposób przefiltrować ten sygnał? Sygnał filtrujący podałem w poprzednim poście...
  • REKLAMA
  • #4 7621661
    __Grzegorz__
    Poziom 30  
    Filtrowanie jednego sygnału drugim - to trochę dziwne.

    Twój "sygnał filtrujący" to może być odpowiedź impulsowa jakiegoś filtru ("Jądro filtru" - filter kernel).

    Jeżeli tak, to w Twoim przypadku funkcja Sa (sampling), która jest odpowiedzią
    impulsową idealnego filtru dolnoprzepustowego o pulsacji granicznej 25000.

    Wszystko co ma pulsację powyżej zostanie wycięte...

    W Matlabie trzeba będzie wygenerować "sygnał filtrujący", spleść go z sygnałem oryginalnym (polecenie conv), i jak zrobisz FFT wyniku to sam zobaczysz co zostało wycięte.
  • #5 7621716
    WojtekWojtek
    Poziom 10  
    Tak właściwie sam nie wiem czym jest to Sa.. Przedstawione zostało to właśnie jako sygnał filtrujący.. Dziękuje za wszelką pomoc, będę próbował coś wykombinować:)
REKLAMA