Tải bản đầy đủ (.doc) (23 trang)

Đồ Án Chuyên Ngành Đề Tài Audio Visualizer.doc

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 (799.86 KB, 23 trang )

ĐẠI HỌC ĐÀ NẴNG

KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

ĐỒ ÁN CHUYÊN NGÀNH
ĐỀ TÀI: AUDIO VISUALIZER


MỞ ĐẦU

Ngày nay khoa học kỹ thuật trên thế giới nói chung, ở Việt Nam nói riêng đang
trên đà phát triển mạnh mẽ và không ngừng nâng cao phát triển về mọi mặt.
Đặc biệt là ngành công nghệ thông tin. Để đáp ứng nhu cầu ngày càng cao của
con người thì hàng loạt các cơng ty về máy tính được ra đời và các ứng dụng
công nghệ thông tin đang được áp dụng ngày một nhều hơn.Với công nghệ hiện
đại như ngày nay thì con người dần dần được giải phóng bởi những cơng việc
nặng nhọc và thay vào đó là những ứng dụng của công nghệ thông tin ngày một
hiện đại và kỹ xảo như các robot, máy tự động. Đặc biệt là trong lĩnh vực giải trí,
nhu cầu giải trí của con người này càng cao. Địi hỏi những phần mềm phục vụ
giải trí độc đáo hơn. Audio Visualizer là một ứng dụng cho phép nghe nhạc và
biểu diễn quang phổ một cách sinh động, phục vụ nhu cầu giải trí của con người.


LỜI CẢM ƠN
Để hoàn thành chuyên đề báo cáo thực tập này trước tiên em xin gửi đến cô Hà
Thị Minh Phương lời cảm ơn chân thành và sâu sắc nhất.
Vì kiến thức bản thân cịn hạn chế, trong q trình nghiên cứu, hồn thiện
chun đề này em khơng tránh khỏi những sai sót, kính mong nhận được những
ý kiến đóng góp từ cơ.
Em xin chân thành cảm ơn.



MỤC LỤC
Trang
MỞ ĐẦU......................................................................................................... 1
Chương 1 Giới thiệu.........................................................................................10
1.1 Tổng quan...............................................................................................10
1.1.1 Audio visualizes là gì........................................................................10
1.1.2 Bối cảnh thực hiện đề tài.................................................................11
1.1.3 Vấn đề cần giải quyết......................................................................12
1.2 Phương pháp, kết quả............................................................................12
1.2.1 Phương pháp...................................................................................12
1.2.2 Kết quả.............................................................................................12
Chương 2 Nghiên cứu tổng quan.....................................................................13
2.1 Biến đổi Fourier là gì..............................................................................13
2.1.1 Khái niệm.........................................................................................13
2.1.2 Ứng dụng.........................................................................................13
2.2 Cơng nghệ sử dụng.................................................................................13
2.2.1 Python là gì......................................................................................13
2.2.2 Thư viện Numpy..............................................................................14
2.3 Mơ hình, các bước thực hiện.................................................................15
2.4 Thiết kế chi tiết.......................................................................................15
Chương 3 Triển khai xây dựng.........................................................................16
Chương 4 Kết luận và Hướng phát triển..........................................................17
PHỤ LỤC.............................................................................................................121
DANH MỤC TÀI LIỆU THAM KHẢO.....................................................................130


DANH MỤC HÌNH

Trang


Hình 1.1: Một số loại máy phân tích phổ...............................................................1
Hình 1.2: Biểu diễn specrum của âm thanh dưới dạng đường thẳng....................2
Hình 1.3: Biểu diễn specrum của âm thanh dưới dạng hình trịn..........................2
Hình 1.4: Biểu diễn specrum của âm thanh dưới dạng sóng 3D............................2
Hình 1.5: Hình ảnh minh họa cho kết quả thực hiện.............................................3
Hình 1.6: Spectrum của một tập tin âm thanh......................................................3


DANH MỤC CỤM TỪ VIẾT TẮT
STT
1
2

Cụm từ
Công nghệ phần mềm
Công nghệ thông tin
…..

Viết tắt
CNPM
CNTT


Chương 1

Giới thiệu

1.1 Tổng quan
1.1.1 Audio visualizes là gì

Audio visualizes là một dạng biểu diễn âm thanh ở miền tần số, và được biểu
diễn lên màn hình dưới dạng quang phổ(Spectrum).
Audio visualizes được ứng dụng vào nhiều lĩnh vực:
- Lĩnh vực nghiên cứu
 Máy phân tích phổ
 Máy đo độ rung
 Máy đo tiếng ồn
 Máy hiện sóng
 Máy kiểm tra an tồn thiết bị điện,..

-

Hình 1.1: Một số loại máy phân tích phổ

Lĩnh vực giải trí
 Audio visualizer và một số biến thể khác
 …

1


Hình 1.2: Biểu diễn specrum của âm thanh dưới dạng đường thẳng

Hình 1.3: Biểu diễn specrum của âm thanh dưới dạng hình trịn

Hình 1.4: Biểu diễn specrum của âm thanh dưới dạng sóng 3D

2



1.1.2 Bối cảnh thực hiện đề tài
Nhận thấy những kiến thức về lĩnh vực tín hiệu số là quan trọng trong q trình
học nên nhóm em đã chọn ra một đề tài để thực hiện nhằm mục đích nghiên
cứu và học tập, nâng cao trình độ bản thân
1.1.3 Vấn đề cần giải quyết
Xây dựng ứng dụng thực hiện tính tốn và biểu diễn âm thanh dưới dạng
spectrum

Hình 1.5: Hình ảnh minh họa cho kết quả thực hiện

1.2 Phương pháp, kết quả
1.2.1 Phương pháp
Qua q trình nghiên cứu, nhóm đã tìm ra thuật toán là sử dụng biến đổi Fast
Transform Fourier
1.2.2 Kết quả
- Ứng dụng được viết bằng Python
- Nhận đầu vào là một tập tin audio và xuất ra màn hình Spectrum của tập
tin âm thanh đó

Hình 1.6: Spectrum của một tập tin âm thanh

3


Chương 2

Nghiên cứu tổng quan

2.1 Biến đổi Fourier là gì
2.1.1 Khái niệm

Biến đổi Fourier hay chuyển hóa Fourier, được đặt tên theo nhà toán học người
Pháp Joseph Fourier, là phép biến đổi một hàm số hoặc một tín hiệu theo miền
thời gian sang miền tần số. Chẳng hạn như một bản nhạc có thể được phân tích
dựa trên tần số của nó.
2.1.2 Ứng dụng
Biến đổi Fourier có rất nhiều ứng dụng khoa học, ví dụ như trong vật lý, số học,
xử lý tín hiệu, xác suất, thống kê, mật mã, âm học, hải dương học, quang học,
hình học và rất nhiều lĩnh vực khác. Trong xử lý tín hiệu và các ngành liên quan,
biến đổi Fourier thường được nghĩ đến như sự chuyển đổi tín hiệu thành các
thành phần biên độ và tần số. Sự ứng dụng rộng rãi của biến đổi Fourier bắt
nguồn từ những tính chất hữu dụng của biến đổi này:
 Tính tuyến tính:
 Tồn tại biến đổi nghịch đảo, và thực tế là biến đổi Fourier nghịch đảo gần
như có cùng dạng với biến đổi thuận.
 Những hàm số sin cơ sở là các hàm riêng của phép vi phân, có nghĩa là
khai triển này biến những phương trình vi phân tuyến tính với các hệ số
khơng đổi thành các phương trình đại số cơ bản. Ví dụ, trong một hệ vật
lý tuyến tính khơng phụ thuộc thời gian, tần số là một đại lượng không
đổi, do đó những thành phần tần số khác nhau có thể được tính tốn một
cách độc lập.
 Theo định lý tích tổng chập, biến đổi Fourier chuyển một tích tổng chập
phức tạp thành một tích đại số đơn giản.
 Biến đổi Fourier rời rạc có thể được tính tốn một cách nhanh chóng
