{ "cells": [ { "cell_type": "markdown", "id": "0044a926-67cc-4850-8a9f-e802a1957603", "metadata": {}, "source": [ "# Denoising Example" ] }, { "cell_type": "code", "execution_count": 1, "id": "68be9632-c91c-42db-9dc3-5d0d6c918f5c", "metadata": {}, "outputs": [], "source": [ "using NBInclude\n", "using Plots\n", "@nbinclude(\"GPUFilterBanks.ipynb\");\n", "@nbinclude(\"AudioTools.ipynb\");" ] }, { "cell_type": "code", "execution_count": 2, "id": "05db5356-9c66-4eb6-b3bb-aa212cbb61b3", "metadata": {}, "outputs": [], "source": [ "tetris = load(\"korobeiniki.wav\");\n", "fs = round(Int,tetris.samplerate);\n", "original = audio_to_float( truncate_audio(tetris.data,nextpow(2,10*fs)) );\n", "noisy = original .+ Float32.(0.01*randn(size(original)));" ] }, { "cell_type": "code", "execution_count": 3, "id": "9791a47d-45aa-45dc-ae54-a8666933d2b5", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "524288-frame, 1-channel SampleBuf{Q0f15, 1}\n", "11.888616780045352s sampled at 44100.0Hz\n", "▁▁▆▆▆▅▇▆▆▆▆▆▆▆▆▆▆▆▆▆▆▅▆▆▆▆▆▆▆▅▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▅▆▆▆▅▆▆▆▆▆▆▆▆▆▆▆▆▆▅▆▆▆▆▆▆▆▅▆▆▆▆▆▆▆▆" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "float_to_audio(original,fs)" ] }, { "cell_type": "code", "execution_count": 4, "id": "c58c8de2-d7d0-4a05-ac15-78b51859dc15", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "524288-frame, 1-channel SampleBuf{Q0f15, 1}\n", "11.888616780045352s sampled at 44100.0Hz\n", "▄▄▆▆▆▆▇▆▆▆▆▆▆▆▆▆▆▆▆▆▆▅▆▆▆▆▆▆▆▅▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▅▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▅▆▆▆▆▆▆▆▆" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "float_to_audio(noisy,fs)" ] }, { "cell_type": "code", "execution_count": 5, "id": "d1c318d5-f742-4f8f-82c5-130d5bfd91d5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1-element Vector{NTuple{4, Int64}}:\n", " (524288, 1, 1, 1)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "num_octaves = 10;\n", "\n", "filters = [\n", " WT.makeqmfpair(wavelet(WT.haar)),\n", " WT.makereverseqmfpair(wavelet(WT.haar))\n", "];\n", "LA = tensor(Float32.(filters[1][1]));\n", "HA = tensor(Float32.(filters[1][2]));\n", "LS = tensor(Float32.(filters[2][1]));\n", "HS = tensor(Float32.(filters[2][2]));\n", "\n", "x = [tensor(original)];\n", "\n", "size.(x)" ] }, { "cell_type": "code", "execution_count": 6, "id": "c3dac3ce-8d95-41cb-950c-ea5985faf726", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "11-element Vector{NTuple{4, Int64}}:\n", " (8192, 32, 1, 1)\n", " (4096, 32, 1, 1)\n", " (2048, 32, 1, 1)\n", " (1024, 32, 1, 1)\n", " (512, 32, 1, 1)\n", " (256, 32, 1, 1)\n", " (128, 32, 1, 1)\n", " (64, 32, 1, 1)\n", " (32, 32, 1, 1)\n", " (16, 32, 1, 1)\n", " (16, 32, 1, 1)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = analysis_filterbank(x, LA, HA)\n", "size.(y)" ] }, { "cell_type": "code", "execution_count": 7, "id": "727cb951-b903-4576-8f1f-bf2a4aa9af02", "metadata": {}, "outputs": [], "source": [ "S1 = [];\n", "S2 = [];\n", "\n", "for octave ∈ 1:(num_octaves+1)\n", " y_i = collect(y[octave]);\n", " h = heatmap(abs.(y_i[:,:]'), \n", " axis=nothing, colorbar=nothing, size=(1000,2000));\n", " append!(S1,[h]);\n", " \n", " threshold = CuArray(\n", " fill(Float32(0.2*(2.0^-octave)),\n", " size(y[octave])\n", " )\n", " );\n", " \n", " y[octave] .= y[octave] .* Float32.( abs.(y[octave]) .> threshold)\n", " \n", " y_i = collect(y[octave]);\n", " h = heatmap(abs.(y_i[:,:]'),\n", " axis=nothing, colorbar=nothing, size=(1000,2000));\n", " append!(S2,[h]);\n", "end" ] }, { "cell_type": "code", "execution_count": 8, "id": "a753a738-56d1-46ae-a78b-d20d85e7202e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1-element Vector{NTuple{4, Int64}}:\n", " (524288, 1, 1, 1)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = synthesis_filterbank(y, LS, HS)\n", "size.(x)" ] }, { "cell_type": "code", "execution_count": 9, "id": "c5f4c923-25ab-4118-a09d-52f1a70a3e65", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "524288-frame, 1-channel SampleBuf{Q0f15, 1}\n", "11.888616780045352s sampled at 44100.0Hz\n", "▁▁▆▆▆▅▇▆▆▆▆▆▆▆▆▆▆▆▆▆▆▅▆▆▆▆▆▆▆▅▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▅▆▆▆▅▆▆▆▆▆▆▆▆▆▆▆▅▆▅▆▆▆▆▆▆▆▅▆▆▆▆▆▆▆▆" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "float_to_audio(collect(x[1][:]),fs)" ] }, { "cell_type": "code", "execution_count": 10, "id": "183aeea5-90a6-451f-873f-f94e8747c8b9", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "l = @layout [p1;p2;p3;p4;p5;p6;p7;p8;p9;p10;p11];\n", "plot(S1..., layout=l)" ] }, { "cell_type": "code", "execution_count": 11, "id": "8465e831-c9a7-4ff8-9a4f-d56346e80703", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "l = @layout [p1;p2;p3;p4;p5;p6;p7;p8;p9;p10;p11];\n", "plot(S2..., layout=l)" ] } ], "metadata": { "kernelspec": { "display_name": "Julia 1.7.0-beta3", "language": "julia", "name": "julia-1.7" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.7.0" } }, "nbformat": 4, "nbformat_minor": 5 }