1. Trang chủ
  2. » Luận Văn - Báo Cáo

PHÂN TÍCH SPECTROGRAM CỦA TÍN HIỆU ÂM THANH

30 308 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 1,57 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • I. GIỚI THIỆU ĐỀ TÀI (6)
    • 1. Đặt vấn đề (6)
    • 2. Nội dung thực hiện (0)
  • II. TỔNG HỢP LÝ THUYẾT (0)
    • 1. Biến đổi Fourier của tín hiệu (6)
    • 2. Hàm cửa sổ (8)
    • 3. Spectrogram của tín hiệu (9)
  • III. THU TÍN HIỆU ÂM THANH VÀ PHÂN TÍCH SPECTROGRAM (11)
    • 1. Viết code Matlab (11)
    • 2. Viết code Python (14)
    • 3. Viết code C# (16)
  • VII. TỔNG KẾT ĐÁNH GIÁ (0)
    • 1. Ưu điểm (18)
    • 2. Nhược điểm (19)
  • TÀI LIỆU THAM KHẢO (30)

Nội dung

Ngày nay, các kỹ thuật xử lý tín hiệu số dựa trên phân tích phổ đã trở thành một công cụ quan trọng trong tất cả các lĩnh vực. Việc phân tích tính hiệu trong các miền biểu diễn khác nhau như thời gian, tần số giúp chúng ta có cái nhìn đầy đủ và trực quan về tín hiệu cần xử lý. Đối với tín hiệu âm thanh nói riêng và các tín hiệu khác nói chung, sau khi đã được số hóa thì việc quan sát phân tích phổ tín hiệu trong một khoảng thời gian liên tục đóng vai trò quan trọng trong việc xử lý tín hiệu nhanh chóng cũng như loại bỏ các nhiễu không mong muốn. Đồ thị Spectrogram là một giải pháp hữu hiệu cho việc xử lý các tín hiệu số nói trên. Để có thể hiểu rõ hơn về việc phân tích tín hiệu âm thanh cũng như tìm hiểu sâu hơn về spectrogram, nhóm đã thực hiện tìm hiểu và mô phỏng đề tài “Phân tích Spectrogram của tín hiệu âm thanh” thông qua việc viết chương trình xử lý tín hiệu trên một số ngôn ngữ lập trình phổ biến như Matlab, Python và C

GIỚI THIỆU ĐỀ TÀI

TỔNG HỢP LÝ THUYẾT

Biến đổi Fourier của tín hiệu

- Biến đổi Fourier của một tín hiệu liên tục không tuần hoàn x(t) được định nghĩa như sau: dt e t x F

Phép biến đổi Fourier đã chuyển đổi tín hiệu không tuần hoàn x(t) từ miền thời gian t sang miền tần số f, giúp chúng ta có cái nhìn tổng quan hơn về tín hiệu thông qua việc biểu diễn tín hiệu X(F).

1.1 DTFT ( Discrete-Time Fourier Transform )

- Là phép biến đổi Fourier cho tín hiệu rời rạc theo miền thời gian nhằm biến nó thành tín hiệu liên tục trong miền tần số

- Bằng cách “lấy mẫu” DTFT ở N tần số rời rạc 𝜔 𝑘 = 2𝜋𝑘/𝑁, ta được DFT, là tín hiệu vừa rời rạc trong miền thời gian vừa rời rạc theo miền tần số:

Thuật toán FFT (Fast Fourier Transform) được sử dụng để tính nhanh DFT (Discrete Fourier Transform) của một chuỗi dữ liệu Có nhiều loại thuật toán FFT khác nhau, mỗi loại dựa trên các kiến thức từ nhiều lĩnh vực khác nhau Một số thuật toán phổ biến bao gồm Cooley-Tukey và thuật toán Good-Thomas, sử dụng phương pháp thừa số nguyên tố.

1.4 STFT ( Short Time Fourier Transform )

Để tính toán DFT cho tín hiệu thực, chúng ta có thể chia tín hiệu theo thời gian thành các khối nhỏ và thực hiện DFT cho từng khối, quá trình này được gọi là biến đổi STFT.

- Với 𝑥[𝑚]𝑤[𝑛 − 𝑚] là 1 phần thời gian ngắn của tín hiệu tiếng nói

Hình 1: Short time fourier transform

- Tính toán STFT dựa trên thuật toán FFT: Dựa trên giải thuật FFT, biến đổi STFT có thể được tính toán nhanh hơn.

Hàm cửa sổ

2.1 Khái niệm về hàm cửa sổ

