TÓM TẮT
- 1 Mở Đầu
- 2 1. Khái Niệm Cơ Bản Về Phổ Biên Độ
- 3 2. Chuẩn Bị Dữ Liệu Và Môi Trường Làm Việc
- 4 3. Các Bước Vẽ Phổ Biên Độ Cơ Bản
- 5 4. Phân Tích Chi Tiết Các Thành Phần Trong Phổ
- 6 5. Kỹ Thuật Nâng Cao
- 7 6. Thực Hành: Vẽ Phổ Biên Độ Cho Các Loại Tín Hiệu Phổ Biến
- 8 7. Các Lỗi Thường Gặp Khi Vẽ Phổ Biên Độ và Cách Khắc Phục
- 9 8. Ứng Dụng Thực Tiễn Của Phổ Biên Độ
- 10 9. Tối Ưu Hóa Và Tự Động Hóa Quy Trình Vẽ Phổ
- 11 10. Kết Luận
Mở Đầu
Phổ biên độ (Amplitude Spectrum) là một trong những công cụ quan trọng nhất trong lĩnh vực xử lý tín hiệu, phân tích âm thanh, điện tử và nhiều ngành kỹ thuật khác. Việc hiểu và biết cách vẽ phổ biên độ không chỉ giúp chúng ta nắm bắt được nội dung tần số của một tín hiệu mà còn hỗ trợ trong việc thiết kế, tối ưu hoá các hệ thống xử lý tín hiệu. Bài viết này sẽ cung cấp một hướng dẫn chi tiết, từ các khái niệm cơ bản, các bước thực hiện, cho tới các kỹ thuật nâng cao, nhằm giúp bạn tự tin vẽ và phân tích phổ biên độ một cách chính xác.
1. Khái Niệm Cơ Bản Về Phổ Biên Độ
1.1. Định Nghĩa
Phổ biên độ là biểu đồ thể hiện mối quan hệ giữa tần số (Hz) và biên độ (độ lớn) của các thành phần tần số trong một tín hiệu. Khi một tín hiệu thời gian được chuyển đổi sang miền tần số bằng phép biến đổi Fourier, chúng ta nhận được một dãy các thành phần phức (có phần thực và ảo). Phổ biên độ chỉ tập trung vào phần độ lớn (modulus) của các thành phần này, bỏ qua thông tin pha.
1.2. Tầm Quan Trọng
- Phân tích tín hiệu âm thanh: Xác định các tần số cơ bản và hài của âm thanh, giúp trong việc nhận dạng giọng nói, nhạc cụ.
- Kiểm tra nhiễu: Nhận diện các tần số nhiễu trong các hệ thống điện tử hoặc truyền thông.
- Thiết kế bộ lọc: Xác định dải tần cần lọc, thiết kế các bộ lọc thông thấp, thông cao, thông dải.
- Chẩn đoán y tế: Trong các thiết bị như ECG, EEG, phổ biên độ giúp phát hiện bất thường.
1.3. Các Thuật Ngữ Liên Quan
| Thuật ngữ | Ý nghĩa |
|---|---|
| FFT (Fast Fourier Transform) | Thuật toán nhanh để tính biến đổi Fourier rời rạc (DFT). |
| Sampling Rate (Tần số lấy mẫu) | Số mẫu lấy trong một giây, thường ký hiệu Fs (Hz). |
| Nyquist Frequency | Tần số Nyquist = Fs/2, giới hạn tần số có thể biểu diễn mà không bị aliasing. |
| Windowing | Áp dụng hàm cửa sổ (window) để giảm hiện tượng rò rỉ (leakage) trong phổ. |
| Resolution (Độ phân giải tần số) | Khoảng cách giữa các điểm tần số trong phổ, tính bằng Fs/N (N = số mẫu). |
2. Chuẩn Bị Dữ Liệu Và Môi Trường Làm Việc
2.1. Thu Thập Dữ Liệu
- Nguồn tín hiệu: Có thể là file âm thanh (.wav, .mp3), dữ liệu đo đạc (CSV), hoặc dữ liệu sinh ra từ mô phỏng.
- Đảm bảo chất lượng: Tín hiệu nên được lấy mẫu ở tần số đủ lớn (≥ 2× tần số cao nhất cần phân tích) để tránh hiện tượng aliasing.
2.2. Công Cụ Phân Tích

