Úgy gondolom, hogy a MATLAB eszköztárában található freqz a DTFT megszerzésének módja. a sorrend. freqz kiszámíthatja a következő frekvenciaválaszokat:

H (z) = (Num) / (Den)

Könnyen kiszámíthatjuk bármely véges szekvencia z-transzformációját x(n) így:

H (z) = x (0) z ^ 0 + x (1) z ^ 1 + …

A fenti kifejezésben tudjuk, hogy a Den értéke 1.

Emlékeztetve arra, hogy: freeqz(num,den,n) adja meg a lépés válaszát n pontban. Az x értéke legyen x (n) vektora,

[x1freqz, x1freqzw]=freqz(x,1,3000,"whole"); 

meg kell adnia a DTFT-t.

1) Ez (fenti állítás) helyes? mi történik, ha eltoljuk a polinomunkat ?? miért?

A második módszer a DTFT képlet teljes kiszámítása, így:

[X, W]=me_dtft(x1",pi,3000); figure title("my") % plot(W/pi,20*log10(abs(X))); plot(W/pi,abs(X)) ax = gca; % ax.YLim = [-40 70]; xlabel("Normalized Frequency (\times\pi rad/sample)") ylabel("Magnitude (dB)") function [X, w]=me_dtft(x,whalfrange, nsample) w= linspace(-whalfrange,whalfrange,nsample); t=0:1:size(x,2)-1; X=zeros(1,size(w,2)); for i=1:1:size(w,2) X(i)=x*exp(-t*1i*w(i))"; end end 

2) Összezavarodtam, a A fenti kódban szereplő t paraméter fontos?

3) Helyes ez a megvalósítás? Miért?

Szerintem disszonanciának kell lennie, mivel a kép: írja ide a kép leírását Valami rosszat mond nekünk! Ezeket az átalakításokat tiszta szinusz hullám veszi (kódja a képen), jobbról láthatja a fft, freqz módon elmagyarázta a DTFT tetejét és (balra) a korábbiakban leírtak szerint.

Szerkesztés a “Jason R” kommentje után: Rendben, én is eltávolítottam a logaritmikus skálát, mivel ez összezavar. Ezután intuitív módon hasonlóan, ahogy a következő képen is láthatja, de miért nem teljesen egyformák (lásd az utolsó képet logaritmikus skála szerint?)? enter képleírás itt

freqz:

[x1freqz, x1freqzw]=freqz(fliplr(XX"),1,3000,"whole"); figure title("freqz") % plot((x1freqzw/pi)-1,20*log10(abs(fftshift(x1freqz)))) plot((x1freqzw/pi)-1,abs(fftshift(x1freqz))) ax = gca; % ax.YLim = [-40 70]; ax.XTick = -1:.5:2; xlabel("Normalized Frequency (\times\pi rad/sample)") ylabel("Magnitude") 

Szinuszminta:

Fs=1000; Ts=1/Fs; time=0:Ts:1; Freqs=500; Xs=zeros(length(Freqs),length(time)); for i=1:length(Freqs) Xs(i,:)= cos(2*pi*Freqs(i)*time); end XX=Xs; XX=XX./ max(abs(XX)); figure;plot(time, XX); axis(([0 time(end) -1 1])); xlabel("Time (sec)"); ylabel("Singal Amp."); title("A sample audio signal"); sound(XX,Fs) 

Megjegyzések

  • Teljes szkriptet kell közzétennie, amely létrehozza az Ön által készített cselekményeket adta.
  • Az egyik különbség az, hogy azt látom, hogy a kódodban a DTFT-t -fs / 2-től + fs / 2-ig ábrázolod, míg az FFT 0-ról fs-re megy át összehasonlítva. (De használhatod " fft shitt ") Anélkül, hogy látnám az összes kódodat, gyanítom, hogy a két ábrán a különbség kerekítési hiba, amelyet csökkenteni lehetne, ha több pontot veszünk fel, vagy ha kettős pontosságú úszókat használunk. Vegye figyelembe, hogy a DTFT egy olyan Sinc függvény lesz, amelynek az FFT lesz a mintája, hacsak nem hoz létre olyan szinuszhullámot, amelynek frekvenciája a mintavételi frekvencia egész számának többszöröse. Tudd azt is, hogy a DTFT-ből az FFT nulla kitöltésével szerezhetsz be mintákat.
  • @DanBoschen az fft ábrán, 1000 azt jelenti, hogy fs / 2?
  • Nem: 1000 azt jelenti, hogy fs, a hullámformád az fs / 2-nél van
  • @DanBoschen Meg tudná magyarázni többet, hogy miért (a DTFT és a freqz, mármint) nem teljesen egyformák? Ha kitöltöm az fft-t, megjelenik a sinc?

Válasz

A használt linspace függvény – fs / 2-től + fs / 2-ig 3000 minta esetén, így a + fs / 2-t kétszer számolják. Ezzel szemben az FFT és a frekvencia, amely 0-ról N-1-re megy, nem duplikálja a két végpontot (ebben az esetben a DC-ből 1 bin-re kevesebb, mint fs, ahol fs a mintavételi arány). Ezért a mintahelyek nem teljesen egyformák, ami a két freqz metódusban megfigyelhető különbséghez vezet.

További lehetőségként a DTFT mintáit nulla kitöltéssel kaphatja meg: fft (x, 3000).

A linspace helyett, amely jól fog működni, ha a megfelelő kezdést és megállást választja, szeretem csinálni:

t = [0: hossz (x) -1] * 1 / fs

Megjegyzések

  • Igen a második kérdés megválaszolásához, úgy gondolom, hogy helyes a megközelítése. Miután kijavította a minta helyeit, az eredményeknek meg kell egyezniük
  • Ez a ' s nagyon szépen működött, de a második kérdésem a következő volt: 2) Összezavarodtam, a t paraméter a fenti kódban, fontos?
  • Ah látom — Nos, a t tartománya a minták száma. Az alapértelmezett 512 mintát frekvenciában felülírta például 3000-re, ami több mintát adott ugyanarról a DTFT-ről. Ennek ellenére a tartomány nem ' nem változtatja meg a választ a kiválasztott mintákra, de további mintákat ad az eredményekben. Például, még abban az esetben is, amikor két különböző válasza volt, mivel a minták kissé eltérő t értékeken voltak, mindkét esetben ugyanazt a DTFT-t látta, csak kissé eltérő helyeket ugyanazon (folyamatos) görbén. (A DTFT a frekvencia folyamatos függvénye).
  • Azt hiszem, hogy a w paramétert magyarázta, nem pedig a t paramétert, nem ' ez? A t -nek felül kell írnia az időjel-indexeket, de az index külön vezethet az exponenciális t -től.a jelünk indexében használt különböző t elemeket használhatjuk, jobb sémában ezt az értéket eltolhatjuk, mielőtt kiszámítanánk az exponenciális értéket, mi ' s ez ' hatással van?
  • A képletedben a t-nek azonos hosszúságúnak kell lennie, mint x. Ha növeli a minták számát t-ben, akkor több mintával kell rendelkeznie x-ben, ami nagyobb frekvencia pontosságot jelent a DTFT-ben (a frekvenciában látott Sinc mintának nullái közelebb vannak egymáshoz). Amikor az x, t és frekvencia minták száma megegyezik, akkor a DFT-t számítja (bár a Hosszú út az FFT-hez képest — ezért a nulla párnázott FFT sokkal hatékonyabb módszer lenne a minták kiszámításához vagy csak a freqz-t használja, ahogy van)

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük