Matlab 基本-尝试向音频文件添加噪声,并尝试使用基本编码(如重复编码)减少错误

Matlab 基本-尝试向音频文件添加噪声,并尝试使用基本编码(如重复编码)减少错误,matlab,noise,Matlab,Noise,我们最近学习了差错控制编码的概念——基本编码,如汉明码、重复码等 我想在MATLAB中试用这些概念。我的目标是比较一个音频文件在被噪声破坏时的播放方式,以及该文件被基本代码保护后又被噪声破坏时的播放方式 所以我在MATLAB中使用audioread函数打开了一个20-30秒的小音频剪辑。我使用16位编码的PCM波形文件。 如果以“本机”格式打开,则为int16格式。如果不是,则以双精度格式打开 然后我添加了两种类型的噪声:AWGN噪声(使用双格式)和二进制对称信道噪声(通过将int16转换为ui

我们最近学习了差错控制编码的概念——基本编码,如汉明码、重复码等

我想在MATLAB中试用这些概念。我的目标是比较一个音频文件在被噪声破坏时的播放方式,以及该文件被基本代码保护后又被噪声破坏时的播放方式

所以我在MATLAB中使用audioread函数打开了一个20-30秒的小音频剪辑。我使用16位编码的PCM波形文件。 如果以“本机”格式打开,则为int16格式。如果不是,则以双精度格式打开

然后我添加了两种类型的噪声:AWGN噪声(使用双格式)和二进制对称信道噪声(通过将int16转换为uint16,然后使用dec2bin函数将其转换为二进制)。重新转换回原来的int16格式确实会增加很多噪音

现在我的目标是尝试一个基本的重复代码。因此,我所做的是通过添加冗余,将由二进制数据组成的二维音频文件矩阵转换为三维矩阵。我使用了以下命令:-

类别(3,x,x,x,x,x)

它创建了一个三维矩阵,这样它在第三维有5个版本的x

现在我想使用bsc功能为它添加噪声。 然后,我希望通过使用包含冗余位的向量上的mode()函数删除重复位来对冗余数据进行解码

我在这项任务中的全部问题是MATLAB计算时间太长。我想一个30秒的文件会创建一个相当大的矩阵,所以可能需要时间。此外,对于各种数据类型,我怀疑我所做的不是最有效的方法

你能建议一种方法,我可以改进计算时间吗。是否有一些功能可以帮助更好地完成这项基本任务

谢谢。 (第一次在这个网站上发布关于MATLAB的内容,如果发布格式不符合要求,请耐心等待。)

编辑-在此处发布代码:-

[x,Fs] = audioread('sample.wav','native'); % native loads it in int16 format , Fs of sample is 44 khz , size of x is 1796365x1
x1 = x - min(x); % to make all values non negative
s = dec2bin(x); % this makes s as a 1796365x15 matrix the binary stream stored as character string of length 15. BSC channel needs double as the data type
s1 = double(s) - 48; % to get 0s and 1s in double format
%%现在,我想比较噪声是如何影响s1本身的,或者是如何影响一个被错误控制编码的矩阵

s2 = bsc(s,0.15); % this adds errors with probability of 0.15
s3 = cat(3,s,s,s,s,s) ; % the goal here is to add repetition redundancy. I will try out other efficient codes such as Hamming Code later.
s4 = bsc(s3,0.15);% this step is taking forever and my PC is unresponsive because of this one.
s5 = mode(s4(,,:)) ; % i wish to know if this is a proper syntax, what I want to do is calculate mode along the 3rd dimension just to remove redundancy and thereby reduce error.
%%我将展示s在s2中被bsc错误损坏后所做的操作

 d = char(s2 + 48);
 d1 = bin2dec(d) + min(x);
 sound(d1,Fs); % this plays the noisy file. I wish to do the same with error control coded matrix but as I said in a previous step it is highly unresponsive.

我想我的任务最大的错误是采样率太高,因此矢量非常大。

除了拍摄较短的片段,您可以尝试对较长的声音片段进行降采样。我认为16kHz甚至8kHz应该足够了,相对于44.1kHz,它应该可以减少内存使用。几点意见:发布一个小代码对解决您的问题有很大帮助,也许您可以显示您认为减速发生的部分(记住缩进您的代码,以便将其标记为代码等等)。其次,你可以尝试更短的剪辑。matlab中还有一个profiler函数,可以告诉您是什么使进程变慢。添加了一些代码。感谢这两个回复,我会记下它们,并尝试以较低的采样率使用文件。