Luulen, että MATLAB-työkalupakki freqz
on tapa saada DTFT järjestyksestä. freqz
voi laskea taajuusvasteen:
H (z) = (Num) / (Den)
Voimme helposti laskea minkä tahansa äärellisen sekvenssin z-muunnoksen x(n)
näin:
H (z) = x (0) z ^ 0 + x (1) z ^ 1 + …
Edellä olevasta lausekkeesta tiedämme, että Den
on 1.
Palautetaan mieleen, että: freeqz(num,den,n)
antaa askelvasteen n-pisteessä. Kun x on x: n (n) vektori,
[x1freqz, x1freqzw]=freqz(x,1,3000,"whole");
täytyy antaa meille DTFT.
1) Onko se (yllä oleva lause) oikea? mitä tapahtuu, jos siirrämme polynomiamme ?? miksi?
Toinen tapa on laskea DTFT-kaava kokonaan, kuten tämä:
[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) Hämmentin, onko parametri t
yllä olevassa koodissa, tärkeä?
3) Onko tämä toteutus oikea? Miksi?
Mielestäni dissonanssin on oltava, koska kuva: Kerro meille jotain vikaa! Nämä muunnokset otetaan puhtaasta siniaallosta (sen koodi kuvassa), oikealta näet fft
, freqz
tavalla selitti DTFT: n ylä- ja vasemmalle, kuten aiemmin on selitetty.
Muokkaa ”Jason R”: n kommentin jälkeen: Ok, poistin myös logaritmisen asteikon, koska se saa minut hämmentämään. Sen jälkeen intuitiivisesti sinun on samankaltaisia, kuten näet seuraavasta kuvasta, mutta miksi ne eivät ole täsmälleen samat (viittaa viimeiseen kuvaan logaritmisen mittakaavan mukaan?)?
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")
Sinimalli:
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)
kommentit
- Sinun tulee lähettää täydellinen komentosarja, joka luo juoni antoi.
- Yksi ero on, että näen koodissasi piirtävän DTFT: n arvosta -fs / 2 arvoon + fs / 2, kun taas FFT siirtyy 0: sta fs: ään verrattuna. (Mutta voit käyttää " fft shitt ") Näkemättä kaikkia koodeja epäilen, että kahden juoni ero on pyöristysvirhe, jota voitaisiin vähentää lisäämällä pisteitä tai menemällä kaksinkertaiseen tarkkuuteen. Huomaa, että DTFT on Sinc-toiminto, josta FFT on näytteitä, ellet luo siniaaltoa taajuudella, joka on näytteenottotaajuuden kokonaisluku. Tiedä myös, että voit saada näytteitä DTFT: stä nollaamalla FFT: tä.
- @DanBoschen luvussa fft, 1000 tarkoittaa fs / 2?
- Ei 1000 tarkoittaa fs, aaltomuotosi on kohdassa fs / 2
- @DanBoschen Voitteko selittää enemmän, miksi he (tarkoitan DTFT: täni ja freqziäni) eivät ole täysin samat? Jos täytän fft: n, sinc ilmestyy?
Vastaa
Käytetty linspace-toiminto alkaa – fs / 2 – + fs / 2 3000 näytteelle, joten + fs / 2 lasketaan kahdesti. Sen sijaan FFT ja taajuus, joka siirtyy 0: sta N-1: een, eivät kopioi kahta päätepistettä (tässä tapauksessa ne siirtyvät DC: stä 1 bin: iin vähemmän kuin fs, missä fs on näytteenottotaajuus). Siksi näytteiden sijainnit eivät ole täsmälleen samat, mikä johtaa havaittavaan eroon kahdessa freqz-menetelmässä.
Lisäksi saat näytteitä DTFT: stä nollapehmusteena toisena vaihtoehtona: fft (x, 3000).
Linspacen sijaan, joka toimii hienosti, jos valitset oikean aloitus- ja lopetuspisteen, haluaisin tehdä:
t = [0: pituus (x) -1] * 1 / fs
Kommentit
- Kyllä, jos haluat vastata toiseen kysymykseesi, mielestäni lähestymistapa on oikea. Kun olet korjannut näytteen sijainnit, tulosten tulisi vastata
- että ' toimivat hyvin, mutta toinen kysymykseni oli: 2) Hämmentin, onko parametri t yllä olevassa koodissa, tärkeä?
- Ah näen — No, t: n alue on näytteiden lukumäärä. Korvasit taajuudella 512 oletusnäytteen esimerkiksi arvoksi 3000, mikä antoi sinulle enemmän näytteitä samasta DTFT: stä. Siitä huolimatta alue ei muuta ' t vastausta valitsemillesi näytteille, mutta antaa sinulle lisää näytteitä tuloksissasi. Esimerkiksi silloin, kun sinulla oli kaksi erilaista vastausta, koska näytteet olivat hieman erilaisilla t-arvoilla, molemmissa tapauksissa näet saman DTFT: n, vain hieman erilaiset sijainnit samalla (jatkuvalla) käyrällä. (DTFT on jatkuva taajuusfunktio).
- Luulen, että selitit parametrin
w
, eit
, eikö ' ole sitä?t
täytyy ohittaa aikasignaali-indeksit, mutta indeksi voi ajaa erillään eksponentiaalisent
-kohdasta.voimme käyttää erilaistat
signaalin hakemistossa käytettynä, paremmassa järjestelmässä voimme siirtää aluetta ennen eksponentiaalisen laskemista, mitä ' Onko se ' vaikutus? - Kaavassa t on oltava yhtä pitkä kuin x. Jos lisäät näytteiden lukumäärää t: ssä, sinulla on oltava enemmän näytteitä x: ssä, mikä tarkoittaa enemmän taajuuden tarkkuutta DTFT: ssäsi (taajuudessa näkemässäsi Sinc-kuviossa nollat ovat lähempänä toisiaan). Kun näytteiden lukumäärä x: ssä, t: ssä ja taajuudessa kaikki täsmäävät, lasket DFT: n (vaikkakin Pitkä tie FFT: hen verrattuna — minkä vuoksi nollapehmustettu FFT olisi paljon tehokkaampi tapa näytteiden laskemiseksi tai käytä vain taajuuskorjainta kuten sinulla on)