{"id":13434164,"url":"https://github.com/zafarrafii/REPET-Matlab","last_synced_at":"2025-03-17T14:30:49.998Z","repository":{"id":157579703,"uuid":"97890261","full_name":"zafarrafii/REPET-Matlab","owner":"zafarrafii","description":"REPeating Pattern Extraction Technique (REPET) in Matlab for audio source separation: original REPET, REPET extended, adaptive REPET, REPET-SIM, REPET-SIM online","archived":false,"fork":false,"pushed_at":"2024-02-16T17:53:32.000Z","size":98444,"stargazers_count":39,"open_issues_count":0,"forks_count":8,"subscribers_count":0,"default_branch":"master","last_synced_at":"2024-10-27T14:44:08.584Z","etag":null,"topics":["audio-source-separation","beat-spectrogram","beat-spectrum","blind-source-separation","foreground-background-separation","lead-accompaniment-separation","matlab","median-filter","music-voice-separation","repeating-patterns","repet","repet-sim","similarity-matrix","singing-voice-separation"],"latest_commit_sha":null,"homepage":"http://zafarrafii.com/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zafarrafii.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2017-07-21T00:50:00.000Z","updated_at":"2024-10-24T11:37:22.000Z","dependencies_parsed_at":"2024-02-16T18:57:51.787Z","dependency_job_id":null,"html_url":"https://github.com/zafarrafii/REPET-Matlab","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zafarrafii%2FREPET-Matlab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zafarrafii%2FREPET-Matlab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zafarrafii%2FREPET-Matlab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zafarrafii%2FREPET-Matlab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zafarrafii","download_url":"https://codeload.github.com/zafarrafii/REPET-Matlab/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244050056,"owners_count":20389630,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio-source-separation","beat-spectrogram","beat-spectrum","blind-source-separation","foreground-background-separation","lead-accompaniment-separation","matlab","median-filter","music-voice-separation","repeating-patterns","repet","repet-sim","similarity-matrix","singing-voice-separation"],"created_at":"2024-07-31T02:01:48.352Z","updated_at":"2025-03-17T14:30:48.584Z","avatar_url":"https://github.com/zafarrafii.png","language":"Jupyter Notebook","funding_links":[],"categories":["Jupyter Notebook"],"sub_categories":[],"readme":"# REPET-Matlab\n\nREPeating Pattern Extraction Technique (REPET) in **Matlab** for audio source separation.\n\n\u003cimg src=\"images/repet.png\" width=\"600\"\u003e\n\nRepetition is a fundamental element in generating and perceiving structure. In audio, mixtures are often composed of structures where a repeating background signal is superimposed with a varying foreground signal (e.g., a singer overlaying varying vocals on a repeating accompaniment or a varying speech signal mixed up with a repeating background noise). On this basis, we present the *REpeating Pattern Extraction Technique (REPET)*, a simple approach for separating the repeating background from the non-repeating foreground in an audio mixture. The basic idea is to find the repeating elements in the mixture, derive the underlying repeating models, and extract the repeating background by comparing the models to the mixture. Unlike other separation approaches, REPET does not depend on special parameterizations, does not rely on complex frameworks, and does not require external information. Because it is only based on repetition, it has the advantage of being simple, fast, blind, and therefore completely and easily automatable.\n\nFiles:\n- [`repet.m`](#repetm): Matlab class with the REPET methods.\n- [`examples.ipynb`](#examplesipynb): Jupyter notebook with some examples.\n- [`audio_file.wav`](#audio_filewav): audio file used for the examples.\n\nSee also:\n- [REPET-Python](https://github.com/zafarrafii/REPET-Matlab): REPET in **Python** for audio source separation.\n- [REPET-GUI-Matlab](https://github.com/zafarrafii/REPET-GUI-Matlab): Matlab GUIs to demo the original REPET and REPET-SIM.\n- [uREPET-Matlab](https://github.com/zafarrafii/uREPET-Matlab): Matlab GUI for uREPET, a simple user interface system for recovering patterns repeating in time and frequency in mixtures of sounds.\n\n## repet.m\n\nThis Matlab class implements a number of methods for REPET:\n\nSimply copy the file `repet.m` in your working directory and you are good to go.\n\nFunctions:\n- [`original`](#original) - Compute the original REPET.\n- [`extended`](#extended) - Compute REPET extended.\n- [`adaptive`](#adaptive) - Compute the adaptive REPET.\n- [`sim`](#sim) - Compute REPET-SIM.\n- [`simonline`](#simonline) - Compute the online REPET-SIM.\n\nOther:\n- `wavread` - Read a WAVE file (using SciPy).\n- `wavwrite` - Write a WAVE file (using SciPy).\n- `specshow` - Display a spectrogram in dB, seconds, and Hz.\n\n### original\n\nCompute the original REPET.\n\n\u003cimg src=\"images/repet_original_overview.png\" width=\"600\"\u003e\n\nThe original REPET aims at identifying and extracting the repeating patterns in an audio mixture, by estimating a period of the underlying repeating structure and modeling a segment of the periodically repeating background.\n\n```\nbackground_signal = repet.original(audio_signal, sampling_frequency)\n    \nInputs:\n    audio_signal: audio signal (number_samples, number_channels)\n    sampling_frequency: sampling frequency in Hz\nOutput:\n    background_signal: background signal (number_samples, number_channels)\n```\n\n#### Example: Estimate the background and foreground signals, and display their spectrograms.\n\n```\n% Read the audio signal and return the sample rate\n[audio_signal,sample_rate] = audioread('audio_file.wav');\n\n% Estimate the background signal and infer the foreground signal\nbackground_signal = repet.original(audio_signal,sample_rate);\nforeground_signal = audio_signal-background_signal;\n\n% Write the background and foreground signals\naudiowrite('background_signal.wav',background_signal,sample_rate)\naudiowrite('foreground_signal.wav',foreground_signal,sample_rate)\n\n% Compute the audio, background, and foreground spectrograms\nwindow_length = 2^nextpow2(0.04*sample_rate);\nwindow_function = hamming(window_length,'periodic');\nstep_length = window_length/2;\naudio_spectrogram = abs(spectrogram(mean(audio_signal,2),window_function,window_length-step_length));\nbackground_spectrogram = abs(spectrogram(mean(background_signal,2),window_function,window_length-step_length));\nforeground_spectrogram = abs(spectrogram(mean(foreground_signal,2),window_function,window_length-step_length));\n\n% Display the audio, background, and foreground spectrograms (up to 5kHz)\nfigure\nsubplot(3,1,1), imagesc(db(audio_spectrogram(2:window_length/8,:))), axis xy\ntitle('Audio Spectrogram (dB)')\nxticks(round((1:floor(length(audio_signal)/sample_rate))*sample_rate/step_length))\nxticklabels(1:floor(length(audio_signal)/sample_rate)), xlabel('Time (s)')\nyticks(round((1e3:1e3:sample_rate/8)/sample_rate*window_length))\nyticklabels(1:sample_rate/8*1e-3), ylabel('Frequency (kHz)')\nset(gca,'FontSize',30)\nsubplot(3,1,2), imagesc(db(background_spectrogram(2:window_length/8,:))), axis xy\ntitle('Background Spectrogram (dB)')\nxticks(round((1:floor(length(audio_signal)/sample_rate))*sample_rate/step_length))\nxticklabels(1:floor(length(audio_signal)/sample_rate)), xlabel('Time (s)')\nyticks(round((1e3:1e3:sample_rate/8)/sample_rate*window_length))\nyticklabels(1:sample_rate/8*1e-3), ylabel('Frequency (kHz)')\nset(gca,'FontSize',30)\nsubplot(3,1,3), imagesc(db(foreground_spectrogram(2:window_length/8,:))), axis xy\ntitle('Foreground Spectrogram (dB)')\nxticks(round((1:floor(length(audio_signal)/sample_rate))*sample_rate/step_length))\nxticklabels(1:floor(length(audio_signal)/sample_rate)), xlabel('Time (s)')\nyticks(round((1e3:1e3:sample_rate/8)/sample_rate*window_length))\nyticklabels(1:sample_rate/8*1e-3), ylabel('Frequency (kHz)')\nset(gca,'FontSize',30)\ncolormap(jet)\n```\n\n\u003cimg src=\"images/repet_original.png\" width=\"1000\"\u003e\n\n\n### extended\n\nCompute REPET extended.\n\nThe original REPET can be easily extended to handle varying repeating structures, by simply applying the method along time, on individual segments or via a sliding window.\n\n```\nbackground_signal = repet.extended(audio_signal, sampling_frequency)\n    \nInputs:\n    audio_signal: audio signal (number_samples, number_channels)\n    sampling_frequency: sampling frequency in Hz\nOutput:\n    background_signal: background signal (number_samples, number_channels)\n```\n\n#### Example: Estimate the background and foreground signals, and display their spectrograms.\n\n```\n% Read the audio signal and return the sample rate\n[audio_signal,sample_rate] = audioread('audio_file.wav');\n\n% Estimate the background signal and infer the foreground signal\nbackground_signal = repet.extended(audio_signal,sample_rate);\nforeground_signal = audio_signal-background_signal;\n\n% Write the background and foreground signals\naudiowrite('background_signal.wav',background_signal,sample_rate)\naudiowrite('foreground_signal.wav',foreground_signal,sample_rate)\n\n% Compute the audio, background, and foreground spectrograms\nwindow_length = 2^nextpow2(0.04*sample_rate);\nstep_length = window_length/2;\nwindow_function = hamming(window_length,'periodic');\naudio_spectrogram = abs(spectrogram(mean(audio_signal,2),window_length,window_length-step_length));\nbackground_spectrogram = abs(spectrogram(mean(background_signal,2),window_length,window_length-step_length));\nforeground_spectrogram = abs(spectrogram(mean(foreground_signal,2),window_length,window_length-step_length));\n\n% Display the audio, background, and foreground spectrograms (up to 5kHz)\nfigure\nsubplot(3,1,1), imagesc(db(audio_spectrogram(2:window_length/8,:))), axis xy\ntitle('Audio Spectrogram (dB)')\nxticks(round((1:floor(length(audio_signal)/sample_rate))*sample_rate/step_length))\nxticklabels(1:floor(length(audio_signal)/sample_rate)), xlabel('Time (s)')\nyticks(round((1e3:1e3:sample_rate/8)/sample_rate*window_length))\nyticklabels(1:sample_rate/8*1e-3), ylabel('Frequency (kHz)')\nset(gca,'FontSize',30)\nsubplot(3,1,2), imagesc(db(background_spectrogram(2:window_length/8,:))), axis xy\ntitle('Background Spectrogram (dB)')\nxticks(round((1:floor(length(audio_signal)/sample_rate))*sample_rate/step_length))\nxticklabels(1:floor(length(audio_signal)/sample_rate)), xlabel('Time (s)')\nyticks(round((1e3:1e3:sample_rate/8)/sample_rate*window_length))\nyticklabels(1:sample_rate/8*1e-3), ylabel('Frequency (kHz)')\nset(gca,'FontSize',30)\nsubplot(3,1,3), imagesc(db(foreground_spectrogram(2:window_length/8,:))), axis xy\ntitle('Foreground Spectrogram (dB)')\nxticks(round((1:floor(length(audio_signal)/sample_rate))*sample_rate/step_length))\nxticklabels(1:floor(length(audio_signal)/sample_rate)), xlabel('Time (s)')\nyticks(round((1e3:1e3:sample_rate/8)/sample_rate*window_length))\nyticklabels(1:sample_rate/8*1e-3), ylabel('Frequency (kHz)')\nset(gca,'FontSize',30)\ncolormap(jet)\n```\n\n\u003cimg src=\"images/repet_extended.png\" width=\"1000\"\u003e\n\n\n### adaptive\n\nCompute the adaptive REPET.\n\n\u003cimg src=\"images/repet_adaptive_overview.png\" width=\"600\"\u003e\n\nThe original REPET works well when the repeating background is relatively stable (e.g., a verse or the chorus in a song); however, the repeating background can also vary over time (e.g., a verse followed by the chorus in the song). The adaptive REPET is an extension of the original REPET that can handle varying repeating structures, by estimating the time-varying repeating periods and extracting the repeating background locally, without the need for segmentation or windowing.\n\n```\nbackground_signal = repet.adaptive(audio_signal, sampling_frequency)\n    \nInputs:\n    audio_signal: audio signal (number_samples, number_channels)\n    sampling_frequency: sampling frequency in Hz\nOutput:\n    background_signal: background signal (number_samples, number_channels)\n```\n\n#### Example: Estimate the background and foreground signals, and display their spectrograms.\n\n```\n% Read the audio signal and return the sample rate\n[audio_signal,sample_rate] = audioread('audio_file.wav');\n\n% Estimate the background signal and infer the foreground signal\nbackground_signal = repet.adaptive(audio_signal,sample_rate);\nforeground_signal = audio_signal-background_signal;\n\n% Write the background and foreground signals\naudiowrite('background_signal.wav',background_signal,sample_rate)\naudiowrite('foreground_signal.wav',foreground_signal,sample_rate)\n\n% Compute the audio, background, and foreground spectrograms\nwindow_length = 2^nextpow2(0.04*sample_rate);\nstep_length = window_length/2;\nwindow_function = hamming(window_length,'periodic');\naudio_spectrogram = abs(spectrogram(mean(audio_signal,2),window_length,window_length-step_length));\nbackground_spectrogram = abs(spectrogram(mean(background_signal,2),window_length,window_length-step_length));\nforeground_spectrogram = abs(spectrogram(mean(foreground_signal,2),window_length,window_length-step_length));\n\n% Display the audio, background, and foreground spectrograms (up to 5kHz)\nfigure\nsubplot(3,1,1), imagesc(db(audio_spectrogram(2:window_length/8,:))), axis xy\ntitle('Audio Spectrogram (dB)')\nxticks(round((1:floor(length(audio_signal)/sample_rate))*sample_rate/step_length))\nxticklabels(1:floor(length(audio_signal)/sample_rate)), xlabel('Time (s)')\nyticks(round((1e3:1e3:sample_rate/8)/sample_rate*window_length))\nyticklabels(1:sample_rate/8*1e-3), ylabel('Frequency (kHz)')\nset(gca,'FontSize',30)\nsubplot(3,1,2), imagesc(db(background_spectrogram(2:window_length/8,:))), axis xy\ntitle('Background Spectrogram (dB)')\nxticks(round((1:floor(length(audio_signal)/sample_rate))*sample_rate/step_length))\nxticklabels(1:floor(length(audio_signal)/sample_rate)), xlabel('Time (s)')\nyticks(round((1e3:1e3:sample_rate/8)/sample_rate*window_length))\nyticklabels(1:sample_rate/8*1e-3), ylabel('Frequency (kHz)')\nset(gca,'FontSize',30)\nsubplot(3,1,3), imagesc(db(foreground_spectrogram(2:window_length/8,:))), axis xy\ntitle('Foreground Spectrogram (dB)')\nxticks(round((1:floor(length(audio_signal)/sample_rate))*sample_rate/step_length))\nxticklabels(1:floor(length(audio_signal)/sample_rate)), xlabel('Time (s)')\nyticks(round((1e3:1e3:sample_rate/8)/sample_rate*window_length))\nyticklabels(1:sample_rate/8*1e-3), ylabel('Frequency (kHz)')\nset(gca,'FontSize',30)\ncolormap(jet)\n```\n\n\u003cimg src=\"images/repet_adaptive.png\" width=\"1000\"\u003e\n\n\n### sim\n\nCompute REPET-SIM.\n\n\u003cimg src=\"images/repet_sim_overview.png\" width=\"600\"\u003e\n\nThe REPET methods work well when the repeating background has periodically repeating patterns (e.g., jackhammer noise); however, the repeating patterns can also happen intermittently or without a global or local periodicity (e.g., frogs by a pond). REPET-SIM is a generalization of REPET that can also handle non-periodically repeating structures, by using a similarity matrix to identify the repeating elements.\n\n```\nbackground_signal = repet.sim(audio_signal, sampling_frequency)\n    \nInputs:\n    audio_signal: audio signal (number_samples, number_channels)\n    sampling_frequency: sampling frequency in Hz\nOutput:\n    background_signal: background signal (number_samples, number_channels)\n```\n\n#### Example: Estimate the background and foreground signals, and display their spectrograms.\n\n```\n% Read the audio signal and return the sample rate\n[audio_signal,sample_rate] = audioread('audio_file.wav');\n\n% Estimate the background signal and infer the foreground signal\nbackground_signal = repet.sim(audio_signal,sample_rate);\nforeground_signal = audio_signal-background_signal;\n\n% Write the background and foreground signals\naudiowrite('background_signal.wav',background_signal,sample_rate)\naudiowrite('foreground_signal.wav',foreground_signal,sample_rate)\n\n% Compute the audio, background, and foreground spectrograms\nwindow_length = 2^nextpow2(0.04*sample_rate);\nstep_length = window_length/2;\nwindow_function = hamming(window_length,'periodic');\naudio_spectrogram = abs(spectrogram(mean(audio_signal,2),window_length,window_length-step_length));\nbackground_spectrogram = abs(spectrogram(mean(background_signal,2),window_length,window_length-step_length));\nforeground_spectrogram = abs(spectrogram(mean(foreground_signal,2),window_length,window_length-step_length));\n\n% Display the audio, background, and foreground spectrograms (up to 5kHz)\nfigure\nsubplot(3,1,1), imagesc(db(audio_spectrogram(2:window_length/8,:))), axis xy\ntitle('Audio Spectrogram (dB)')\nxticks(round((1:floor(length(audio_signal)/sample_rate))*sample_rate/step_length))\nxticklabels(1:floor(length(audio_signal)/sample_rate)), xlabel('Time (s)')\nyticks(round((1e3:1e3:sample_rate/8)/sample_rate*window_length))\nyticklabels(1:sample_rate/8*1e-3), ylabel('Frequency (kHz)')\nset(gca,'FontSize',30)\nsubplot(3,1,2), imagesc(db(background_spectrogram(2:window_length/8,:))), axis xy\ntitle('Background Spectrogram (dB)')\nxticks(round((1:floor(length(audio_signal)/sample_rate))*sample_rate/step_length))\nxticklabels(1:floor(length(audio_signal)/sample_rate)), xlabel('Time (s)')\nyticks(round((1e3:1e3:sample_rate/8)/sample_rate*window_length))\nyticklabels(1:sample_rate/8*1e-3), ylabel('Frequency (kHz)')\nset(gca,'FontSize',30)\nsubplot(3,1,3), imagesc(db(foreground_spectrogram(2:window_length/8,:))), axis xy\ntitle('Foreground Spectrogram (dB)')\nxticks(round((1:floor(length(audio_signal)/sample_rate))*sample_rate/step_length))\nxticklabels(1:floor(length(audio_signal)/sample_rate)), xlabel('Time (s)')\nyticks(round((1e3:1e3:sample_rate/8)/sample_rate*window_length))\nyticklabels(1:sample_rate/8*1e-3), ylabel('Frequency (kHz)')\nset(gca,'FontSize',30)\ncolormap(jet)\n```\n\n\u003cimg src=\"images/repet_sim.png\" width=\"1000\"\u003e\n\n\n### simonline\n\nCompute the online REPET-SIM.\n\nREPET-SIM can be easily implemented online to handle real-time computing, particularly for real-time speech enhancement. The online REPET-SIM simply processes the time frames of the mixture one after the other given a buffer that temporally stores past frames.\n\n```\nbackground_signal = repet.simonline(audio_signal, sampling_frequency)\n    \nInputs:\n    audio_signal: audio signal (number_samples, number_channels)\n    sampling_frequency: sampling frequency in Hz\nOutput:\n    background_signal: background signal (number_samples, number_channels)\n```\n\n#### Example: Estimate the background and foreground signals, and display their spectrograms.\n\n```\n% Read the audio signal and return the sample rate\n[audio_signal,sample_rate] = audioread('audio_file.wav');\n\n% Estimate the background signal and infer the foreground signal\nbackground_signal = repet.simonline(audio_signal,sample_rate);\nforeground_signal = audio_signal-background_signal;\n\n% Write the background and foreground signals\naudiowrite('background_signal.wav',background_signal,sample_rate)\naudiowrite('foreground_signal.wav',foreground_signal,sample_rate)\n\n% Compute the audio, background, and foreground spectrograms\nwindow_length = 2^nextpow2(0.04*sample_rate);\nstep_length = window_length/2;\nwindow_function = hamming(window_length,'periodic');\naudio_spectrogram = abs(spectrogram(mean(audio_signal,2),window_length,window_length-step_length));\nbackground_spectrogram = abs(spectrogram(mean(background_signal,2),window_length,window_length-step_length));\nforeground_spectrogram = abs(spectrogram(mean(foreground_signal,2),window_length,window_length-step_length));\n\n% Display the audio, background, and foreground spectrograms (up to 5kHz)\nfigure\nsubplot(3,1,1), imagesc(db(audio_spectrogram(2:window_length/8,:))), axis xy\ntitle('Audio Spectrogram (dB)')\nxticks(round((1:floor(length(audio_signal)/sample_rate))*sample_rate/step_length))\nxticklabels(1:floor(length(audio_signal)/sample_rate)), xlabel('Time (s)')\nyticks(round((1e3:1e3:sample_rate/8)/sample_rate*window_length))\nyticklabels(1:sample_rate/8*1e-3), ylabel('Frequency (kHz)')\nset(gca,'FontSize',30)\nsubplot(3,1,2), imagesc(db(background_spectrogram(2:window_length/8,:))), axis xy\ntitle('Background Spectrogram (dB)')\nxticks(round((1:floor(length(audio_signal)/sample_rate))*sample_rate/step_length))\nxticklabels(1:floor(length(audio_signal)/sample_rate)), xlabel('Time (s)')\nyticks(round((1e3:1e3:sample_rate/8)/sample_rate*window_length))\nyticklabels(1:sample_rate/8*1e-3), ylabel('Frequency (kHz)')\nset(gca,'FontSize',30)\nsubplot(3,1,3), imagesc(db(foreground_spectrogram(2:window_length/8,:))), axis xy\ntitle('Foreground Spectrogram (dB)')\nxticks(round((1:floor(length(audio_signal)/sample_rate))*sample_rate/step_length))\nxticklabels(1:floor(length(audio_signal)/sample_rate)), xlabel('Time (s)')\nyticks(round((1e3:1e3:sample_rate/8)/sample_rate*window_length))\nyticklabels(1:sample_rate/8*1e-3), ylabel('Frequency (kHz)')\nset(gca,'FontSize',30)\ncolormap(jet)\n```\n\n\u003cimg src=\"images/repet_simonline.png\" width=\"1000\"\u003e\n\n\n## audio_file.wav\n\n23 second audio excerpt from the song *Que Pena Tanto Faz* performed by *Tamy*.\n\n\n# References\n\n- Bryan Pardo, Zafar Rafii, and Zhiyao Duan. \"Audio Source Separation in a Musical Context,\" *Handbook of Systematic Musicology*, Springer, Berlin, Heidelberg, 2018. [[article](http://zafarrafii.com/Documents/Other/Pardo-Rafii-Duan%20-%20Audio%20Source%20Separation%20in%20a%20Musical%20Context%20-%202018.pdf)]\n\n- Zafar Rafii, Antoine Liutkus, and Bryan Pardo. \"REPET for Background/Foreground Separation in Audio,\" *Blind Source Separation*, Springer, Berlin, Heidelberg, 2014. [[article](http://zafarrafii.com/Documents/Other/Rafii-Liutkus-Pardo%20-%20REPET%20for%20Background-Foreground%20Separation%20in%20Audio%20-%202014.pdf)]\n\n- Zafar Rafii and Bryan Pardo. \"Online REPET-SIM for Real-time Speech Enhancement,\" *38th IEEE International Conference on Acoustics, Speech and Signal Processing*, Vancouver, BC, Canada, May 26-31, 2013. [[article](http://zafarrafii.com/Documents/Conferences/Rafii-Pardo%20-%20Online%20REPET-SIM%20for%20Real-time%20Speech%20Enhancement%20-%202013.pdf)][[poster](http://zafarrafii.com/Documents/Conferences/Rafii-Pardo%20-%20Online%20REPET-SIM%20for%20Real-time%20Speech%20Enhancement%20-%202013%20(poster).pdf)]\n\n- Zafar Rafii and Bryan Pardo. \"Audio Separation System and Method,\" 13612413, March 2013. [[URL](http://www.freepatentsonline.com/y2013/0064379.html)]\n\n- Zafar Rafii and Bryan Pardo. \"REpeating Pattern Extraction Technique (REPET): A Simple Method for Music/Voice Separation,\" *IEEE Transactions on Audio, Speech, and Language Processing*, vol. 21, no. 1, January 2013. [[article](http://zafarrafii.com/Documents/Journals/Rafii-Pardo%20-%20REpeating%20Pattern%20Extraction%20Technique%20(REPET)%20A%20Simple%20Method%20for%20Music-Voice%20Separation%20-%202013.pdf)]\n\n- Zafar Rafii and Bryan Pardo. \"Music/Voice Separation using the Similarity Matrix,\" *13th International Society on Music Information Retrieval*, Porto, Portugal, October 8-12, 2012. [[article](http://zafarrafii.com/Documents/Conferences/Rafii-Pardo%20-%20Music-Voice%20Separation%20using%20the%20Similarity%20Matrix%20-%202012.pdf)][[slides](http://zafarrafii.com/Documents/Conferences/Rafii-Pardo%20-%20Music-Voice%20Separation%20using%20the%20Similarity%20Matrix%20-%202012%20(slides).pdf)]\n\n- Antoine Liutkus, Zafar Rafii, Roland Badeau, Bryan Pardo, and Gaël Richard. \"Adaptive Filtering for Music/Voice Separation Exploiting the Repeating Musical Structure,\" *37th IEEE International Conference on Acoustics, Speech and Signal Processing*, Kyoto, Japan, March 25-30, 2012. [[article](http://zafarrafii.com/Documents/Conferences/Liutkus-Rafii-Badeau-Pardo-Richard%20-%20Adaptive%20Filtering%20for%20Music-Voice%20Separation%20Exploiting%20the%20Repeating%20Musical%20Structure%20-%202012.pdf)][[slides](http://zafarrafii.com/Documents/Conferences/Liutkus-Rafii-Badeau-Pardo-Richard%20-%20Adaptive%20Filtering%20for%20Music-Voice%20Separation%20Exploiting%20the%20Repeating%20Musical%20Structure%20-%202012%20(slides).pdf)]\n\n- Zafar Rafii and Bryan Pardo. \"A Simple Music/Voice Separation Method based on the Extraction of the Repeating Musical Structure,\" *36th IEEE International Conference on Acoustics, Speech and Signal Processing*, Prague, Czech Republic, May 22-27, 2011. [[article](http://zafarrafii.com/Documents/Conferences/Rafii-Pardo%20-%20A%20Simple%20Music-Voice%20Separation%20Method%20based%20on%20the%20Extraction%20of%20the%20Repeating%20Musical%20Structure%20-%202011.pdf)][[poster](http://zafarrafii.com/Documents/Conferences/Rafii-Pardo%20-%20A%20Simple%20Music-Voice%20Separation%20Method%20based%20on%20the%20Extraction%20of%20the%20Repeating%20Musical%20Structure%20-%202011%20(poster).pdf)]\n\n\n# Author\n\n- Zafar Rafii\n- http://zafarrafii.com/\n- [CV](http://zafarrafii.com/Zafar%20Rafii%20-%20C.V..pdf)\n- [GitHub](https://github.com/zafarrafii)\n- [LinkedIn](https://www.linkedin.com/in/zafarrafii/)\n- [Google Scholar](https://scholar.google.com/citations?user=8wbS2EsAAAAJ\u0026hl=en)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzafarrafii%2FREPET-Matlab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzafarrafii%2FREPET-Matlab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzafarrafii%2FREPET-Matlab/lists"}