bằng máy tính nhờ thuật tốn FFT (fast Fourier transform).
 Theo định lý Parseval-Plancherel, năng lượng của tín hiệu (tích phân của
bình phương giá trị tuyệt đối của hàm) không đổi sau biến đổi Fourier.

2.2 Công nghệ sử dụng
Ngồi việc xây dựng ứng dụng, trong q trình phát triển đòi hỏi thêm các yếu
tố giúp đẩy nhanh quá trình phát triển, mã nguồn ngắn gọn,rõ ràng và có hỗ trợ

nhiều thư viện tốn học nâng cao.
Vì vậy nhóm quyết định sử dụng Python cho việc phát triển.
2.2.1 Python là gì
Python là ngơn ngữ lập trình hướng đối tượng, cấp cao, mạnh mẽ, được tạo ra
bởi Guido van Rossum. Nó dễ dàng để tìm hiểu và đang nổi lên như một trong
những ngơn ngữ lập trình nhập mơn tốt nhất cho người lần đầu tiếp xúc với
4


ngơn ngữ lập trình. Python hồn tồn tạo kiểu động và sử dụng cơ chế cấp phát
bộ nhớ tự động. Python có cấu trúc dữ liệu cấp cao mạnh mẽ và cách tiếp cận
đơn giản nhưng hiệu quả đối với lập trình hướng đối tượng. Cú pháp lệnh của
Python là điểm cộng vơ cùng lớn vì sự rõ ràng, dễ hiểu và cách gõ linh động làm
cho nó nhanh chóng trở thành một ngôn ngữ lý tưởng để viết script và phát
triển ứng dụng trong nhiều lĩnh vực, ở hầu hết các nền tảng.
Tính năng chính của Python
Ngơn ngữ lập trình đơn giản, dễ học: Python có cú pháp rất đơn giản, rõ ràng.
Nó dễ đọc và viết hơn rất nhiều khi so sánh với những ngơn ngữ lập trình khác
như C++, Java, C#. Python làm cho việc lập trình trở nên thú vị, cho phép bạn tập
trung vào những giải pháp chứ khơng phải cú pháp.
Miễn phí, mã nguồn mở: Bạn có thể tự do sử dụng và phân phối Python, thậm
chí là dùng nó cho mục đích thương mại. Vì là mã nguồn mở, bạn khơng những
có thể sử dụng các phần mềm, chương trình được viết trong Python mà cịn có
thể thay đổi mã nguồn của nó. Python có một cộng đồng rộng lớn, khơng ngừng
cải thiện nó mỗi lần cập nhật.
Khả năng di chuyển: Các chương trình Python có thể di chuyển từ nền tảng này
sang nền tảng khác và chạy nó mà khơng có bất kỳ thay đổi nào. Nó chạy liền
mạch trên hầu hết tất cả các nền tảng như Windows, macOS, Linux.
Khả năng mở rộng và có thể nhúng: Giả sử một ứng dụng địi hỏi sự phức tạp rất
lớn, bạn có thể dễ dàng kết hợp các phần code bằng C, C++ và những ngơn ngữ

khác (có thể gọi được từ C) vào code Python. Điều này sẽ cung cấp cho ứng dụng
của bạn những tính năng tốt hơn cũng như khả năng scripting mà những ngơn
ngữ lập trình khác khó có thể làm được.
Ngôn ngữ thông dịch cấp cao: Không giống như C/C++, với Python, bạn không
phải lo lắng những nhiệm vụ khó khăn như quản lý bộ nhớ, dọn dẹp những dữ
liệu vơ nghĩa,... Khi chạy code Python, nó sẽ tự động chuyển đổi code sang ngơn
ngữ máy tính có thể hiểu. Bạn không cần lo lắng về bất kỳ hoạt động ở cấp thấp
nào.
Thư viện tiêu chuẩn lớn để giải quyết những tác vụ phổ biến: Python có một số
lượng lớn thư viện tiêu chuẩn giúp cho công việc lập trình của bạn trở nên dễ
thở hơn rất nhiều, đơn giản vì khơng phải tự viết tất cả code. Ví dụ: Bạn cần kết
nối cơ sở dữ liệu MySQL trên Web server? Bạn có thể nhập thư viện MySQLdb
và sử dụng nó. Những thư viện này được kiểm tra kỹ lưỡng và được sử dụng bởi
hàng trăm người. Vì vậy, bạn có thể chắc chắn rằng nó sẽ khơng làm hỏng code
hay ứng dụng của mình.
Hướng đối tượng: Mọi thứ trong Python đều là hướng đối tượng. Lập trình
hướng đối tượng (OOP) giúp giải quyết những vấn đề phức tạp một cách trực
5