Trong xử lý tín hiệu, hàm cửa sổ là một hàm toán học có giá trị bằng không bên ngoài một khoảng xác định Khi một hàm, dạng sóng hoặc chuỗi dữ liệu được nhân với hàm cửa sổ, kết quả sẽ cũng có giá trị bằng không ngoài khoảng cửa sổ đó.

Khi phân tích tín hiệu trong miền tần số hoặc thời gian, người ta thường chỉ chú ý đến một khoảng nhất định thay vì toàn bộ miền tín hiệu vô hạn Tùy thuộc vào mục đích nghiên cứu, tín hiệu thường được quan sát trong một khoảng thời gian hoặc tần số hữu hạn Điều này dẫn đến việc áp dụng hàm cửa sổ để nhân với tín hiệu ban đầu.

2.2 Một số hàm cửa sổ phổ biến

- Hàm cửa sổ chữ nhật:

Spectrogram của tín hiệu

- Spectrogram (ảnh phổ) là một đồ thị mô tả trực quang phổ tần số của một tín hiệu thay đổi theo thời gian

Khi áp dụng phân tích spectrogram cho tín hiệu âm thanh, nó thường được gọi là sonographs, voiceprints hoặc voicegrams Nếu dữ liệu spectrogram được biểu diễn dưới dạng biểu đồ 3D, chúng sẽ được gọi là waterfall.

Spectrogram là biểu đồ 2D phổ biến, với một trục thể hiện thời gian và trục còn lại thể hiện tần số Biên độ của một tần số cụ thể tại một thời điểm cụ thể được biểu thị qua cường độ hoặc màu sắc của từng điểm trong ảnh Tùy thuộc vào mục đích sử dụng, trục tần số và biên độ có thể được thiết lập theo thang tuyến tính hoặc logarit, trong đó trục biên độ của tín hiệu âm thanh thường được biểu diễn bằng thang logarit.

Spectrogram có thể được tạo ra từ tín hiệu trong miền thời gian qua hai phương pháp: sử dụng chuỗi bộ lọc thông dãi nối tiếp hoặc áp dụng phép biến đổi Fourier để chuyển tín hiệu sang miền tần số Mặc dù hai phương pháp này tạo ra hai biểu diễn thời gian – tần số khác nhau, nhưng chúng vẫn tương đương trong một số điều kiện nhất định.

Phương pháp sử dụng chuỗi bộ lọc thông dải giúp chia tín hiệu đầu vào thành các dải tần, với độ lớn của mỗi đầu ra bộ lọc điều khiển đầu dò ghi lại ảnh phổ trên giấy Bên cạnh đó, việc tạo spectrogram bằng FFT là một quy trình quan trọng trong xử lý tín hiệu số.

Dữ liệu được lấy mẫu và số hóa trong miền thời gian, chia thành các khối có độ dài bằng nhau và thường chồng lấn lên nhau Biến đổi Fourier được sử dụng để tính toán độ lớn của phổ tần số cho từng khối Các phổ này sau đó được phân tích để rút ra thông tin cần thiết.

Mười tín hiệu được sắp xếp cạnh nhau hoặc chồng lên nhau theo các bước dịch chuyển của cửa sổ quan sát, tạo thành hình ảnh chuỗi vạch phổ liên tục hoặc bề mặt 3D Quá trình này tương ứng với việc tính toán độ lớn bình phương của biến đổi Fourier thời gian ngắn (STFT) của tín hiệu s(t) với độ rộng của cửa sổ quan sát là L.

Spectrogram là công cụ phân tích tần số theo thời gian, giúp xác định các đặc điểm của tín hiệu phi tuyến và tuyến tính.

Spectrogram là công cụ quan trọng trong việc phân tích dữ liệu thực tế, đặc biệt trong môi trường có nhiều thành phần tần số khác nhau và các loại nhiễu như nhiễu cơ học và nhiễu điện.

Spectrogram là công cụ quan trọng trong việc phân tích dao động trong môi trường biến đổi, giúp minh họa các dạng thay đổi năng lượng mà FFT hoặc PSD không thể hiện rõ So với FFT, spectrogram cung cấp cái nhìn sâu sắc hơn về sự biến đổi của các dao động theo thời gian.

Trong lĩnh vực xử lý âm thanh, spectrogram là công cụ hữu ích giúp mô tả trực quan tín hiệu trong dải tần rộng, cho phép dễ dàng phát hiện và quan sát các nhiễu Nhờ vào việc phân tích spectrogram, người dùng có thể nhận diện các thành phần nhiễu và nhanh chóng tìm ra phương pháp loại bỏ âm thanh không mong muốn.

THU TÍN HIỆU ÂM THANH VÀ PHÂN TÍCH SPECTROGRAM