Có thể bạn quan tâm: Cách Vẽ Phối Cảnh 3d: Hướng Dẫn Từ Cơ Bản Đến Nâng Cao Cho Người Mới Bắt Đầu
| Công cụ | Mô tả | Ưu điểm |
|---|---|---|
| MATLAB / Octave | Phần mềm tính toán mạnh mẽ, có sẵn hàm fft, fftshift, abs. |
Dễ sử dụng, hỗ trợ đồ họa tốt. |
| Python (NumPy, SciPy, Matplotlib) | Thư viện mã nguồn mở, linh hoạt. | Miễn phí, tích hợp sâu với machine learning. |
| Audacity | Phần mềm âm thanh mở, có công cụ “Plot Spectrum”. | Giao diện trực quan, không cần lập trình. |
| LabVIEW | Môi trường lập trình đồ họa, thích hợp cho đo lường. | Kết nối trực tiếp với thiết bị phần cứng. |
2.3. Cài Đặt Môi Trường Python (Ví Dụ)
# Cài đặt các thư viện cần thiết
pip install numpy scipy matplotlib
3. Các Bước Vẽ Phổ Biên Độ Cơ Bản
3.1. Bước 1: Đọc Tín Hiệu
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile # Đọc file âm thanh wav
fs, signal = wavfile.read('audio_sample.wav')
# Nếu là tín hiệu stereo, chuyển về mono
if signal.ndim > 1: signal = signal.mean(axis=1)
3.2. Bước 2: Xác Định Số Mẫu Và Độ Phân Giải
N = len(signal) # Số mẫu
T = 1.0 / fs # Khoảng thời gian giữa các mẫu
t = np.arange(N) T # Trục thời gian (không bắt buộc)
freq_resolution = fs / N # Độ phân giải tần số
print(f"Độ phân giải tần số: {freq_resolution:.2f} Hz")
3.3. Bước 3: Áp Dụng Hàm Cửa Sổ (Windowing)
Áp dụng cửa sổ Hamming để giảm rò rỉ:
window = np.hamming(N)
signal_windowed = signal window
3.4. Bước 4: Thực Hiện FFT
# Tính FFT
fft_vals = np.fft.fft(signal_windowed)
# Dịch trung tâm (để có tần số âm và dương)
fft_vals = np.fft.fftshift(fft_vals) # Tính biên độ
amplitude_spectrum = np.abs(fft_vals) / N # Chuẩn hoá
3.5. Bước 5: Tạo Trục Tần Số
freqs = np.fft.fftfreq(N, d=T)
freqs = np.fft.fftshift(freqs) # Dịch để có dải âm và dương
3.6. Bước 6: Vẽ Biểu Đồ
plt.figure(figsize=(12, 6))
plt.plot(freqs, amplitude_spectrum, color='b')
plt.title('Phổ Biên Độ của Tín Hiệu')
plt.xlabel('Tần số (Hz)')
plt.ylabel('Biên độ')
plt.xlim(0, fs/2) # Chỉ hiển thị dải tần dương (0 - Nyquist)
plt.grid(True)
plt.show()
Lưu ý: Khi vẽ phổ, thường chỉ hiển thị dải tần dương (0 – Nyquist) vì phổ âm và dương là đối xứng đối với tín hiệu thực.
4. Phân Tích Chi Tiết Các Thành Phần Trong Phổ