quan. Với OOP, bạn có thể phân chia những vấn đề phức tạp thành những tập
nhỏ hơn bằng cách tạo ra các đối tượng.
2.2.2 Thư viện Numpy
NumPy là một từ viết tắt của "Numeric Python" hoặc "Numerical Python". Nó là
một mô-đun mở rộng mã nguồn mở cho Python, cung cấp các chức năng biên
dịch nhanh cho các thao tác toán học và số. Hơn nữa, NumPy làm phong phú
ngôn ngữ lập trình Python với các cấu trúc dữ liệu mạnh mẽ để tính tốn hiệu
quả các mảng và ma trận đa chiều. Việc thực hiện thậm chí là nhằm vào ma trận
và mảng khổng lồ. Bên cạnh đó các mơ-đun cung cấp một thư viện lớn các chức
năng toán học cấp cao để hoạt động trên các ma trận và mảng. Cho phép làm

việc hiệu quả với ma trận và mảng, đặc biệt là dữ liệu ma trận và mảng lớn với
tốc độ xử lý nhanh hơn nhiều lần khi chỉ sử dụng “core Python” đơn thuần.

2.3 Mơ hình, các bước thực hiện
Bước 1: Thu tín hiệu (tính hiệu vào là 1 file audio hoặc thu trực tiếp từ
micro)
Bước 2: Lấy mẫu tín hiệu
Bước 3: Lượng tử hóa tín hiệu
Bước 4: Biến đổi Fourier từ miền thời gian sang miền tần số
Bước 5: Biểu diễn tín hiệu

2.4 Thiết kế chi tiết
2.4.1 Thu tín hiệu (tính hiệu vào là 1 file audio hoặc thu trực tiếp từ micro)
2.4.2 Lấy mẫu tín hiệu
Âm thanh kỹ thuật số sử dụng điều chế mã xung (PCM) và các tín hiệu kỹ thuật
số để tái tạo lại âm thanh, bao gồm chuyển đổi từ tín hiệu tương tự sang tín
hiệu số (ADC), chuyển đổi từ tín hiệu số sang tín hiệu tương tự (DAC), lưu trữ, và
truyền. Tính hữu ích chính của một hệ thống kỹ thuật số là khả năng lưu trữ,
truy xuất và truyền tín hiệu mà khơng có bất kỳ tổn thất nào về mặt chất lượng.
Tần số lấy mẫu
Tai người có thể nghe được âm thanh ở tần số trong khoảng 20 Hz-20 kHz,
theo định lý Nyquist thì tần số lấy mẫu tối thiểu phải là 40 kHz, vì vậy người ta
thường lấy mẫu với tần số 44.1 kHz (CD), 48 kHz (pro audio) hay 96 kHz.
Hiện nay, cơng nghệ lấy mẫu có xu hướng sử dụng tần số lấy mẫu vượt quá các
yêu cầu cơ bản, ví dụ 96 kHz hay thậm chí là 192 kHz. Điều này trái ngược với
những kết quả trong phịng thí nghiệm chứng minh rằng tai người không thể
nghe được những âm thanh ở tần số siêu âm, tuy vậy trong một vài trường hợp,
thì những siêu âm có khả năng tương tác và điều chỉnh một phần của phổ tần
âm thanh (biến dạng do điều biến tương hỗ; intermodulation
distortion hay IMD). Sự biến dạng điều biến này khơng có trong âm thanh thực

