如何使用matlab中的任何算法将录制的声音转换为噪声



我正在尝试将我录制的声音转换为噪音,这样如果有人播放转换后的录音,他听起来就像噪音。然后,如果我对转换后的录音执行相反的操作,即噪声,我应该得到原来的声音。

这是我把录制的声音变成噪音的代码:

c = wavread('haseeb');
a = (c-min(c)) / (max(c)-min(c)); % normalization to bring the voice values in the range [0,1]
for i=1:length(a)
    % speading the values into the range[-1,1]
    if ((a(i,1)>=0) && (a(i,1)<=0.2))
        b(i,1) = a(i,1)-1;
    elseif ((a(i,1)>0.2) && (a(i,1)<=0.4))
        b(i,1) =a(i,1)+0.6;
    elseif ((a(i,1)>0.4) && (a(i,1)<=0.6))
        b(i,1) = a(i,1)-0.5;
    elseif((a(i,1)>0.6) && (a(i,1)<=0.8))
        b(i,1) = a(i,1)-1.2;
    elseif((a(i,1)>0.8)&&(a(i,1)<=1))
        b(i,1)=a(i,1)-0.4;
    else
    end
end

这段代码在某种程度上是有效的。录制的声音被转换成噪音,但你可以在背景中听到原始的声音,如果你播放噪音减慢,你可以听到声音。我想修改一下代码,让它完全变成噪音,没有人能听到声音,当我应用反向过程时,我将得到原来的声音。

一种可能的方法是使用随机正交变换矩阵。
思路如下:
1. 首先生成一个大小为N的随机方阵。注意N是窗口大小,而不是信号的长度。
2. 接下来,通过使用svd,你构造了一个随机的标准正交变换。3.将信号分成长度为N的段,并将每段与变换相乘。4. 要重建信号,只需将每个片段与转置相乘。
这可能不是你想要的最有效的方法,但它应该有效。

下面是使用MATLAB内置音频文件之一的此过程的示例:

load handel.mat
N = 256;
Frames = floor(numel(y)/N);
RandTrans = randn(N);
[U,S,V] = svd(RandTrans);
RandTransOrtho = U*V';
x = zeros(size(y));
yrec = x;
for k=1:Frames
    x((k-1)*N + (1:N)) = RandTransOrtho*y((k-1)*N + (1:N));
    yrec((k-1)*N + (1:N)) = RandTransOrtho'*x((k-1)*N + (1:N));
end

最新更新