Viết code Matlab

- Tốc độ lấy mẫu : 44100 Hz (được lựa chọn theo mặc định của matlab, lớn gấp hai lần tần số âm thanh có thể nghe được)

- Số mẫu trong một frame : 1024 (theo mặc định của matlab)

- Số frame trong một Stack :10

- Sử dụng giải thuật FFT với L24

1.1 Sơ đồ khối: a) Lưu đồ thu tín hiệu trong matlab

Hình 3: Lưu đồ thu tín hiệu âm thanh trong matlab

Các thuộc tính của audioDeviceReader bao gồm trình điều khiển, thiết bị âm thanh, tốc độ lấy mẫu, độ sâu bit và kích thước bộ đệm Đối với việc thu âm, tốc độ lấy mẫu mặc định được thiết lập là 44100 Hz.

 Vòng lặp xử lý thời gian thực

 Micrô thu âm thanh và gửi tín hiệu điện liên tục đến card âm thanh

Card âm thanh chuyển đổi tín hiệu từ dạng tương tự sang dạng số với tốc độ lấy mẫu, kích thước bộ đệm và độ sâu bit được xác định trong quá trình cấu hình.

Bộ chuyển đổi tương tự-kỹ thuật số ghi lại các mẫu âm thanh vào bộ đệm của card âm thanh Khi bộ đệm đạt dung lượng tối đa, các mẫu âm thanh cũ sẽ bị xóa bỏ để nhường chỗ cho các mẫu mới.

Hình 4: Lưu đồ phân tích spectrogram trong matlab

Hình 5: Kết quả Spectrogram dùng code matlab

Năng lượng âm thanh thông thường chủ yếu tập trung ở các tần số thấp dưới 4kHz, điều này giải thích tại sao hệ thống truyền thanh của GSM được lấy mẫu ở tần số 8kHz.

- Sử dụng phần mềm Tone Generator để phát hai tín hiệu đơn tần số 4 kHz và 6 kHz Kết quả thu được hai vạch phổ theo thời gian trên spectrogram

Hình 6: Kết quả kiểm chứng Spectrogram với tần số 4 kHz và 6kHz.

Viết code Python

Chương trình này sử dụng thư viện PyAudio trong Python để ghi âm tín hiệu từ microphone, với tần số lấy mẫu là 44100 Hz.

Viết chương trình thực hiện biến đổi FFT cho chuỗi tín hiệu sử dụng cửa sổ Hanning Khi cửa sổ di chuyển theo thời gian, áp dụng hàm specgram trong thư viện matplotlib.mlab để thực hiện FFT trên tín hiệu thu được Sau khi đã thu thập đủ 5 phổ tín hiệu, tiến hành xóa bỏ tín hiệu cũ khỏi cửa sổ quan sát, cho phép tín hiệu mới vào, tạo ra sự chuyển động liên tục của phổ theo hướng trượt của cửa sổ.

Tốc độ lấy mẫu : 44100 Hz (Lớn gấp hai lần tần số âm thanh có thể nghe được)

Số mẫu trong một frame : 8192

Số frame trong một Stack :5

Sử dụng giải thuật FFT với L24

Hình 7: Lưu đồ phân tích spectrogram trong python

Hình 8: Kết quả spectrogram trong python

Thu tín hiệu và lấy mẫu

Hiển thị Lưu đè và cập nhật phổ

- Sử dụng phần mềm Tone Generator để phát hai tín hiệu đơn tần số 8 kHz và 12 kHz

Kết quả thu được hai vạch phổ theo thời gian trên spectrogram

Hình 9: Kết quả kiểm chứng spectrogram với tín hiệu 8 kHz và 12 kHz.

Viết code C#

Tốc độ lấy mẫu : 44000 Hz (Lớn gấp hai lần tần số âm thanh có thể nghe được)

Số frame trong một Stack :51

Sử dụng giải thuật FFT với L 48

Hình 10: Lưu đồ phân tích spectrogram trong C#

Hình 11: Kết quả spectrogram trong C#

Nhân tín hiệu với hàm của sổ Hanning

Thực hiên FFT tín hiệu

Thu tín hiệu và lấy mẫu

Sử dụng thư viện Spectrogram để vẽ phổ Lưu đè và cập nhật phổ

TỔNG KẾT ĐÁNH GIÁ

Ưu điểm

- Nhóm đã cố gắng tìm hiểu Spectrogram và ôn lại kiến thức về các phép biến đổi sử dụng trong xử lý số tín hiệu

- Hoàn thành việc viết chương trình lưu âm thanh và phân tích spectrogram theo thời gian thực

