Jeg tror freqz i en MATLAB-værktøjskasse er vejen til at få DTFT sekvens. freqz kan beregne frekvensrespons på:

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

Vi kan nemt beregne z-transformen af enhver endelig sekvens x(n) som denne:

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

Vi ved i ovenstående udtryk, at Den, er 1.

Husker at: freeqz(num,den,n) giver trinresponset i n punkt. Ved x være vektor af x (n),

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

skal give os DTFT.

1) Er det (ovenstående udsagn) korrekt? hvad sker der, hvis vi skifter vores polynom ?? hvorfor?

Den anden måde er at beregne DTFT-formlen fuldstændigt som denne:

[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 forvirrede, er området for parameter t i ovenstående kode, vigtigt?

3) Er denne implementering korrekt? Hvorfor?

Jeg synes, at der må være dissonans, da billedet: indtast billedbeskrivelse her Fortæller os noget forkert! Disse transformationer er taget fra ren sinusbølge (dens kode på billedet), fra højre kan du se fft, freqz af måde forklaret øverst og (venstre) DTFT som forklaret tidligere.

Rediger efter “Jason R” “s kommentar: Ok, også jeg fjernede logaritmisk skala, da det får mig til at forvirre. Derefter er intuitivt din som du kan se i næste billede, men hvorfor er de ikke nøjagtigt de samme (henvis til sidste billede med logaritmisk skala?)? enter billedbeskrivelse 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 skal sende et komplet script, der genererer de plot, som du gav.
  • En forskel er, at jeg ser, at du i din kode plotter DTFT fra -fs / 2 til + fs / 2, mens FFT går fra 0 til fs i sammenligning. (Men du kan bruge " fft shitt ") Uden at se al din kode, formoder jeg forskellen i de to plotter er afrundingsfejl, som ville blive reduceret ved at inkludere flere point og eller gå til dobbelt præcisionsflydninger. Bemærk, at DTFT vil være en Sinc-funktion, hvor FFT vil være eksempler på, medmindre du opretter en sinusbølge med en frekvens, der er et helt tal under multiplum af samplingshastigheden. Ved også, at du kan få prøver af DTFT ved at nulstille FFT.
  • @DanBoschen i fft-figur, 1000 betyder fs / 2?
  • Nej 1000 betyder fs, din bølgeform er ved fs / 2
  • @DanBoschen Kan du forklare mere, hvorfor de (min DTFT og freqz, jeg mener) ikke er nøjagtigt de samme? Hvis jeg polstrer fft, vises sync?

Svar

Den anvendte linspace-funktion går fra – fs / 2 til + fs / 2 for 3000 prøver, så + fs / 2 bliver talt to gange. I modsætning hertil duplikerer ikke FFT og freqz, som går fra 0 til N-1, de to slutpunkter (i dette tilfælde går de fra DC til 1 bin mindre end fs, hvor fs er samplingshastigheden). Derfor er prøveplaceringerne ikke nøjagtigt de samme, hvilket fører til forskellen, der kan observeres i de to freqz-metoder.

Yderligere kan du få prøver af DTFT ved nul polstring som en anden mulighed: fft (x, 3000).

I stedet for linspace, som fungerer fint, hvis du vælger den rigtige start og stop, kan jeg godt lide at gøre:

t = [0: længde (x) -1] * 1 / fs

Kommentarer

  • Ja for at besvare dit andet spørgsmål Jeg tror, din tilgang er korrekt. Når du har rettet prøveplaceringerne, skal resultaterne matche
  • At ' fungerede ret flot, men mit andet spørgsmål var: 2) Jeg forvirrede, er rækkevidden af parameter t i ovenstående kode, vigtig?
  • Ah jeg ser — Nå er rækkevidden af t antallet af prøver. Du overstyrede standard 512 eksempler i freqz til at være 3000 for eksempel, hvilket gav dig flere prøver af den samme DTFT. Når det er sagt, ændrer intervallet ' ikke svaret på de prøver, du vælger, men giver dig flere prøver i dine resultater. For eksempel, selv i dit tilfælde hvor du havde to forskellige svar, fordi prøverne havde lidt forskellige t-værdier, så du i begge tilfælde den samme DTFT, bare lidt forskellige placeringer på den samme (kontinuerlige) kurve. (DTFT er en kontinuerlig funktion af frekvens).
  • Jeg tror, du forklarede w parameter, ikke t, er det ikke ' t? t skal tilsidesætte tidssignalindekser, men indeks kan køre separat fra t i eksponentialet.vi kan bruge forskellige t som brugt i indekset på vores signal, i bedre ordning kan vi skifte det interval inden vi eksponerer beregning, hvad ' s det ' s indvirkning?
  • I din formel skal t have samme længde som x. Hvis du øger antallet af prøver i t, skal du have flere prøver i x, hvilket betyder mere frekvenspræcision i din DTFT (det sinkmønster, som du ser i frekvens, vil have nul tættere på hinanden). Når antallet af prøver i x, t og frekvens stemmer overens, beregner du DFT (skønt den lange vej sammenlignet med FFT — hvorfor en nulpolstret FFT ville være en meget mere effektiv tilgang for dig at beregne prøver af DTFT, eller brug bare freqz som du har)

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *