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

Matlab, generacja sygnału i widma sygnału.

Marcin_krk 26 Lip 2010 19:14 6618 0
REKLAMA
  • #1 8332526
    Marcin_krk
    Poziom 1  
    witam Szanownych Użytkowników,

    chciałbym prosić Was o pomoc, mianowicie, napisałem program, który nie jest do końca dobry, gdyż występują w nim 2 zasadnicze problemy:

    1. Wykres sygnału przefiltrowanego i zdecymowanego jest "przesunięty" nieznacznie względem wykresu sygnału podstawowego.

    2.(ważniejszy) nie mam pojęcia dlaczego program nie chce mi wyrysować widma sygnału po zagęszczeniu

    bardzo proszę o pomoc, a oto ten program:

    Cytat:
    clear all:
    clc;

    k=0.001;
    t=0:k:10-k; %czas

    disp('Program generuje sygnal: sygnal=sin(100.*t)+2*sin(125.*t)+sin(150.*t)+rand(1,10000)')


    %Generacja sygnału

    sygnal=sin(100.*t)+2*sin(125.*t)+3*sin(150.*t)+rand(1,10000); % rand "losuje" liczbę z przedziału (0,1)
    %rand(m,n) powoduje wylosowanie macierzy liczb z przedziału m,n
    subplot(3,2,1);
    plot(t,sygnal,'k');
    title('Sygnał stały')

    %generowanie widma za pomocą transformacji Fouriera

    nt=length(t);
    fx = fft(sygnal);
    nx = length(fx);
    base =k\(0:(nt/2-1))/nt; %wyznaczenie osi częstotliwości
    powerx = abs(fx(1:nx/2)); %wyznaczenie widma
    powerxn = 2*powerx./nx; %normalizacja odpowiedzi
    subplot(3,2,2)
    plot(base,powerxn,'r');
    title('Widmo sygnału stałego');


    %Filtrowanie sygnału filtrem eliptycznym

    [a,b]=ellip(4, 1, 70, [10/1000, 100/1000] ); % ellip wyznaczanie transmitancji filtru eliptycznego (analogowego lub cyfrowego)
    filtrSygn=filter(a,b,sygnal); %[b,a] = ellip(n, Rp, Rs, Wn, opcje)
    %b,a - wektory wierszowe współczynników wielomianów transmitancji (lub równania różnicowego) filtru;
    %n - rząd filtru;
    %Rp - tętnienia w pasmie przepustowym (w dB);
    %Rs - tłumienie w pasmie zaporowym (w dB);
    %Wn - 3-decybelowa
    %górna pulsacja graniczna pasma przepustowego dla filtrów

    subplot(3,2,3);
    plot(t,filtrSygn,'k');

    %Decymacja, wybieramy co 10 próbkę z sygnału "filtrSygn"

    hold on

    dr=10; %rząd decymacji
    y=decimate(filtrSygn,dr);
    fd=k*dr; %częstotliwość decymacji
    ny=length(y);
    ty=fd-k:fd:ny*fd;
    subplot(3,2,3)
    plot(ty,y,'g');
    title('Przefiltrowany i zdecymowany sygnał stały');

    %Generowanie widma sygnału zdecymowanego za pomocą transformacji Fouriera

    nt1=length(ty);
    fx1 = fft(y);
    nx1 = length(fx1);
    base1 =k\(0:(nt1/2-1))/(dr*nt1);
    powerx1 = abs(fx1(1:nx1/2));
    powerxn1 = 2*powerx1./nx1;
    subplot(3,2,4)
    plot(base1,powerxn1,'r');
    title('Widmo przefiltrowanego i zdecymowanego sygnału');


    %Interpolacja liniowa sygnału stałego z zagęszczeniem 2-krotnym

    subplot(3,2,5);
    plot(ty,y,'m');

    hold on

    ti=0:0.005:10;
    yi=interp1(ty,y,ti,'linear');
    subplot(3,2,5);
    plot(ti,yi,'xb');
    title('Charakterystyka interpolacji liniowej sygnału stałego z zagęszczeniem 2-krotnym')

    %Generowanie widma sygnału zdecymowanego stałego z zagęszczeniem 2-krotnym za pomocą transformacji Fouriera

    nt2=length(ti);
    fx2 = fft(yi);
    nx2 = length(fx2);
    base2 =k\(0:(nt2/2-1))/nt2;
    powerx2 = abs(fx2(1:nx2/2));
    powerxn2 = 2*powerx2./nx2;
    subplot(3,2,6)
    plot(base2,powerxn2,'r');
    title('Widmo przefiltrowanego i zdecymowanego sygnału z zagęszczeniem 2-krotnym');
  • REKLAMA
REKLAMA