- Kiểm nghiệm lại với tín hiệu đơn tần số cho kết quả đúng với lý thuyết.

Nhược điểm

- Chương trình còn thô sơ, chưa đầy đủ chức năng như thay đổi view nhìn 3D, giao diện người dừng,…

- Chưa kiểm chứng độ chính xác về mặt biên độ của tín hiệu

+ Chương trình microphone.py import pyaudio import numpy as np

FORMAT = pyaudio.paInt16 #conversion format for PyAudio stream

CHUNK_SIZE = 8192 #number of samples to take per read

To capture audio samples effectively, set the sample length using the formula `SAMPLE_LENGTH = int(CHUNK_SIZE*1000/RATE)`, which defines the duration in milliseconds The `open_mic()` function initializes the PyAudio stream with specified parameters such as format, channels, and rate, allowing for real-time audio input To retrieve audio data, the `get_data(stream, pa)` function reads from the stream and converts the input into a NumPy array of 16-bit integers, enabling further processing of the audio samples.

The Spectrogram.py program utilizes the matplotlib library, specifically importing functions such as window_hanning, specgram, and window_none from matplotlib.mlab It also incorporates matplotlib.pyplot for plotting and animation functionalities, along with LogNorm from matplotlib.colors for color normalization Additionally, the program relies on NumPy for numerical operations and includes microphone support for audio input.

The configuration for the audio processing includes setting the number of microphone reads per frame to five (SAMPLES_PER_FRAME = 5) and defining the NFFT value for the spectrogram as 1024 (nfft = 1024) Additionally, an overlap value of 1000 is specified for the spectrogram, while the sampling rate is obtained from the microphone settings (rate = microphone.RATE) The function get_specgram processes the audio signal, using a Hanning window to generate a two-dimensional array, along with frequency and bin values.

The code snippet initializes a spectrogram visualization by capturing audio data from a microphone It defines a function to update the figure by processing the incoming audio data and generating a 2D array representing the spectrogram The function checks if the number of samples is less than a predefined frame size; if so, it appends new data Otherwise, it retains the last segment of data while incorporating the new audio input The visualization is created using Matplotlib, with specific parameters for aspect ratio and color mapping to enhance clarity and detail in the displayed spectrogram.

To create a spectrogram visualization, use `plt.colorbar()` to add a color bar, and label the x-axis as 'Time (s)' and the y-axis as 'Frequency (Hz)' Set the title to 'Spectrogram' and invert the y-axis with `plt.gca().invert_yaxis()` Implement animation with `animation.FuncAnimation` to update the figure at intervals based on the microphone's chunk size Finally, display the plot with `plt.show()` and handle exceptions by printing "Plot Closed." Ensure to stop and close the audio stream, terminate the audio processing, and print "Program Terminated" when the program ends.

To configure audio sampling parameters, set the sample rate to 44,100 Hz, with a frame size of 1,024 samples and a stack of 10 frames The frequency range can be calculated using the formula `(0:(spf-1))*fs/spf` Initialize a stack matrix with zeros for the specified number of frames and samples, and create an index vector for frame representation.

%% Thu tin hieu deviceReader = audioDeviceReader(fs, spf); while(1) amthanh = deviceReader();

FFT_abs = abs(FFT); % Tin 1024-FFT cua frame

% Day cac frame trong stack stack(1:fps - 1,:) = stack(2:fps,:); stack(fps,:) = FFT_abs(:);

% Ve spectrogram surf(X, Y, stack) xlim([1 fps]) ylim([0 20000]) ylabel('Freq') zlim([0 4]) colorbar caxis([0 1]) shading interp; view(2)

The FormMicrophone.cs program utilizes the System namespace along with several other essential namespaces such as System.Collections.Generic, System.ComponentModel, System.Data, System.Diagnostics, System.Drawing, System.Linq, System.Reflection, System.Text, System.Threading.Tasks, and System.Windows.Forms to create a functional application.

{ public partial class FormMicrophone : Form

InitializeComponent(); if (NAudio.Wave.WaveIn.DeviceCount == 0)

MessageBox.Show("No audio input devices found.\n\nThis program will now exit.",

"ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);

{ cbDevice.Items.Clear(); for (int i = 0; i < NAudio.Wave.WaveIn.DeviceCount; i++) cbDevice.Items.Add(NAudio.Wave.WaveIn.GetCapabilities(i).ProductName); cbDevice.SelectedIndex = 0;

} for (int i = 9; i < 16; i++) cbFftSize.Items.Add($"2^{i} ({1

Ngày đăng: 22/07/2021, 22:55

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w