Jeg tror freqz i en MATLAB-verktøykasse, er måten å få tak i DTFT av sekvensen. freqz kan beregne frekvensrespons på:

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

Vi kan enkelt beregne z-transformasjonen av en hvilken som helst endelig sekvens x(n) slik:

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

Vi vet i uttrykket ovenfor at Den, er 1.

Minner om at: freeqz(num,den,n) gir trinnresponsen i n punkt. Ved x være vektor av x (n),

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

må gi oss DTFT.

1) Er det (over uttalelse) riktig? hva skjer hvis vi skifter polynomet vårt ?? hvorfor?

Den andre måten er å beregne DTFT-formelen fullstendig, slik:

[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) Jeg forvekslet, er området av parameter t i ovennevnte kode, viktig?

3) Er denne implementeringen riktig? Hvorfor?

Jeg tror det må være dissonans, siden bildet: skriv inn bildebeskrivelse her Fortelle oss noe galt! Disse transformasjonene er hentet fra ren sinusbølge (koden på bildet), fra høyre kan du se fft, freqz av måte forklart øverst og (til venstre) DTFT som forklart tidligere.

Rediger etter «Jason R» «s kommentar: Ok, jeg fjernet også logaritmisk skala, siden det får meg til å forvirre. Etter det, er du intuitivt din som du kan se på neste bilde, men hvorfor er de ikke helt like (referer til siste bilde med logaritmisk skala?)? enter bildebeskrivelse her

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") 

Sinuseksempel:

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) 

Kommentarer

  • Du bør legge ut et komplett skript som genererer plottene du ga.
  • En forskjell er at jeg ser at du i koden din plotter DTFT fra -fs / 2 til + fs / 2 mens FFT går fra 0 til fs i sammenligning. (Men du kan bruke " fft shitt ") Uten å se all koden din, mistenker jeg at forskjellen i de to plottene er avrundingsfeil som ville bli redusert ved å inkludere flere poeng og eller gå til doble presisjonsflyter. Merk at DTFT vil være en Sink-funksjon som FFT vil være eksempler på, med mindre du oppretter en sinusbølge med en frekvens som er et heltall submultipel av samplingsfrekvensen. Vet også at du kan få prøver av DTFT ved å nullstille FFT.
  • @DanBoschen i fft-figur, 1000 betyr fs / 2?
  • Nei 1000 betyr fs, din bølgeform er på fs / 2
  • @DanBoschen Kan du forklare mer hvorfor de (min DTFT og freqz, jeg mener) ikke er helt like? Hvis jeg polstrer fft, vises sync?

Svar

Linspace-funksjonen som brukt går fra – fs / 2 til + fs / 2 for 3000 prøver så + fs / 2 blir tellet to ganger. I motsetning til dette dupliserer ikke FFT og freqz, som går fra 0 til N-1, de to sluttpunktene (i dette tilfellet går de fra DC til 1 bin mindre enn fs der fs er samplingsfrekvensen). Derfor er ikke stedene nøyaktig de samme, noe som fører til forskjellen som kan observeres i de to freqz-metodene.

Videre kan du få prøver av DTFT ved null polstring som et annet alternativ: fft (x, 3000).

I stedet for linspace som fungerer helt fint hvis du velger riktig start og stopp, liker jeg å gjøre:

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

Kommentarer

  • Ja for å svare på det andre spørsmålet ditt, jeg tror at tilnærmingen din er riktig. Når du har løst prøvestedene, skal resultatene matche
  • At ' fungerte ganske bra, men det andre spørsmålet mitt var: 2) Jeg forvirret, er omfanget av parameter t i ovennevnte kode, viktig?
  • Ah jeg ser — Vel, rekkevidden av t er antall prøver. Du overstyrte standard 512 eksempler i freqz til å være 3000 for eksempel, noe som ga deg flere eksempler av samme DTFT. Når det er sagt, endrer området ikke ' t svaret på prøvene du velger, men gir deg flere prøver i resultatene dine. For eksempel, selv i ditt tilfelle hvor du hadde to forskjellige svar fordi prøvene hadde litt forskjellige t-verdier, så du i begge tilfeller den samme DTFT, bare litt forskjellige steder på samme (kontinuerlige) kurve. (DTFT er en kontinuerlig funksjon av frekvens).
  • Jeg tror du forklarte w parameter, ikke t, er ikke ' t det? t må overstyre tidssignalindekser, men indeks kan kjøre separat fra t i eksponentiell.vi kan bruke forskjellige t som brukes i indeksen til signalet vårt, i bedre oppsett kan vi skifte det området før vi beregner eksponentielt, hva ' s det ' s innvirkning?
  • I formelen din må t ha samme lengde som x. Hvis du øker antall prøver i t, må du ha flere prøver i x, noe som betyr mer frekvenspresisjon i DTFT (Sinkmønsteret som du ser i frekvens vil ha null nærmere hverandre). Når antall prøver i x, t og frekvens stemmer overens, beregner du DFT (selv om den lange veien sammenlignet med FFT — det er grunnen til at en nullpolstret FFT ville være en mye mer effektiv tilnærming for deg å beregne prøver av DTFT, eller bare bruk freqz som du har)

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *