MATLAB 도구 상자의 freqz에있는 유한 시퀀스의 DTFT가 DTFT를 얻는 방법이라고 생각합니다. 순서의. freqz는 다음 주파수 응답을 계산할 수 있습니다.

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

다음과 같이 유한 시퀀스 x(n)의 z 변환을 쉽게 계산할 수 있습니다.

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

위의 식에서 Den는 1이라는 것을 알고 있습니다.

상기 표현 : freeqz(num,den,n)는 n 지점에서 단계 응답을 제공합니다. x는 x (n)의 벡터가되므로

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

반드시 DTFT를 제공해야합니다.

1) 그렇습니까 (위 문장) 옳은? 다항식을 이동하면 어떻게 될까요 ?? 왜?

두 번째 방법은 다음과 같이 DTFT 공식을 완전히 계산하는 것입니다.

[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) 혼란 스럽습니다. 위 코드의 매개 변수 t, 중요합니까?

3)이 구현이 올바른가요? 그 이유는 무엇입니까?

그림에서 불협화음이있을 것 같습니다. 여기에 이미지 설명 입력 우리에게 잘못된 것을 말하고 있습니다! 이 변환은 순수 사인파 (그림의 코드)에서 가져옵니다. 오른쪽에서 fft, freqz 매너는 위에서 설명한대로 상단과 (왼쪽) DTFT를 설명했습니다.

“Jason R” “의 설명 후 편집 : 좋습니다. 또한 대수 스케일을 제거했습니다. 헷갈 리기 때문입니다. 그 후 직관적으로 thy are 비슷하게, 다음 이미지에서 볼 수 있지만 정확히 동일하지 않은 이유는 무엇입니까 (로그 스케일로 마지막 이미지 참조?)? 입력 여기에 이미지 설명

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

사인 샘플 :

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) 

댓글

  • 사용자가 작성한 플롯을 생성하는 완전한 스크립트를 게시해야합니다.
  • 한 가지 차이점은 코드에서 DTFT를 -fs / 2에서 + fs / 2로 플로팅하는 반면 FFT는 0에서 fs로 비교한다는 것입니다. " fft shitt ") 모든 코드를 보지 않고 두 플롯의 차이는 더 많은 점을 포함하거나 배정 밀도 부동 소수점을 사용하여 줄일 수있는 반올림 오류라고 생각합니다. DTFT는 샘플링 속도의 정수 하위 배수 인 주파수로 사인파를 생성하지 않는 한 FFT가 샘플이 될 Sinc 함수입니다. 또한 FFT를 제로 패딩하여 DTFT 샘플을 얻을 수 있습니다.
  • @DanBoschen (fft 그림, 1000은 fs / 2를 의미합니까?)
  • 1000이 없으면 fs, 파형 is at fs / 2
  • @DanBoschen 왜 그것들 (내 DTFT와 freqz, 내 말은)이 정확히 같지 않은지 설명해 주시겠습니까? fft를 채우면 sinc가 나타 납니까?

Answer

사용 된 linspace 함수는- 3000 개 샘플에 대해 fs / 2에서 + fs / 2까지이므로 + fs / 2가 두 번 계산됩니다. 반대로 0에서 N-1로 이동하는 FFT 및 freqz는 두 끝점을 복제하지 않습니다 (이 경우에는 fs가 샘플링 속도 인 fs보다 적은 DC에서 1 빈으로 이동). 따라서 샘플 위치가 정확히 동일하지 않아 두 개의 freqz 방법에서 관찰 할 수있는 차이가 발생합니다.

또한 다른 옵션 인 fft (x, 3000)로 0 채우기로 DTFT 샘플을 얻을 수 있습니다.

적절한 시작과 중지를 선택하면 잘 작동하는 linspace 대신 다음을 수행합니다.

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

댓글

  • 예, 두 번째 질문에 답하겠습니다. 귀하의 접근 방식이 정확하다고 생각합니다. 샘플 위치를 수정하면 결과가 일치해야합니다.
  • 그 '는 꽤 잘 작동했지만 두 번째 질문은 다음과 같습니다 .2) 혼란 스러웠습니다. 위 코드에서 매개 변수 t, 중요합니까?
  • 알겠습니다. t의 범위는 샘플 개수입니다. 예를 들어, freqz의 기본 512 개 샘플을 3000 개로 대체하여 동일한 DTFT의 샘플을 더 많이 제공했습니다. 즉, 범위가 ' 선택한 샘플에 대한 답을 변경하지는 않지만 결과에 더 많은 샘플을 제공합니다. 예를 들어, 샘플이 약간 다른 t 값에 있기 때문에 두 개의 다른 답변이있는 경우에도 두 경우 모두 동일한 DTFT를보고 동일한 (연속적인) 곡선에서 약간 다른 위치를 보았습니다. (DTFT는 주파수의 연속 함수입니다.)
  • t가 아니라 w 매개 변수를 설명하신 것 같습니다. 그렇지 않나요? ' t는 시간 신호 인덱스를 재정의해야하지만 인덱스는 지수에서 t와 별도로 구동 할 수 있습니다.신호 색인에 사용되는 다른 t를 사용할 수 있습니다. 더 나은 방식에서는 지수를 계산하기 전에 해당 범위를 이동할 수 있습니다. ' 그것이 '의 영향입니까?
  • 수식에서 t는 x와 길이가 같아야합니다. t의 샘플 수를 늘리면 x에 더 많은 샘플이 있어야합니다. 이는 DTFT에서 더 많은 주파수 정밀도를 의미합니다 (주파수에서 볼 수있는 Sinc 패턴은 서로 더 가까운 널을 가짐). x, t 및 주파수의 샘플 수가 모두 일치하면 DFT를 계산하는 것입니다 (FFT에 비해 장거리 방식이긴하지만, 이것이 바로 제로 패딩 FFT가 샘플을 계산하는 데 훨씬 더 효율적인 방법 인 이유입니다). DTFT의 또는 그대로 freqz를 사용하십시오.)

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다