Đ ẶT VẤN ĐỀ
Khử nhiễu là một bước quan trọng do sự hiện diện của nhiễu chồng lấn với tín hiệu gốc Để thực hiện khử nhiễu, chúng ta thường sử dụng sóng “chống nhiễu” từ một nguồn phát thứ cấp, được kết nối với mạch chính theo các thuật toán khác nhau Sóng “chống nhiễu” này được tạo ra với pha ngược lại so với nhiễu, giúp triệt tiêu lẫn nhau Trong báo cáo này, chúng tôi sẽ sử dụng Python để minh họa quy trình khử nhiễu này.
Xử lý nhiễu đóng vai trò quan trọng trong nhiều lĩnh vực như điện tử y sinh, xử lý tiếng nói, âm thanh và nâng cao chất lượng hình ảnh Ứng dụng của công nghệ này có thể thấy rõ trong các thiết bị như tai nghe, điện thoại thông minh, loa thông minh và thiết bị phòng thu, giúp cải thiện trải nghiệm người dùng và chất lượng sản phẩm.
L Ý THUYẾT TỔNG QUAN
Ý tưởng khử nhiễu bắt nguồn từ sự tương tác giữa hai sóng giao thoa, nơi sóng tổng hợp phụ thuộc vào tần số, biên độ và pha của chúng Khi hai sóng hình sine có cùng biên độ nhưng ngược pha, sóng tổng hợp sẽ bị triệt tiêu Tuy nhiên, thách thức nằm ở việc xác định chính xác nhiễu và tạo ra sóng “khử nhiễu” đồng thời mà không bị trễ.
Để khử nhiễu âm thanh, người ta thường sử dụng kỹ thuật khử nhiễu bị động như enclosures, barriers và silencers, tuy nhiên các giải pháp này cồng kềnh, đắt tiền và không hiệu quả với nhiễu tần số thấp Ngược lại, hệ thống khử nhiễu chủ động có khả năng làm suy hao nhiễu tần số thấp tốt hơn, nhỏ gọn, tiết kiệm không gian và chi phí, do đó đang phát triển nhanh chóng Việc khử nhiễu tần số thấp được ưu tiên hơn vì hầu hết nhiễu trong cuộc sống hàng ngày thường dưới 1 KHz, như tiếng ồn từ động cơ hay máy bay, khiến cho việc tập trung vào khử nhiễu tần số thấp trở nên cần thiết.
Khi nghiên cứu hiện tượng vật lý, việc quan sát các đại lượng vật lý đặc trưng là rất quan trọng Phương pháp chính để thực hiện điều này là đo lường, trong đó các đại lượng vật lý được chuyển đổi thành dòng điện hoặc hiệu điện thế, được gọi là tín hiệu Những tín hiệu này chứa đựng toàn bộ thông tin về các đại lượng vật lý mà chúng ta đang quan tâm.
Hình 1-1 minh họa một tín hiệu dưới dạng hàm toán học x(t) thay đổi theo biến độc lập t Mặc dù t thường được hiểu là thời gian, nhưng nó có thể đại diện cho bất kỳ dạng nào và có thể là một biến vô hướng hoặc nhiều biến vô hướng độc lập (theo dạng vectơ).
Hình 1-1: Hàm toán học mô tả tín hiệu vật lý cần xử lí
Hình 1-2: Biểu diễn tín hiệu rời rạc theo thời gian
Nếu miền xác định của t là đường thẳng thực R, thì x(t) được gọi là tín hiệu thời gian liên tục hoặc tín hiệu tương tự Ngược lại, nếu miền này là tập hợp các số nguyên, thì tín hiệu sẽ có đặc điểm khác.
Tín hiệu theo thời gian rời rạc, ký hiệu là x(n), được định nghĩa với n là biến nguyên, bao gồm các giá trị như { , 𝑥 0 , 𝑥 1 , 𝑥 2 , } Hình 1.2 minh họa một tín hiệu rời rạc x(n).
Ứ NG DỤNG THỰC TẾ
Khử nhiễu đạt hiệu quả tối ưu khi áp dụng cho tai nghe, giúp giữ nguyên chất lượng âm thanh gốc và loại bỏ âm thanh không cần thiết xung quanh Điều này đặc biệt hữu ích cho những người làm việc trong môi trường ồn ào như gần sân bay hoặc nhà máy, bảo vệ thính giác của họ Trong ngành công nghiệp, khử nhiễu mang lại nhiều lợi ích, bao gồm tăng cường hiệu suất làm việc, giảm rung động gây hư hại vật liệu và tiết kiệm nhiên liệu Ngoài ra, tàu ngầm hoạt động êm ái giúp khó bị phát hiện Đây chỉ là một trong nhiều ứng dụng của công nghệ khử nhiễu.
Hình 1-3: Tai nghe không dây Apple Airpods Pro ứng dụng công nghệ chống ồn chủ động (Active Noise Cancellation)
Hình 1- 4: Các loại tai nghe trùm tai (over ear) có ứng dụng công nghệ khử - nhiễu
TẠO SÓNG SIN
T ẦN SỐ
Tần số là số lần của sóng sin lặp lại trong 1 giây
Trong báo cáo này, ta sẽ sử dụng tần số f = 1KHz.
C ÔNG THỨC SÓNG SINE
A: biên độ f: tần số t: mẫu Vì chúng ta cần chuyển đổi sang số, nên cần chia t cho tốc độ lấy mẫu Lưu ý: Biên độ Amplitude
Trong hầu hết các tài liệu, giá trị A thường được chọn ngẫu nhiên, thường là 1, nhưng điều này không hiệu quả cho việc tạo tín hiệu sóng sine Sóng sine được tạo ra dưới dạng dấu chấm động, tuy thuận tiện cho việc vẽ đồ thị nhưng không hỗ trợ lưu trữ vào tệp do việc xử lý các số nguyên Trong các tệp sóng âm thanh, tín hiệu thường được viết ở dạng số nguyên 16 bit, và việc sử dụng số dấu chấm động sẽ dẫn đến biểu diễn không chính xác Để khắc phục vấn đề này, cần chuyển đổi số dấu chấm động thành dạng điểm cố định bằng cách nhân biên độ với một hằng số cố định Giá trị lớn nhất của số 16 bit có dấu là.
2 15 − 1 2767 (vì bit đầu tiên là bit dấu)
Để đảm bảo tín hiệu âm thanh được phát ra đồng đều trên toàn thang, chúng ta cần nhân biên độ với 32767 Nếu muốn tín hiệu âm thanh có độ lớn bằng một nửa, hãy sử dụng biên độ 16000.
T ẠO ÂM THANH HÌNH SINE
The article discusses essential Python libraries for various computational tasks It highlights NumPy, a package that facilitates numerical calculations, and the Wave module, which provides an interface for audio formatting Additionally, it mentions the Struct module, used for converting between Python values and C structures, and concludes with Matplotlib's pyplot, a tool for creating visual plots and graphs.
Sau đây, chúng tôi sẽ trình bày các bước tạo âm thanh bằng sóng hình sine
2.4.1 Tạo sóng hình sine với tần số 1000 Hz a Lý thuyết:
Ta sẽ tạo sóng hình sine với các thông số sau đây:
Tốc độ lấy mẫu: Sampling_rate = 48000 Hz Tần số: Frequency = 1000 Hz
Số lượng mẫu: Num_sample = 48000 Danh sách lưu các mẫu: Sine_wave =[ ] Hàm [for x in range(num_samples)]:
Sin-wave.append(np.sin(2*np.pi*frequency*x/sampling_rate)) Với: x chạy từ 0 tới (num – sampling) -1
The time interval between two consecutive samples is defined as T = 1/sampling-rate, where n represents the sample order To simplify the process, a for loop can be utilized, allowing for the generation of an average sine wave using the following code: ave = [np.sin(2*np.pi*frequency*x/sample_rate) for x in range(num_samples)].
Hình 2-1: Code tạo sóng sine với tần số 1000Hz
Sử dụng hàm plt.plot để hiển thị sóng sine tần số 1000 Hz Code:
Hình 2-2: Code vẽ sóng sine
Hình 2-3: Vẽ sóng sine, f = 1KHz
2.4.3 Lưu sóng sine với định dạng wave a Lý thuyết:
Đối với mỗi giá trị x từ 0 đến num_samples, ta sẽ tính toán giá trị sine tương ứng trên trục y và lưu trữ tất cả các giá trị này vào một danh sách Trước khi bắt đầu, chúng ta cần xem xét một số hàm cần thiết để thực hiện quá trình này.
Số kênh của âm thanh: nchannels (thường là 1 - mono audio) Chiều dài mẫu đơn vị: sampwidth (thường là 2 bytes)
Dữ liệu không được nén: comptype (compression type) → NONE compname (compression name) → not compressed. b Code:
Hình 2-4: Code khai báo số kênh âm thanh, chiều dài mẫu, số lượng mẫu và dữ liệu
Sau đó, viết các giá trị lấy mẫu vào file wave:
Hình 2-5: Code thực hiện mở file wave
● Thiết lập và chỉnh sửa các thông s ố:
Hàm writeframes là hàm ghi một sóng sine
Để ghi chép tín hiệu âm thanh vào tệp sóng, cần chuyển đổi số từ dạng dấu chấm động sang số nguyên 16 bit bằng cách nhân biên độ với một hằng số cố định (int(s*amplitude)) Dữ liệu thu được chỉ là danh sách các con số và không thể đọc được bởi các trình phát nhạc phổ biến như Windows Media Player hay VLC Player Do đó, cần sử dụng thư viện Struct để chuyển đổi và đóng gói dữ liệu dưới dạng nhị phân, giúp các trình phát âm thanh có thể đọc được dữ liệu này.
Thư viện Struct cho phép chuyển đổi dữ liệu một cách hiệu quả Ví dụ, khi ghi giá trị 0.5 vào tệp và nhân với 16000, kết quả sẽ là 10912, được biểu diễn dưới dạng chuỗi số nguyên.
Hình 2-6: Kết quả chuyển đổi dữ liệu sóng sine 0.5 sang dạng số nguyên
Sử dụng hàm struct.pack, số 7664 được chuyển đổi thành x1DF0, với giá trị 16 bit Do số nguyên 7664 vượt quá giới hạn 16 bit, struct chia thành hai phần: xF0 và x1D Giờ đây, chúng ta có thể đọc file wav bằng các trình phát âm thanh phổ biến.
Hình 2-7: Kết quả chuyển đổi dữ liệu dạng số nguyên sang dạng thập lục phân
Sử dụng vòng lặp for để lấy các mẫu sóng sine và ghi nó vào tệp, test.wav dưới dạng âm thanh 16 bit
Hình 2-8: Code ghi dữ liệu vào file wave
Lưu ý: ‘h’ có nghĩa là hex, hệ thập lục phân
2.4.4 Kiểm tra tần số của âm thanh Sau khi thiết lập thông số, chúng ta thu được sóng sine Sử dụng Audacity để quan sát sóng cũng như dạng phổ
Lưu ý rằng, ở mục trên, chúng ta đã nhân biên độ với hằng số 16000 nên thang biên độ sẽ ở mức 0.5 thay vì 1
Hình 2-9: Kết quả hiển thị dạng sóng sine với tần số 1Khz thu được từ file wave
Hình 2-10: Kết quả hiển thị phóng to dạng sóng sine với tần số 1Khz thu được từ file wave
Thực hiện kiểm tra tần số trên Audacity, Edit → Select All ( hoặc Ctrl + A), sau đó vào Analyse → Plot Spectrum
Hình 2-11: Kết quả phân tích phổ tuyến tính
Như vậy, ta có thể thấy rằng đỉnh nằm gần giá trị 1000Hz.
TÍNH TẦN SỐ SÓNG HÌNH SINE
C Ơ SỞ LÝ THUYẾT
số hóa Biến đổi Fourier nhanh (FFT) chỉ là một thuật toán để tính toán nhanh và hiệu quả của DFT
Biến đổi Fourier rời rạc (DFT) là công cụ quan trọng trong xử lý tín hiệu số, giúp tính toán phổ của tín hiệu có thời gian hữu hạn Việc mã hóa thông tin trong sóng hình sin rất phổ biến, nhưng trong một số ứng dụng, hình dạng của sóng trong miền thời gian không phải lúc nào cũng phù hợp Trong những trường hợp này, nội dung tần số của tín hiệu trở nên hữu ích hơn DFT là thuật toán chuyển đổi tín hiệu từ miền thời gian sang các thành phần trong miền tần số.
Biến đổi Fourier rời rạc (DFT) là một công cụ quan trọng trong phân tích tín hiệu Phổ của tín hiệu theo thời gian liên tục x(t) được xác định thông qua biến đổi Fourier, hay còn gọi là FT (Fourier Transform) Công thức toán học cho biến đổi Fourier giúp chúng ta hiểu rõ hơn về tần số và thành phần của tín hiệu.
Lúc x(t) được lấy mẫu bởi chuỗi xung Dirac vô hạn Δ(t) với chu kỳ lấy mẫu
T, ta có tín hiệu được lấy mẫu:
Lấy biến đổi Fourier của 𝑥 𝛥 (t), ta được:
Nếu ta đặt ꞷ = ΩT thì ꞷ có đơn vị là radian Gọi 𝑥 𝑑 (n) = x(nT) và đặt:
Biến đổi Fourier theo thời gian rời rạc (DFT) được xác định bởi phương trình trên cho tín hiệu rời rạc 𝑥 𝑑 (n) Khi không xem xét vận tốc lấy mẫu, ꞷ trở thành biến độc lập, cho phép phân tích DFT mà không cần quan tâm đến quá trình lấy mẫu, áp dụng cho mọi tín hiệu rời rạc Đáng chú ý, 𝑋 𝑑 (ꞷ) là một hàm có chu kỳ 2π, với biểu thức 𝑒 −𝑗𝑛ꞷ.
Khi phân tích 𝑋 𝑑 (ꞷ), chỉ cần xem xét một chu kỳ, có thể từ 0 đến 2π hoặc từ π đến π Đại lượng ꞷ được gọi là tần số số và có đơn vị là radian.
Trong trường hợp 𝑥 𝑑 (n) là một tín hiệu thực, ta có tính chất sau:
Kết quả cho thấy biên độ 𝑋 𝑑 (ꞷ) là hàm chẵn và pha của nó là hàm lẻ, cho thấy tất cả thông tin của phổ đều nằm trong vùng tần số dương Do đó, khi phân tích phổ tín hiệu 𝑥 𝑑 (n) thực, chỉ cần xem xét từ 0 đến π Cuối cùng, nếu 𝑋 𝑑 (ꞷ) được tính toán, có thể suy ra 𝑋 𝛥 (Ω) và từ đó xác định phổ tín hiệu x(t), với điều kiện thỏa mãn lấy mẫu Nyquist.
Phép biển đổi DFT thuận:
Phép biến đổi DFT nghịch:
Hình 3-1: Tín hiệu trong miền thời gian P(t) được biểu diễn trên miền tần số
P(v) nhờ phép biến đổi Fourier
Biến đổi Fourier nhanh (FFT) là các thuật toán tối ưu hóa để thực hiện phép biến đổi Fourier rời rạc (DFT), giúp phân tích tín hiệu rời rạc theo thời gian trong miền tần số một cách hiệu quả FFT mang lại sự cải thiện đáng kể về tốc độ và tính toán đơn giản, làm cho quá trình phân tích tín hiệu trở nên dễ dàng hơn.
Các thuật toán FFT giúp giảm độ phức tạp tính toán của DFT bằng cách tối ưu hóa thời gian và số lượng phép toán, đặc biệt cho các phép toán nặng Ngoài những thuật toán nhanh ban đầu, hiện nay còn có nhiều thuật toán mới được ứng dụng rộng rãi.
Các phép toán biến đổi:
3.2 Biến đổi Fourier chuyển đổi tín hiệu.
Biến đổi Fourier chuyển đổi tín hiệu miền thời gian sang miền tần số Tín hiệu miền thời gian
Hình 3-1 dưới đây biểu diễn dạng sóng đang thay đổi theo thời gian Trong tệp âm thanh, trình phát sẽ di chuyển ngay khi tệp phát
Hình 3-2: Đồ thị biểu diễn dạng sóng thay đổi theo thời gian
Trong miền tần số, tín hiệu có thể được phân tích và quan sát rõ ràng thông qua các tần số của nó Hình 3.2 minh họa dạng tín hiệu trong miền tần số, cho phép người dùng hiểu rõ hơn về cấu trúc và đặc điểm của tín hiệu.
Tín hiệu sẽ thay đổi nếu thêm hoặc bớt tần số và sẽ không thay đổi về theo thời gian
Tốc độ xử lý của DFT thường chậm, không đáp ứng đủ nhu cầu sử dụng, vì vậy FFT đã được phát minh Hiện nay, FFT đã trở thành công nghệ phổ biến trong hầu hết các thiết bị điện tử.
Thông qua phương pháp biến đổi đã nêu, chúng ta có thể hiểu cách hoạt động và xử lý tín hiệu bằng FFT, từ đó xác định được tần số của tín hiệu cơ bản.
In this section, we will analyze the frequency domain representation of the signal by reading the test.wav file created in Chapter I First, we will convert all the data into an array format To achieve this, we will utilize the wave readframes() function to read all audio states The code snippet includes opening the wav file with wave.open(infile, 'r') and unpacking the data using struct.unpack('{n}h'.format(n=num_samples), data).
Chúng ta đã sử dụng thư viện struct và hàm struct.pack để đóng gói dữ liệu ở dạng nhị phân Để đọc trạng thái âm thanh, cần thực hiện quá trình ngược lại, chuyển đổi dữ liệu từ dạng nhị phân về dạng số nguyên.
Sử dụng hàm struct.unpack giải nén num_samples từ dạng thập lục phân về số nguyên
Chuyển đổi dữ liệu thành mảng numpy bằng cách sử dụng câu lệnh `data = np.array(data)` Sau đó, áp dụng hàm numpy fft để lấy toàn bộ dữ liệu từ mảng với `data_fft = np.fft.fft(data)`.
Hình 3-4: Code chuyển dữ liệu sang thành mảng b Chuyển số phức thành các giá trị thực
Sau khi chuyển toàn bộ dữ liệu vào mảng numpy, vấn đề phát sinh là hàm fft trả về một mảng các số phức, điều này gây khó khăn trong việc đọc tần số.
Cụ thể là, nếu thực hiện in ra 6 giá trị đầu tiên của fft, ta thu được kết quả sau:
Hình 3-5: Kết quả khi thực hiện in ra 6 giá trị đầu tiên của fft
Hàm numpy abs() cho phép chuyển đổi tín hiệu từ dạng số phức sang dạng số thực bằng cách loại bỏ phần phức và giữ lại phần thực của dữ liệu.
Hình 3-6: Code chuyển đổi phức sang thực c Cách fft t rả về kết quả.
B IẾN ĐỔI OURIER CHUYỂN ĐỔI TÍN HIỆU F
Tần số chính (cần thiết) là 1000 Hz, và thêm tần số nhiễu sẽ là 50Hz
4.1 Tạo sóng hình sine Như đã nói ở trên, chúng ta sẽ thực hiện tạo hai sóng hình sine với tần số lần lượt là 1000Hz, 50Hz để loại bỏ tín hiệu 50Hz
Trước tiên, ta sẽ thực hiện khai báo các biến như tần số, tốc độ lấy mẫu, số lượng mẫu
Hình 4-1: Code khai báo các biến
Tiếp theo, viết hàm tạo sóng sine với các tần số tương ứng Có thể tham khảo cách tạo sóng hình sine ở Chương 1
Hình 4-2: Code tạo sóng sine với các tần số tương ứng
Chúng ta sẽ tín hiệu nhiễu vào bằng việc thực hiện với hàm numpy.
XỬ LÝ TÍN HIỆU NHIỄU
T ẠO SÓNG HÌNH SINE
Trước tiên, ta sẽ thực hiện khai báo các biến như tần số, tốc độ lấy mẫu, số lượng mẫu
Hình 4-1: Code khai báo các biến
Tiếp theo, viết hàm tạo sóng sine với các tần số tương ứng Có thể tham khảo cách tạo sóng hình sine ở Chương 1
Hình 4-2: Code tạo sóng sine với các tần số tương ứng
Chúng ta sẽ tín hiệu nhiễu vào bằng việc thực hiện với hàm numpy
Hình 4-3: Code tạo tín hiệu nhiễu
Đ Ồ THỊ
Hình 4-4: Đồ thị biểu diễn dạng sóng tín hiệu gốc, tín hiệu nhiễu và tín hiệu hỗn hợp
Hình 4-5: Code kiểm tra biến đổi fft
Thực hiện biến đổi FFT từ miền thời gian sang miền tần số theo các bước đã trình bày trong Chương 3, sử dụng hai tín hiệu đầu vào là f 00Hz và nhiễu f PHz Lưu ý rằng freq chứa tần số trong data_fft.
Hình 4-6: Code vẽ đồ thị trong miền tần số
Hình 4-7: Đồ thị phổ trong miền tần số
Sử dụng bộ lọc FFT, nghĩa là sử dụng hàm numpy
Trước tiên, ta sẽ tạo một mảng filter_freq; biến index để so sánh điều kiện tần số Sau đó thực hiện theo giải thuật sau:
Hình 4-8: Lưu đồ giải thuật
Hình 4-9: Code cho lưu đồ giải thuật
Hình 4-10: Cách code khác cho lưu đồ giải thuật
Để đạt được tần số khoảng 1000Hz, chúng ta sẽ tiến hành dò miền tần số xung quanh giá trị này Tuy nhiên, do ảnh hưởng của nhiễu, việc thu được tần số chính xác là một thách thức, dẫn đến việc một số giá trị có thể bị mất Do đó, chúng ta sẽ giới hạn vùng dò tần số trong khoảng từ 950 đến 1000Hz.
Trong tín hiệu, giá trị tần số thường nhỏ hơn 1, vì vậy khi tần số lớn hơn 1, chúng ta sẽ lưu vào mảng filter_freq Nếu tần số không nằm trong khoảng 950 đến 1000 Hz hoặc quá nhỏ, ta sẽ lưu giá trị 0 vào mảng filter_freq Sau đó, chỉ số index sẽ được tăng lên và vòng lặp for sẽ tiếp tục.
4.2.3 Đồ thị Sau khi lọc, ta sẽ biểu diễn tín hiệu ở miền thời gian và miền tần số
Hình 4-11: Code vẽ đồ thị tần số sau lọc
Hình 4-12: Đồ thị tần số sau lọc
So sánh tín hiệu sau lọc và tín hiệu nhiễu ban đầu
Hình 4-13: Code vẽ đồ thị so sánh tín hiệu nhiễu và tín hiệu lọc
Hình 4-14: Đồ thị so sánh tín hiệu nhiễu và tín hiệu lọc
THAY ĐỔI THÔNG SỐ KHÁC
TẠO ÂM THANH HÌNH SINE
Hình 5-1: Code tạo và vẽ sóng sine với tần số 2000Hz b Kết quả:
Hình 5-2: Kết quả vẽ sóng sine với tần số 2000Hz
5.1.2 Lưu sóng sine với định dạng wave
Hình 5-3: Code lưu sóng sine với định dạng wave
5.1.3 Kiểm tra tần số của âm thanh
Hình 5-4: Kết quả hiển thị dạng sóng sine với tần số 2KHz thu được từ file wave
Hình 5-5: Kết quả hiển thị phóng to dạng sóng sine với tần số 2KHz thu được từ file wave
Hình 5-6: Kết quả hiển thị dạng phổ tuyến tính
Như vậy, ta có thể thấy rằng từ hình 5 6, ta thu được đỉnh nằm gần giá trị -2000Hz.
SỬ DỤNG BIẾN ĐỔI FOURIER TÍNH TẦN SỐ SÓNG HÌNH SINE
Hình 5-7: Code chuyển đổi số phức sang số thực và vẽ biểu đồ dữ liệu b Kết quả
Hình 5-8: Kết quả dạng sóng và dạng phổ thu được
Hình 5.8 biểu diễn tất cả các giá trị tần số có thể có trong tín hiệu đầu vào, giá trị tần số lớn nhất là 2000Hz.
LỌC TẦN SỐ NHIỄU
5.3.1 Tín hiệu trước lọc nhiễu
Trước tiên, thực hiện tạo sóng với tần số 2000Hz và tần số nhiễu 100Hz Chương trình tạo sóng:
Hình 5-9: Code tạo sóng 2000Hz và sóng nhiễu 100Hz Đồ thị sau đây biểu diễn tín hiệu hỗn hợp đầu vào trong miền thời gian:
Hình 5-10: Đồ thị biểu diễn dạng sóng tín hiệu gốc, tín hiệu nhiễu và tín hiệu hỗn hợp
Hình 5-11: Đồ thị phổ trong miền tần số 5.3.2 Tín hiệu lọc nhiễu.
Chương trình lọc nhiễu và hiển thị phổ, sóng sine sau khi lọc nhiều:
Hình 5-12: Code lọc nhiễu và vẽ đồ thị phổ
Hình 5-13: Đồ thị biểu diễn phổ tần số sau lọc
Hình 5-14: Đồ thị so sánh tín hiệu nhiễu và tín hiệu lọc
Vậy là chúng ta đã thực hiện lọc tần số 100Hz, giữ lại tần số cần thiết 2000Hz.