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

时间:2014-07-07 17:42:29

标签: matlab noise

我正在尝试将录制的声音转换为噪音,这样如果有人播放转换后的录音,就会发出噪音。然后,如果我对转换后的录音进行反向操作,即噪音,我应该恢复原来的声音。

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

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 个答案:

答案 0 :(得分:0)

一种可能的方法是使用随机正交变换矩阵 这个想法如下:
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