và vì vậy nó là 1 đặc điểm đặc trưng của âm thanh nhân tạo. Một điểm lợi thế là
nếu tần số lấy mẫu cao vượt mức thì sẽ giảm được những yêu cầu của bộ lọc
thông thấp trong ADC và DAC.
6


Độ sâu số (bit depth
Âm thanh thường được lượng tử hóa với độ sâu số 8, 16 hoặc 20 bit, trên mặt lý
thuyết thì cực đại của 'tỷ số tín hiệu trên nhiễu lượng tử' (signal to quantization
noise ratio; SQNR) sẽ cho ra dạng sóng sin chuẩn (pure sine wave) là khoảng
49.93dB, 98.09 dB và 122.17 dB. Âm thanh 8-bit nói chung là khơng cịn được sử
dụng nữa do nhiễu lượng tử (cực đại của tỷ số SQNR thấp), mặc dù những biên
mã 8-bit theo thuật toán luật A và luật μ đóng độ phân giải thành 8-bit nhưng lại
làm tăng hệ số méo phi tuyến (total harmonic distortion; THD). Chất lượng âm
thanh của CD được mã hóa với 16 bit. Nhiễu nhiệt (thermal noise) làm hạn chế
số lượng các bit thực sự có thể được sử dụng trong q trình lượng tử hóa. Vài
hệ thống analog (tương tự) có tỉ số tín hiệu trên tạp âm (SNR hay S/N) vượt quá
120 dB, do đó sẽ cần hơn 20-bit để lượng tử hóa.
2.4.3 Lượng tử hóa tín hiệu
Q trình xấp xĩ giá trị các mẫu rời rạc Ỉ chuyển một tập các mẫu rời rạc có số
giá trị rất lớn thành một tập có số giá trị ít hơn.
Vị trí của khối lượng tử hóa trong hệ thống:

Hai kiểu lượng tử hóa:
 Kiểu làm trịn (rounding)
 Kiểu cắt bớt (truncation)
Đặc tính của bộ lượng tử hóa thể hiện qua quan hệ ngõ vào - ngõ ra:
Ví dụ: Bộ lượng tử hóa đều (uniform quantizer) 3 bit.

Với bộ lượng tử hóa có tầm tồn thang R, biểu diễn B bitỈ 2B mức lượng tử.

o Độ rộng lượng tử:
7


o Sai số lượng tử:

Sai số lượng tử (quantization error) hay nhiễu lượng tử (quantization
noise): biến ngẫu nhiên có phân bố đều, được đặc trưng bằng sai số hiệu dụng:

Tỉ số SNR của bộ lượng tử hóa:

Nhận xét:
 Bộ ADC tăng thêm 1 bitỈ tỉ số SNR tăng thêm 6 dB.
 Số bit càng nhiều thì nhiễu lượng tử càng nhỏ.
 Tỉ số SNR không phụ thuộc vào biên độ tín hiệu.
2.4.4 Biến đổi Fourier từ miền thời gian sang miền tần số
Trong toán học, phép biến đổi Fourier rời rạc (DFT), đơi khi cịn được gọi là biến
đổi Fourier hữu hạn, là một biến đổi trong giải tích Fourier cho các tín hiệu thời
8


gian rời rạc. Đầu vào của biến đổi này là một chuỗi hữu hạn các số thực hoặc số
phức, làm biến đổi này là một công cụ lý tưởng để xử lý thông tin trên các máy
tính. Đặc biệt, biến đổi này được sử dụng rộng rãi trong xử lý tín hiệu và các
ngành liên quan đến phân tích tần số chứa trong một tín hiệu, để giải phương
trình đạo hàm riêng, và để làm các phép như tích chập. Biến đổi này có thể được
tính nhanh bởi thuật toán biến đổi Fourier nhanh (FFT).
Dãy của N số phức được biến đổi thành chuỗi của N số phức X0,..., XN−1 bởi
công thức sau đây:


với e là cơ số của lôgarit tự nhiên, là đơn vị ảo, và π là pi.
Phép biến đổi Fourier rời rạc ngược (IDFT) được cho bởi cơng thức sau

Những phương trình này có thể được mơ tả đơn giản như sau: các số
phức Xk đại diện cho biên độ và pha ở các bước sóng khác nhau của "tín hiệu
vào" xn. Phép biến đổi DFT tính các giá trị Xk từ các giá trị xn, trong khi IDFT
tính xn bằng tổng của các sóng thành phần với tần số k / N. Khi viết các phương
trình dưới dạng như trên, ta đã sử dụng công thức Euler để biểu diễn các hàm
lượng giác dưới dạng lũy thừa số phức để biến đổi được dễ dàng. Khi
viết Xk dưới dạng tọa độ cực, ta thu được biên độ Ak / N và pha φk từ modulus
và argument của Xk:

trong đó atan2 là dạng hai đối số của hàm arctan. Cần ghi chú rằng các thừa số
chuẩn hóa của DFT và IDFT (ở đây là 1 và 1/N) và dấu của các số mũ chỉ là quy
ước, và có thể khác nhau trong các tài liệu khác nhau. Điều kiện duy nhất cho
các quy ước này là DFT và IDFT có dấu ngược nhau ở các số mũ và tích của hai
thừa số chuẩn hóa phải là 1/N.
2.4.5 Biểu diễn tín hiệu

9


Chương 3

Triển khai xây dựng

3.1 Fourier
Biến đổi Fourier nhanh, do Cooley và Tukey đề xuất năm 1965, là một thuật tốn
tính tốn hiệu quả của Biến đổi Fourier rời rạc (DFT). DFT phân tách một tín hiệu
thành một chuỗi có dạng sau:


trong đó x m là một điểm trong tín hiệu đang được phân tích và X k là một 'chế
độ' hoặc thành phần tần số cụ thể. Lưu ý rằng thành phần tần số chỉ có thể
tăng lên đến độ dài của tín hiệu (M-1), và chúng ta sẽ thảo luận một chút sau
đó về những hạn chế từ đó nữa ( Nyquist ).
Từ trên, hàm mũ phức có thể được viết lại dưới dạng các hàm sin và côsin
bằng công thức Euler:

Sao cho chuỗi của chúng tôi chứa các sóng hình sin:
Bây giờ chúng ta có thể thấy làm thế nào một tín hiệu có thể được biến đổi
thành một chuỗi các sóng hình sin.
Lấy mẫu
Cách dễ nhất để kiểm tra FFT bằng Python là đo sóng hình sin ở một tần số đã
biết bằng cách sử dụng micrơ hoặc tạo một hàm hình sin trong Python. Vì phần
này tập trung vào việc hiểu FFT, chúng em sẽ trình bày cách mơ phỏng một sóng
sin lấy mẫu bằng Python. Dưới đây là cách tạo sóng sin trong Python bằng cách
sử dụng tiêu chí lấy mẫu mơ phỏng tín hiệu thực:

10


Đoạn mã trên 'lấy mẫu' một sóng hình sin ở 44,1 kHz trong 0,1 giây (100 ms). Tôi
đã sử dụng sóng hình sin 100 Hz, vì vậy chúng tơi mong đợi:

Điều này có nghĩa là chúng ta sẽ nhận được 10 chu kỳ từ sóng sin 100 Hz trong
0,1 giây. Điều này cũng có nghĩa là chúng ta sẽ có 4410 mẫu cho 10 chu kỳ hoặc
441 mẫu mỗi chu kỳ - con số này khá ít để tái tạo tín hiệu. Cốt truyện được tạo
bởi mã được hiển thị bên dưới:

11



Tần số Nyquist

Trong xử lý tín hiệu kỹ thuật số:
"Để khôi phục tất cả các thành phần Fourier của dạng sóng tuần hồn, cần phải
sử dụng tốc độ lấy mẫu f s ít nhất gấp đơi tần số dạng sóng cao nhất"
Câu lệnh trên yêu cầu người dùng lấy mẫu tín hiệu ở tần số tự nhiên cao nhất
gấp đôi tần số tự nhiên cao nhất của hệ thống dự kiến hoặc theo tốn học:

Do đó, trong hàm FFT, giới hạn của thành phần tần số được thiết lập bởi tốc độ
mẫu, thường cao hơn một chút so với hai lần tần số tự nhiên cao nhất được
mong đợi trong hệ thống. Trong trường hợp âm học, tốc độ lấy mẫu được đặt ở
mức xấp xỉ gấp đôi tần số cao nhất mà con người có thể nhận biết (20 kHz), vì
vậy tốc độ lấy mẫu cho âm thanh tối thiểu là 40 kHz. Chúng ta thường thấy 44,1
kHz hoặc 48 kHz, có nghĩa là âm thanh thường được lấy mẫu chính xác trên tần
số Nyquist được thiết lập bởi phạm vi của tai người. Do đó, trong thực tế, điều
cần thiết là phải tn theo bất bình đẳng sau:

Như một cơng cụ trực quan hóa, dưới đây tơi đã vẽ một số tín hiệu được lấy
mẫu được lấy mẫu xung quanh tần số Nyquist cho một sóng sin 100 Hz. Theo
tuyên bố ở trên, nếu sóng hình sin 100 Hz là tần số lớn nhất trong hệ thống,
chúng ta nên lấy mẫu trên 200 Hz.

12


Các hiện tượng trên, khi lấy mẫu dưới tần số Nyquist được gọi là răng cưa. Dấu
hiệu có thể che khuất các phép đo và tạo ra các đỉnh sai trong dữ liệu có thể dẫn
đến kết quả khơng chính xác. Đây là lý do tại sao chúng ta phải lấy mẫu trên tần

số tự nhiên cao nhất của hệ thống. Tất nhiên, một số tình huống khơng đảm bảo
kiến thức được xác định trước về hệ thống, nhưng trong những trường hợp đó,
các phương pháp như lọc miền thời gian có thể giải thích cho hành vi khơng
mong muốn đó. May mắn thay, trong lĩnh vực âm học, chúng ta thường không
cần phải lo lắng về tần số cao trên phạm vi thính giác thơng thường của con
người (tất nhiên, một ngoại lệ là trong phạm vi siêu âm).

3.2 Biến đổi Fast Fourier
Hàm FFT Python trong Python được sử dụng như sau:

Tuy nhiên, điều quan trọng cần lưu ý là FFT không tạo ra ý nghĩa vật lý ngay lập
tức. Vì vậy, chúng ta cần chia cho độ dài của tín hiệu, và chỉ lấy một nửa dữ liệu
(phổ một phía - khơng được thảo luận ở đây). Từ đó chúng ta cần lấy giá trị
tuyệt đối của tín hiệu để đảm bảo rằng khơng có giá trị ảo (phức tạp, phi vật lý)
nào.
Thuật toán FFT đầy đủ và biểu đồ phổ tần số được hiển thị bên dưới:

13


Mã lấy FFT của tín hiệu đầu vào y (trong trường hợp của chúng ta là sóng sin ở
trên), có độ dài N. Nó cũng tính tốn vectơ tần số bằng cách sử dụng số điểm và
tần số lấy mẫu.
Vectơ tần số và phổ biên độ tạo ra biểu đồ sau:

Nếu chúng ta phân tích tần số và biên độ tại đỉnh của đồ thị phổ ở trên (đôi khi
được gọi là biểu đồ chu kỳ), chúng ta có thể kết luận rằng đỉnh là 3 và tần số là
100 Hz. Điều này trả về biên độ và tần số của sóng sin đầu vào của chúng tơi.
Cũng cần lưu ý việc đưa nhiễu vào tín hiệu. Tiếng ồn được coi là một hiện vật
của phép tính và gần bằng 0, vì vậy chúng ta có thể bỏ qua nó (biên độ của nó là

10 đến cơng suất -17, vì vậy đây là một giả định cơng bằng). Dự đốn trong
trường hợp này khơng đặc biệt ấn tượng, vì chúng ta có thể thấy rõ ràng rằng
chuỗi thời gian ở trên tạo ra một sóng sin duy nhất ở 100 Hz. Dưới đây tơi giới
thiệu một tín hiệu phức tạp hơn với ba sóng sin và một số tiếng ồn Gaussian:

14



×