THỰC HIỆN FFT-N ĐIỂM 1.. Viết chương trình thực hiện tìm biến đổi DFT của tín hiệu trên và vẽ đồ thị phổ biên độ miền tần số... Viết chương trình thực hiện tìm biến đổi FFT-128 điểm của
Trang 25.1 THỰC HIỆN FFT-N ĐIỂM
1 Tạo một mẫu tín hiệu sine có các thành phần tần số 200 Hz và 3000 Hz trong khoảng
thời gian t = 0 đến t = 0.1 s, với tần số lấy mẫu Fs = 8 kHz từ chương trình Matlab và lưu vào biến giá trị xn:
a Viết chương trình thực hiện tìm biến đổi DFT của tín hiệu trên và vẽ đồ thị phổ biên độ miền tần số
- Code Matlab:
Fs = 8000;
Ts = 1/Fs;
T = 0.1
t = 0:Ts:T - Ts;
xn = sin(2*pi*200*t) + sin(2*pi*3000*t);
L = length(xn);
xk = fft(xn,L);
xk_mag = abs(xk);
xk_phase = angle(xk);
% Signal plot
subplot(1,3,1);
plot(t,xn);
xlabel('Time (sec)');
ylabel('Amplitude');
title('x(n)');
% Spectrum plot
subplot(1,3,2);
stem((0:L/2-1)*Fs/L,xk_mag(1:L/2)/L);
xlabel('Frequency (Hz)');
ylabel('Amplitude');
title('Magnitude');
Trang 3- Kết quả mô phỏng:
b Viết chương trình thực hiện tìm biến đổi FFT-128 điểm của tín hiệu trên và vẽ
đồ thị phổ biên độ miền tần số
- Code Matlab:
Fs = 8000;
Ts = 1/Fs;
T = 0.1
t = 0:Ts:T - Ts;
xn = sin(2*pi*200*t) + sin(2*pi*3000*t);
L = 128;
xk = fft(xn,L);
xk_mag = abs(xk);
xk_phase = angle(xk);
% Signal plot
subplot(1,3,1);
plot(t,xn);
xlabel( 'Time (sec)' );
ylabel( 'Amplitude' );
title( 'x(n)' );
% Spectrum plot
subplot(1,3,2);
stem((0:L/2-1)*Fs/L,xk_mag(1:L/2)/L);
xlabel( 'Frequency (Hz)' );
ylabel( 'Amplitude' );
Trang 4title( 'Magnitude' );
subplot(1,3,3);
stem((0:L/2-1)*Fs/L,xk_phase(1:L/2));
xlabel( 'Frequency (Hz)' );
ylabel( 'Phase' );
title( 'Phase' );
- Kết quả mô phỏng:
c Viết chương trình thực hiện tìm biến đổi FFT-256 điểm của tín hiệu trên và vẽ
đồ thị phổ biên độ miền tần số
- Code Matlab:
Fs = 8000;
Ts = 1/Fs;
T = 0.1
t = 0:Ts:T - Ts;
xn = sin(2*pi*200*t) + sin(2*pi*3000*t);
L = 256;
xk = fft(xn,L);
xk_mag = abs(xk);
xk_phase = angle(xk);
% Signal plot
subplot(1,3,1);
plot(t,xn);
Trang 5xlabel( 'Time (sec)' );
ylabel( 'Amplitude' );
title( 'x(n)' );
% Spectrum plot
subplot(1,3,2);
stem((0:L/2-1)*Fs/L,xk_mag(1:L/2)/L);
xlabel( 'Frequency (Hz)' );
ylabel( 'Amplitude' );
title( 'Magnitude' );
subplot(1,3,3);
stem((0:L/2-1)*Fs/L,xk_phase(1:L/2));
xlabel( 'Frequency (Hz)' );
ylabel( 'Phase' );
title( 'Phase' );
- Kết quả mô phỏng:
Trang 65.2 THỰC HIỆN STFT
2 Tạo một mẫu tín hiệu âm thanh có định dạng wav từ chương trình Matlab hoặc các
ứng dụng khác và lưu vào biến giá trị xn:
a Viết chương trình thực hiện tìm biến đổi STFT của tín hiệu âm thanh trên với cửa sổ Gaussian độ dài 256, độ dài chồng lấn 30 Sau đó vẽ đồ thị phổ biên độ miền tần số của biến đổi STFT trên
- Code Matlab:
clc;
clear;
[xn,Fs] = audioread('Nguyễn-Trần-Tú-Anh.wav');
% ham stft
[S,F,T] = stft(xn,'Window', gausswin(256),'OverlapLength',30);
waterfall(F,T,abs(S(:,:,1))');
figure(1);
xlabel('k');
ylabel('Frequency (Hz)');
zlabel('Amplitude');
title('STFT');
% ham dft
L=length(xn);
t=0:Fs/L:(L-1)*Fs/L;
xk = fft(xn,L);
xk_mag = abs(xk);
figure(2);
subplot(1,3,2);
stem((0:L/2-1)*Fs/L,xk_mag(1:L/2)/L);
xlabel('Frequency (Hz)');
ylabel('Amplitude');
title('Magnitude');
Trang 7-Kết quả mô phỏng:
b Nhận xét và giải thích đồ thị trên
Cửa sổ Gauss có độ dài L=256 dùng cho biến đổi STFT với khoảng k gần nhau sẽ mô phỏng phổ biên độ của tín hiệu âm thanh ban đầu chính xác hơn so với biến đổi DFT