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:
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');