HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO BÀI TẬP LỚN MÔN HỌC HỆ CƠ SỞ DỮ LIỆU ĐA PHƯƠNG TIỆN ĐỀ TÀI XÂY DỰNG HỆ CƠ SỞ DỮ LIỆU NHẬN DẠNG ÂM THANH NHẠC CỤ BỘ DÂY CHUYÊN NGÀNH HỆ THỐNG THÔNG TIN SINH VIÊN THỰC HIỆN NGUYỄN HOÀNG QUỐC QUYỀN B17DCCN523 DƯƠNG ĐỨC HOÀNG B17DCCN257 LÊ TUẤN ANH B17DCCN019 Hà Nội, năm 2021 HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO BÀI TẬP LỚN MÔN HỌC HỆ CƠ SỞ DỮ LIỆU ĐA PHƯƠNG TIỆN ĐỀ TÀI XÂY DỰNG HỆ CƠ SỞ DỮ L.
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA CƠNG NGHỆ THÔNG TIN - - BÁO CÁO BÀI TẬP LỚN MÔN HỌC: HỆ CƠ SỞ DỮ LIỆU ĐA PHƯƠNG TIỆN ĐỀ TÀI: XÂY DỰNG HỆ CƠ SỞ DỮ LIỆU NHẬN DẠNG ÂM THANH NHẠC CỤ BỘ DÂY CHUYÊN NGÀNH: HỆ THỐNG THÔNG TIN SINH VIÊN THỰC HIỆN: NGUYỄN HOÀNG QUỐC QUYỀN B17DCCN523 DƯƠNG ĐỨC HOÀNG B17DCCN257 LÊ TUẤN ANH B17DCCN019 Hà Nội, năm 2021 HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA CƠNG NGHỆ THÔNG TIN - - BÁO CÁO BÀI TẬP LỚN MÔN HỌC: HỆ CƠ SỞ DỮ LIỆU ĐA PHƯƠNG TIỆN ĐỀ TÀI: XÂY DỰNG HỆ CƠ SỞ DỮ LIỆU NHẬN DẠNG ÂM THANH NHẠC CỤ BỘ DÂY CHUYÊN NGÀNH: HỆ THỐNG THÔNG TIN GIẢNG VIÊN: TS NGUYỄN ĐÌNH HỐ Hà Nội, năm 2021 MỤC LỤC Nội dung MỤC LỤC NHẬN XÉT CỦA GIẢNG VIÊN .4 DANH MỤC TỪ VIẾT TẮT .5 DANH MỤC HÌNH VẼ .6 MỞ ĐẦU I YÊU CẦU BÀI TOÁN II DỮ LIỆU ÂM THANH VỀ CÁC NHẠC CỤ BỘ DÂY III CÁC KỸ THUẬT XỬ LÝ VÀ NHẬN DẠNG TIẾNG NHẠC CỤ ĐANG HIỆN HÀNH IV XÂY DỰNG HỆ THỐNG NHẬN DẠNG TIẾNG NHẠC CỤ ĐÀN DÂY .15 TÀI LIỆU THAM KHẢO .30 LỜI KẾT 31 NHẬN XÉT CỦA GIẢNG VIÊN …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… Hà Nội, ngày tháng năm 2021 Giảng viên DANH MỤC TỪ VIẾT TẮT STT 10 Ký hiệu chữ viết tắt CSDL DTW MFCC DFT DCT IFFT A/D ZC ANNOY IBM Chữ viết đầy đủ Cơ sở liệu Dynamic Time Warping Mel Frequency Cepstral Coefficient Discrete Fourier Transform Discrete Cosine Transform Inverse Fast Fourier Transform Analog to Digital Zero Crossings Approximate Nearest Neighbors Oh Yeah! International Business Machines Corporation DANH MỤC HÌNH VẼ STT Số hiệu Hình 2.1 Hình 3.1 Hình 3.2 Hình 3.3 Hình 3.4 Hình 3.5 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Hình 3.6 Hình 3.7 Hình 4.1 Hình 4.2 Hình 4.3 Hình 4.4 Hình 4.5 Hình 4.6 Hình 4.7 Hình 4.8 Hình 4.9 Hình 4.10 Hình 4.11 Hình 4.12 Hình 4.13 Hình 4.14 Hình 4.15 Tên hình Dữ liệu chuẩn bị Mơ hình Markov trạng thái Mơ hình Markov ẩn trạng thái Mơ hình đầu biến đổi wavelet Biến đổi wavelet Sự khác biệt cách so khớp chuối thời gian: theo khoảng cách Euclide theo DTW Mơ hình so khớp chuỗi thời gian theo DTW Cơng thức truy hồi DTW Sơ đồ khối trình thực Q trình trích chọn đặc trưng âm Quá trình thực nhận dạng âm truy vấn Đồ thị chuyển đổi thang đo mel với thang đo hertz Chuyển đổi tín hiệu liên tục sang tín hiệu rời rạc Pre-emphasis Framing Các cửa sổ lọc phổ biến Spectrogram 2D 3D Bộ lọc mel Quá trình thực DCT Zero crossings Quá trình thực nhận dạng âm truy vấn Chia mặt phẳng làm nửa ANNOY MỞ ĐẦU Bài toán nhận dạng âm tốn điển hình lĩnh vực học máy, trí tuệ nhân tạo Nhận dạng âm xâm nhập vào sống đại Nó cài đặt điện thoại, điều khiển trò chơi hay đồng hồ thông minh Chỉ với khoảng $50, bạn có Amazon Echo Dot - hộp thần kỳ cho phép bạn đặt pizza, nhận thơng tin dự báo thời tiết chí mua vật dụng - cách đưa mệnh lệnh Sự đời Deep Learning giúp việc nhận dạng âm trở nên xác, chí ngồi mơi trường phịng lab Hãy tưởng tượng ngày bạn đường vô tình nghe thấy giai điệu quen thuộc bắt tai, nhưng, bạn lại không nhớ tên hát, rõ đoạn nhạc nằm đâu Hay chí, bạn gặp vơ số trường hợp mạng xã hội mà người dùng đưa câu hỏi kiểu như: “Giúp em tìm hát có đoạn nhạc “abcxyz…” với ạ” Tài liệu đưa thử nghiệm để giải vấn đề nhận dạng âm nhạc cụ dây I YÊU CẦU BÀI TOÁN Xây dựng hệ CSDL nhận dạng âm nhạc cụ dây: Hãy xây dựng/sưu tầm liệu âm tiếng nhạc cụ thuộc đàn dây gồm 100 files âm 10 loại nhạc cụ đàn dây khác nhau, file âm có độ dài Hãy tìm hiểu kỹ thuật xử lý nhận dạng tiếng nhạc cụ hành Xây dựng hệ thống nhận dạng tiếng nhạc cụ đàn dây với đầu vào file âm tiếng nhạc cụ đàn dây có chưa có phần 1, đầu kết nhận dạng tiếng nhạc cụ file đầu vào a) Trình bày sơ đồ khối hệ thống quy trình thực yêu cầu đề b) Trình bày thuộc tính sử dụng để nhận dạng tiếng nhạc cụ hệ thống, kỹ thuật để trích rút thuộc tính c) Trình bày cách lưu trữ thuộc tính âm tiếng nhạc cụ đàn dây cách nhận dạng tiếng nhạc cụ dựa thuộc tính Demo hệ thống đánh giá kết đạt II DỮ LIỆU ÂM THANH VỀ CÁC NHẠC CỤ BỘ DÂY Hình 2.1 Dữ liệu chuẩn bị Gồm 100 file âm solo nhạc cụ dây sử dụng cho việc trích chọn lưu trữ đặc trưng Tất định dạng wav (một định dạng âm phổ biến phát triển Microsoft (phối hợp với IBM) thường lưu trữ liệu âm không nén với điều chế mã xung, sử dụng để lưu trữ âm xử lý với codec âm khác) Các loại nhạc cụ có liệu: Banjo, cello, đàn bầu, đàn luýt, đàn nguyệt, đàn nhị, đàn tranh, ghita, đàn tì bà, ukulele Đặc điểm: Trống tổng lượng lớn sáo thấp đàn dây, zero crossings cao sáo, cường độ ko đều, biên độ max cao Sáo tổng lượng thấp nhất, zero crossings thấp, cường độ đều, biên độ max thấp Đàn dây tổng lượng trống chút lớn bộ, zero crossings trống, cường độ trống thua xa sáo, biên độ max bé trống III CÁC KỸ THUẬT XỬ LÝ VÀ NHẬN DẠNG TIẾNG NHẠC CỤ ĐANG HIỆN HÀNH Hidden Markov Model Mơ hình Markov Xét hệ thống gồm N trạng thái phân biệt, đánh số thứ tự 1, 2, …, N Tại thời điểm t bất kỳ, hệ thống chuyển từ trạng thái Si sang N – trạng thái cịn lại chuyển trở lại trạng thái Si Như vậy, thời điểm t, từ trạng thái Si có N nhánh thao tác chuyển trạng thái Mỗi nhánh có độ đo khả xảy (xác suất xảy ra), gọi xác suất chuyển trạng thái Hình 3.1 Mơ hình Markov trạng thái Gọi qt trạng thái đạt thời điểm t, aij xác suất chuyển trạng thái từ Si sang trạng thái Sj (xác suất Sj xảy với điều kiện Si xảy ra) Xác suất chuyển trạng thái aij không phụ thuộc vào thời gian t độc lập với trạng thái chuyển trước Duy phụ thuộc vào trạng thái Q trình mang tính ngẫu nhiên gọi “có thuộc tính Markov” Ta có: Và aij phải thõa mãn ràng buộc xác suất: Kết xuất hệ thống chuỗi trạng thái thời điểm t tương ứng Ta biết trạng thái thời điểm t nào, mơ hình gọi mơ hình Markov Mơ hình Markov ẩn Mơ hình Markov ẩn dạng mở rộng mơ hình Markov Trong mơ hình Markov, kiện quan sát nằm trạng thái phụ thuộc vào hàm mật độ xác suất trạng thái Các trạng thái âm tiết, từ hay thành phần ngữ pháp câu Hình 3.2 Mơ hình Markov ẩn trạng thái Hình minh họa mơ hình Markov ẩn trạng thái với kiện quan sát trạng thái V = {v1, v2, v3, v4} Khả (xác suất) quan sát kiện vk trạng thái Sj phụ thuộc vào hàm xác suất bj(k) Hàm b gọi hàm mật độ xác suất kiện quan sát Gọi mơ hình Markov ẩn quan sát tham số ẩn, xuất thông qua giai đoạn tiền xử lý (gán nhãn, phân loại) coi “trạng thái” ẩn Ứng dụng Dựa vào xác suất chuyển đổi trạng thái ẩn, áp dụng Markov ẩn vào hệ thống xử lý ngôn ngữ tự nhiên, nhận dạng mẫu âm hay dự đoán mẫu Biến đổi wavelet Giới thiệu chung tần số âm thanh, tín hiệu tiếng nói khơng theo tỉ lệ tuyến tính Vì người ta sử dụng thang độ dựa tỉ lệ “mel” Để chuyển từ thang đo hertz sang thang đo mel ta sử dụng công thức: Và công thức biến đổi ngược lại: Hình 4.4 Đồ thị chuyển đổi thang đo mel với thang đo hertz Trình tự thực hiện: Giả sử ta có đoạn âm tốc độ mẫu 16kHz A/D conversion Lấy mẫu rời rạc biên độ để có sở xây dựng đặc trưng Âm dạng tín hiệu liên tục, máy tính làm việc với số rời rạc Ta cần lấy mẫu khoảng thời gian cách với tần số lấy mẫu xác định (sample rate) để chuyển từ dạng tín hiệu liên tục dạng rời rạc VD: sample_rate = 8000 ⟶ 1s lấy 8000 giá trị Trong demo ta chọn sr = 16000 Hz song = os.path.join(data_dir, song) y, sr = librosa.load(song, sr=16000) Hình 4.5 Chuyển đổi tín hiệu liên tục sang tín hiệu rời rạc Pre – emphasis Âm thu chứa nhiều âm nhiễu từ môi trường tiếng cười nói, tiếng nhạc, tivi, Do đặc điểm cấu tạo quản phận phát âm nên tiếng nói có đặc điểm: âm tần số thấp có mức lượng cao, âm tần số cao lại có mức lượng thấp Trong đó, tần số cao chứa nhiều thơng tin âm vị Vì cần bước pre-emphasis để kích tín hiệu tần số cao lên Nguyên lý hoạt động so sánh bit liệu truyền trước với bit liệu tại, khối mạch [Z – 1] cung cấp độ trễ cho bit liệu Nếu hai bit - bit bị trễ bit - có mức, bit truyền mức bình thường Nếu hai bit khác nhau, bit truyền với cường độ cao hơn.Việc cài đặt đơn giản thực theo công thức sau: y(t) = x(t) − αx(t − 1) Hình 4.6 Pre-emphasis signal = sigproc.preemphasis(signal,preemph) def preemphasis(signal,coeff=0.95): """perform preemphasis on the input signal :param signal: The signal to filter :param coeff: The preemphasis coefficient is no filter, default is 0.95.\ :returns: the filtered signal """ return numpy.append(signal[0],signal[1:]-coeff*signal[:-1]) Framing Trong phân tích tín hiệu âm người ta thường sử dụng phương pháp phân tích ngắn hạn hầu hết tín hiệu âm ổn định khoảng thời gian ngắn (20ms) Do áp dụng phương pháp Framing để khái quát liệu âm cách tốt Ta chia mẫu liệu âm thành frames Mỗi frame có kích thước từ 25ms Các frame liên tiếp chồng lên (tức từ đầu frame sau tới cuối frame trước) khoảng 10ms, việc giúp không bị mát thơng tin lấy frame nối tiếp nhau, thơng tin biên bị gián đoạn Hình 4.7 Framing Một vài thuật ngữ sử dụng: ● Kích thước khung (frame size): Số điểm mẫu khung ● Chồng lấp khung (frame overlap): Số điểm mẫu chồng lấp khung liên tiếp ● Bước khung = frame size – frame overlap ● Tỷ lệ khung (frame rate): số khung giấy, tính theo cơng thức: tần số lấy mẫu / bước khung Ví dụ: tần số lấy mẫu fs = 16000 Thời gian khung t1 = 25ms Thời gian chồng lấp khung: t2 = 5ms ● Frame size = fs * t1 = (16000 * 25) / 1000 = 400 (điểm mẫu) ● def fbank(signal,samplerate=16000,winlen=0.025,winstep=0.01, nfilt=26,nfft=512,lowfreq=0,highfreq=None,preemph=0.97, winfunc=lambda x:numpy.ones((x,))): """Compute mel-filterbank energy features from an audio signal :param signal: the audio signal from which to compute features Should be an N*1 array :param samplerate: the samplerate of the signal we are working with :param winlen: the length of the analysis window in seconds Default is 0.025s (25 milliseconds) :param winstep: the step between successive windows in seconds Default is 0.01s (10 milliseconds) :param nfilt: the number of filters in the filterbank, default 26 :param nfft: the FFT size Default is 512 :param lowfreq: lowest band edge of mel filters In Hz, default is :param highfreq: highest band edge of mel filters In Hz, default is samplerate/2 :param preemph: apply preemphasis filter with preemph as coefficient is no filter Default is 0.97 :param winfunc: the analysis window to apply to each frame By default no window is applied You can use numpy window functions here e.g winfunc=numpy.hamming :returns: values The first is a numpy array of size (NUMFRAMES by nfilt) containing features Each row holds feature vector The second return value is the energy in each frame (total energy, unwindowed) """ highfreq= highfreq or samplerate/2 signal = sigproc.preemphasis(signal,preemph) frames = sigproc.framesig(signal, winlen*samplerate, winstep*samplerate, winfunc) pspec = sigproc.powspec(frames,nfft) energy = numpy.sum(pspec,1) # this stores the total energy in each frame energy = numpy.where(energy == 0,numpy.finfo(float).eps,energy) # if energy is zero, we get problems with log fb = feat feat zero, we get_filterbanks(nfilt,nfft,samplerate,lowfreq,highfreq) = numpy.dot(pspec,fb.T) # compute the filterbank energies = numpy.where(feat == 0,numpy.finfo(float).eps,feat) # if feat is get problems with log return feat,energy Windowing Hình 4.8 Các cửa sổ lọc phổ biến Do framing làm rời rạc hóa liệu âm thanh, ta áp dụng Hamming window để làm mịn frame Cửa số hóa frame, nhằm giảm gián đoạn tín hiệu biên frame Hay nói cách khác giảm dần tín hiệu khoảng bắt đầu kết thúc frame, điều làm thông tin liệu tập trung vào frame Cơng thức Hamming window: DFT DFT – Discrete Fourier Transform hay gọi thuật toán biến đổi Fourier rời rạc Thuật toán biến đổi frame từ miền thời gian miền tần số Áp dụng công thức: def powspec(frames,NFFT): """Compute the power spectrum of each frame in frames If frames is an NxD matrix, output will be Nx(NFFT/2+1) :param frames: the array of frames Each row is a frame :param NFFT: the FFT length to use If NFFT > frame_len, the frames are zero-padded :returns: If frames is an NxD matrix, output will be Nx(NFFT/2+1) Each row will be the power spectrum of the corresponding frame """ return 1.0/NFFT * numpy.square(magspec(frames,NFFT)) Mỗi frame ta thu list giá trị độ lớn (magnitude) tương ứng với tần số từ → N Áp dụng tất frame, ta thu spectrogram hình Trục xx trục thời gian (tương ứng với thứ tự frame), trục yy thể dải tần số từ → 10000 Hz, giá trị magnitude tần số thể màu sắc Qua quan sát spectrogram này, ta nhận thấy tần số thấp thường có magnitude cao, tần số cao thường có magnitude thấp Hình 4.9 Spectrogram 2D 3D Mel Filtering Hình 4.10 Bộ lọc mel fb = get_filterbanks(nfilt,nfft,samplerate,lowfreq,highfreq) def get_filterbanks(nfilt=20,nfft=512,samplerate=16000,lowfreq=0,highfreq=None) : """Compute a mel-filterbank The filters are stored in the rows, the columns correspond to fft bins The filters are returned as an array of size nfilt * (nfft/2 + 1) :param nfilt: the number of filters in the filterbank, default 20 :param nfft: the FFT size Default is 512 :param samplerate: the samplerate of the signal we are working with Affects mel spacing :param lowfreq: lowest band edge of mel filters, default Hz :param highfreq: highest band edge of mel filters, default samplerate/2 :returns: A numpy array of size nfilt * (nfft/2 + 1) containing filterbank Each row holds filter """ highfreq= highfreq or samplerate/2 assert highfreq