Có thể bạn quan tâm: Cách Vẽ Phễu Bằng Powerpoint: Hướng Dẫn Chi Tiết Từ A Đến Z
4.1. Xác Định Các Dấu Hiệu Đặc Trưng
- Peak (đỉnh): Thường là tần số cơ bản hoặc hài. Đánh dấu bằng
plt.scatter. - Bandwidth (băng thông): Khoảng tần số mà biên độ lớn hơn một mức ngưỡng (ví dụ -3 dB).
# Tìm đỉnh lớn nhất
peak_idx = np.argmax(amplitude_spectrumN//2:) + N//2
peak_freq = freqspeak_idx
peak_amp = amplitude_spectrumpeak_idx plt.scatter(peak_freq, peak_amp, color='r')
plt.text(peak_freq, peak_amp, f'Peak: {peak_freq:.1f} Hz')
4.2. Biểu Diễn Dưới Dạng dB
Đôi khi biểu diễn biên độ theo thang log (dB) dễ quan sát hơn:
amplitude_db = 20 np.log10(amplitude_spectrum + 1e-12) # Tránh log(0)
plt.plot(freqs, amplitude_db)
plt.ylim(-120, 0) # Giới hạn dải dB
4.3. Phân Tích Nhiễu
- Nhiễu trắng: Phổ gần như phẳng.
- Nhiễu tần số cố định: Xuất hiện các đỉnh hẹp ở các tần số nhất định.
- Hàm lọc: Nếu có bộ lọc, phổ sẽ có các khu vực giảm mạnh (notch).
5. Kỹ Thuật Nâng Cao
5.1. Short-Time Fourier Transform (STFT)
Nếu tín hiệu không ổn định theo thời gian (ví dụ tiếng nói), chúng ta cần quan sát phổ theo từng khung thời gian.
from scipy.signal import stft f, t, Zxx = stft(signal, fs, nperseg=1024, window='hann')
plt.pcolormesh(t, f, np.abs(Zxx), shading='gouraud')
plt.title('Spectrogram (STFT)')
plt.ylabel('Tần số Hz')
plt.xlabel('Thời gian s')
plt.ylim(0, fs/2)
plt.colorbar(label='Biên độ')
plt.show()
5.2. Welch’s Method (Ước Lượng PSD)
Giúp giảm nhiễu trong ước lượng phổ bằng cách trung bình nhiều đoạn FFT.
from scipy.signal import welch f, Pxx = welch(signal, fs, nperseg=2048, window='hamming')
plt.semilogy(f, Pxx)
plt.title('Power Spectral Density (Welch)')
plt.xlabel('Tần số (Hz)')
plt.ylabel('PSD (V²/Hz)')
plt.show()
5.3. Zero Padding (Thêm Zero)
Thêm các mẫu zero vào cuối tín hiệu để tăng độ phân giải tần số mà không thay đổi nội dung tần số.

Có thể bạn quan tâm: Cách Vẽ Phấn Em Bé – Hướng Dẫn Chi Tiết Từ A Đến Z Cho Người Mới Bắt Đầu
N_fft = 214 # Ví dụ 16384 điểm
fft_vals = np.fft.fft(signal_windowed, n=N_fft)
freqs = np.fft.fftfreq(N_fft, d=T)
fft_vals = np.fft.fftshift(fft_vals)
amplitude_spectrum = np.abs(fft_vals) / N_fft
5.4. Window Types và Their Impact
| Window | Đặc điểm | Khi nào dùng |
|---|---|---|
| Rectangular | Không giảm rò rỉ, độ phân giải tốt nhất | Khi tín hiệu tuần hoàn trong khung. |
| Hamming | Giảm rò rỉ vừa phải, side lobe thấp | Tín hiệu ngắn, phổ chung. |
| Hann | Side lobe thấp hơn Hamming | Khi cần giảm nhiễu hơn. |
| Blackman | Side lobe rất thấp, độ phân giải tần số giảm | Khi tần số gần nhau. |
| Kaiser | Tham số β điều chỉnh trade‑off | Khi cần tùy chỉnh chi tiết. |
6. Thực Hành: Vẽ Phổ Biên Độ Cho Các Loại Tín Hiệu Phổ Biến
6.1. Tín Hiệu Đơn Giản: Sine Wave
f0 = 440 # A4, 440 Hz
t = np.arange(0, 2, 1/fs)
signal = np.sin(2np.pif0t) # Thực hiện các bước từ 3.1 đến 3.6
Kết quả: Đỉnh duy nhất tại 440 Hz.
6.2. Tín Hiệu Hỗn Hợp: Nhiều Tần Số
freqs_signal = 200, 500, 800 # Hz
signal = sum(np.sin(2np.pift) for f in freqs_signal)
Kết quả: Ba đỉnh tại 200, 500, 800 Hz, cùng với các hài (2×, 3×…) nếu có.
6.3. Tín Hiệu Nhiễu (White Noise)
noise = np.random.normal(0, 0.5, size=len(t))
signal = noise
Kết quả: Phổ gần như phẳng, giá trị biên độ dao động ngẫu nhiên.
6.4. Tín Hiệu Âm Thanh Thực Tế
- Đọc file .wav của một đoạn piano hoặc giọng nói.
- Thực hiện các bước chuẩn bị và vẽ phổ.
- Nhận diện các tần số cơ bản (fundamental frequency) và hài.
7. Các Lỗi Thường Gặp Khi Vẽ Phổ Biên Độ và Cách Khắc Phục
| Lỗi | Nguyên nhân | Giải pháp |
|---|---|---|
| Aliasing | Tần số lấy mẫu quá thấp so với tần số cao nhất. | Tăng fs hoặc áp dụng anti‑aliasing filter trước khi lấy mẫu. |
| Leakage | Không dùng cửa sổ hoặc dùng cửa sổ không phù hợp. | Áp dụng Hamming, Hann hoặc Blackman. |
| Resolution kém | Số mẫu N quá ít. | Thu thập dài hơn hoặc dùng zero padding. |
| Biên độ không chuẩn hoá | Không chia cho N hoặc không nhân 2 cho dải dương. | Chuẩn hoá: amplitude = 2|FFT|/N cho tín hiệu thực. |
| Hiển thị âm | Dải tần âm và dương đều được vẽ. | Dùng fftshift và cắt dải âm (freqs>0). |
| Nhiễu mạnh | Môi trường thu thập tín hiệu không sạch. | Sử dụng lọc (band‑pass, notch) trước khi FFT. |
8. Ứng Dụng Thực Tiễn Của Phổ Biên Độ
8.1. Kiểm Tra Chất Lượng Âm Thanh
- Đánh giá độ trong: Phổ biên độ giúp xác định mức độ nhiễu và độ cân bằng tần số.
- Mastering: Các kỹ sư âm thanh sử dụng phổ để cân chỉnh EQ, compressor.
8.2. Chẩn Đoán Hệ Thống Điện

Có thể bạn quan tâm: Cách Vẽ Phương Trình Elip: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
- Máy biến áp: Phổ rung động giúp phát hiện lỗi cơ học.
- Mạch điện tử: Phổ nhiễu giúp xác định nguồn gây nhiễu (ví dụ switch-mode power supply).
8.3. Y Sinh và Y Tế
- ECG/EEG: Phổ tần số giúp phát hiện bất thường như arrhythmia, epilepsy.
- Phân tích âm thanh tim: Đánh giá các thành phần tần số trong tiếng thở.
8.4. Truyền Thông
- Modulation/Demodulation: Kiểm tra băng thông của tín hiệu truyền.
- Spectrum sensing trong Cognitive Radio: Phát hiện kênh trống.
9. Tối Ưu Hóa Và Tự Động Hóa Quy Trình Vẽ Phổ
9.1. Viết Hàm Tự Động
def plot_amplitude_spectrum(signal, fs, window_type='hamming', n_fft=None, db=False, xlim=None, title='Phổ Biên Độ'): N = len(signal) if window_type: window = getattr(np, window_type)(N) signal = signal window if n_fft is None: n_fft = N fft_vals = np.fft.fft(signal, n=n_fft) fft_vals = np.fft.fftshift(fft_vals) freqs = np.fft.fftfreq(n_fft, d=1/fs) freqs = np.fft.fftshift(freqs) amplitude = np.abs(fft_vals) / N if db: amplitude = 20np.log10(amplitude + 1e-12) plt.figure(figsize=(12,5)) plt.plot(freqs, amplitude, color='b') plt.title(title) plt.xlabel('Tần số (Hz)') plt.ylabel('Biên độ (dB)' if db else 'Biên độ') if xlim: plt.xlim(xlim) else: plt.xlim(0, fs/2) plt.grid(True) plt.show()
Sử dụng:
plot_amplitude_spectrum(signal, fs, window_type='hann', db=True, xlim=(0,2000))
9.2. Batch Processing (Xử Lý Hàng Loạt)
Khi có nhiều file âm thanh, viết script duyệt thư mục, vẽ và lưu ảnh:
import os
folder = 'samples/'
for file in os.listdir(folder): if file.endswith('.wav'): fs, sig = wavfile.read(os.path.join(folder, file)) if sig.ndim > 1: sig = sig.mean(axis=1) plot_amplitude_spectrum(sig, fs, title=f'Phổ {file}')
10. Kết Luận
Việc vẽ phổ biên độ không chỉ là một bước kỹ thuật đơn thuần mà còn là một nghệ thuật trong việc hiểu và khai thác thông tin tần số ẩn chứa trong mọi dạng tín hiệu. Từ những khái niệm cơ bản như FFT, cửa sổ, độ phân giải tần số, cho tới các kỹ thuật nâng cao như STFT, Welch’s method, hay tối ưu hoá bằng zero padding và window selection, mỗi bước đều ảnh hưởng trực tiếp đến độ chính xác và độ tin cậy của kết quả.
Trong thực tiễn, việc nắm vững quy trình này mở ra vô vàn ứng dụng: từ phân tích âm thanh, đánh giá chất lượng hệ thống điện, chẩn đoán y tế, cho tới truyền thông không dây. Khi kết hợp với các công cụ hiện đại như Python, MATLAB hay các phần mềm đồ họa âm thanh, chúng ta có thể nhanh chóng chuyển đổi dữ liệu thô thành những biểu đồ trực quan, giúp đưa ra quyết định nhanh chóng và chính xác.
Hy vọng qua bài viết này, bạn đã nắm được toàn bộ quy trình từ thu thập dữ liệu, tiền xử lý, tính FFT, vẽ và phân tích phổ, cho đến ứng dụng thực tiễn và tối ưu hoá. Hãy thực hành trên các tín hiệu thực tế, thử nghiệm các loại cửa sổ, thay đổi độ phân giải và quan sát sự khác biệt – chính từ đó bạn sẽ trở thành một chuyên gia thực thụ trong việc vẽ và phân tích phổ biên độ.
Chúc bạn thành công!
