153
>> x_noisy = x + randn(size(t)); % Tao tin hieu nhieu
>> plot(t(1:N/2),x_noisy(1:N/2), 'k-', 'linewidth',1), grid on
>> xlabel('t [s]'), ylabel('x'),
>> title('Tin co nhieu')
Tín hiệu nhiễu được vẽ ra như trên hình 7-13.
0
0.5
1
1.5
2
2.5
3
- 10
- 5
0
5
10
t [s]
x
Tin co nhieu
Hì
nh 7-13. Tín hiệu có nhiễu trong ba giây đầu tiên
Bây giờ ta sẽ sử dụng phép biển đổi Fourier nhanh ñể phân tích xem trong tín hiệu
nhiễu có chứa những tần số nào. Phép biến đổi Fourier nhanh dựa trên n điểm tín
hiệu được thực hiện bởi lệnh fft(f, n). Để thực hiện ví dụ này, ta soạn một Script
như sau :
% Su dung phan tich Fourier nhanh tim tan so trong tin hieu
Fs = 20; % Tan so lay mau, Fs >= 2 tan so cua tin hieu
T = 1/Fs; % Chu ky lay mau
L = 600; % Chieu dai tin hieu,
t = (0:L-1)*T; % Cac thoi diem lay mau
x = 3*cos(pi*t)+2*cos(3*pi*t)+cos(6*pi*t);
x_noisy = x + randn(size(t)); % Tao tin hieu nhieu
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
N = NFFT; % so diem su dung trong fft, la 2^z
FT = fft(x_noisy, N); % goi ham fft
P = FT.*conj(FT)/N; % cong suat trong tin hieu,
% hay binh phuong bien do
f = Fs/2*linspace(0,1,N/2+1)
plot(f,P(1:N/2+1), 'k-', 'linewidth',1), grid on
xlabel('Hz'), title('Pho cong suat')