Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (898.2 KB, 120 trang )
for (int i = 0; i < psd.length; i++) {
if (psd[i] < noisePowerCutoff) {
r_d[i] = 0;
i_d[i] = 0;
}
}
fftInstance.reverseFFT(r_d,i_d);
ulc = new UlawCodec(r_d);
ulc.play();
}
Hai phơng thức removeNoise và addNoise đợc đặt dói sự chọn lựa của ngời sử
dụng trên thanh chọn chính.
MenuItem addNoise_mi
= addMenuItem(m,"[A] Add Noise");
MenuItem removeNoise_mi
= addMenuItem(m,"[R] Remove Noise");
Trên hình 5.7 là dạng sóng sau khi cộng thêm tạp âm.
PSD của sóng sine sau khi cộng thêm tạp âm có dạng.
Hình 5.8
Khe hở phổ
fk =
k
N t
Nhớ lại trong công thức 5.6 chúng ta chỉ ra tần số của mẫu thứ k của phổ là
fk.
Ví dụ, khi số lợng mẫu là 2048 mẫu, N=2048, tần số nhỏ nhất là 8000/2048 =
3.9Hz. Đối với phổ đợc chỉ ra trên hình 6.5, điểm trung tâm là
N/2=2048/2=1024. Theo công thức 6.6 , chúng ta tính tần số cao nhất có thể đa
78
ra đợc 2048 mẫu (tần số lấy mẫu 8000Hz) là (8000/2048)*1024=4000Hz. Đồng
thời chúng ta có thể tính mẫu nh sau:
k = Nf k/ f s
Do đó với sóng răng ca nh trên hình 6.8 chúng ta muốn nhận đợc biên độ lớn
nhất sẽ xuất hiện tại tần số k= 2048*400/8000=102.4. Nhng FFT ( hay DFT) có
thể hiển thị tại tần số 102.4 nh thế nào. Câu trả lời là năng lợng sẽ trải ta trên
khoảng xung quanh các tần số 102 và 103, thông thờng tần số thứ k trong miền
tần số đợc coi nh một hộp " bin". Bởi vì cấu thành tần số 400Hz là có cả hai
"bin" 102 và 103, hiện tợng nh vậy gọi là khe hở phổ (Spectral Leakage). Vấn đề
đặt ra với hiện tợng này là sự khác nhau đối với các tần số khác nhau. Ví dụ tại
tần số 390.625 Hz k=2048*390.625/8000 =10 kết quả là số nguyên. Khi đó
không có hiện tợng Spectral Leakage, nh vậy trong miền tần số có một số các tần
số tại đó không có hiện tợng Spectral Leakage, còn phần lớn các tần số thì xuất
hiện hiện tợng Spectral Leakage, đó là đặc điểm lọt phổ cơ bản của miền tần số.
Một kĩ thuật đợc biết đến là sử dụng các cửa sổ lấy mẫu tín hiệu, hiệu quả của
việc sử dụng cửa sổ lấy mẫu là ở chỗ có thể hạn chế đợc hiện tợng Spectral
Leakage ở một mức độ cho phép. Hiện nay có nhiều loại cửa sổ thích hợp cho
từng bộ lọc một ví dụ nh cửa sổ Cesaro, Hann, Hamming, Parzen, Welch ....
trong nội dung cuốn sách này chúng ta không đi vào chi tiết các bộ lọc. Một
trong các cửa sổ lấy mẫu tín hiệu thông dụng nhất là cửa sổ Hanning. Công thức
biểu diễn nh sau:
2j
w j = 1 cos
N 1
j [ 0..N 1]
(5.18)
trên hình 5.9 thể hiện hình dạng của cửa sổ với 256 điểm lấy mẫu.
Hình 5.9 Cửa sổ Hanning
Trong chơng trình cửa sổ đợc thực hiện bằng phơng thức makeHann:
public double[] makeHanning(int n) {
double window[] = new double[n];
double arg = 2.0 * Math.PI/ (n - 1);
for (int i = 0; i < n; i++)
window[i] = 0.5 - 0.5 * Math.cos(arg*i);
return window;
79
}
Để thực hiện việc lấy mẫu tín hiệu bằng cửa sổ chúng ra viết một phơng thức
có tên là multHann() :
public void multHanning() {
double[] r_d = getTruncatedDoubleData();
double[] window = makeHanning(r_d.length);
windowAudio(r_d, window, "hanning");
}
Một số dạng cửa sổ thông dụng khác nh cửa sổ Lyon, cửa sổ Bartlett có phơng
trình biểu diễn nh sau:
Cửa sổ Lyon:
5
2j
N 1
4
3
u=
, j 0..
6u 15u + 10u
N 1
2
wj =
6u 5 + 15u 4 10u 3 + 1 u = 2 j + 1 N , j N 1 ..N 1
2
N 1
(5.19)
Cửa sổ Bartlet:
2j
N 1
j 0..
N 1
2
wj =
N 1
2 2 j
j
..N 1
N 1
2
(5.20)
Bộ lọc thông cao (the Hight-Pass Filter)
Cách đơn giản để thiết kế bộ lọc thông cao là thực hiện biến đổi FFT trên dữ
liệu tín hiệu đa vào sau đó nhân với phổ của bộ lọc. Ví dụ chúng ta gán giá trị
không cho những điểm thuộc tần số thấp sử dụng hàm băng thông chữ nhật nh
trên hình 5.10.
Hình 5.10 Bộ lọc thông cao
Trên hình 5.11 là sóng sine cùng với cửa sổ chữ nhật, sóng sine có tần số
400Hz và tần số lấy mẫu là 8000Hz.
80
Hình 5.11
Tơng tự khi sử dụng cửa sổ Hanning và Bartlett chúng ta thu đợc các hình ảnh
sau:
Đối với cửa sổ Barlett
Đối với cửa sổ Hanning
81