- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有一种方法可以将表示灰度频谱图的矩阵(值不复杂且介于0和1之间)转换为声音文件,例如下图所示的图像,例如WAV文件? This post解释了如何使用seewave
函数使用istft
频谱图进行此操作。但是,就我而言,我看到有两个问题需要解决:
signal::specgram
获得)丢失并且矩阵尺寸与原始频谱图不同(即频率和时间都被上采样/下采样),而每一行和每一列的确切频率和时间值是已知的istft
最佳答案
音频只是一条随时间摆动的曲线,其中该摆动反射(reflect)了您的鼓膜或麦克风拾音膜...该信号处于时域,其中轴是X上的时间,曲线高度是Y上的...典型的CD质量音频具有44,100个采样每秒意味着您捕获了该音频曲线上每秒的点数...捕获的是音频曲线的高度,而隐含的时间意味着知道每个样本都以已知的采样率进行捕获...因此采样率是数字音频上的两个关键音频属性...位深度是另一个属性...如果您花两个字节(16位)记录CD质量曲线高度,则会将2提升到16的幂(2 ^ 16 == 65536)不同的可能值来存储曲线高度
强调原始音频信号的关键是在时域中(X是时间Y是曲线高度)...当您将一组这些样本发送到fft调用时,数据将转换到频域中(X是频率Y是幅度[能量]),因此时间的直接维度消失了,但仍融入了整个频域数据的概念……在决定同时馈入fft调用的两个样本数(样本窗口大小),即提高频率域信号的频率分辨率(以降低incr_freq),您需要更多音频样本才能馈入fft调用,但是要获得频率域中的时间特异性,您需要支付的样本尽可能少通过获得较低的频率分辨率和较低的峰值频率(较低的奈奎斯特极限)来实现
要生成频谱图,您需要将该曲线高度数组(时域)的4096个样本的存储缓冲区馈入傅立叶变换(fft),该傅里叶变换将返回具有相同数量数组元素的数组(频率域),但是这次是每个元素存储一个复数,您可以根据该复数来计算幅度(能量水平)和相位...数组元素零是可以忽略的直流偏置...每个数组元素代表一个不同的频率,可以在其中计算频率增量
with sample_rate of 44100 samples per second, and one second worth of samples ( 44100 )
this gives you a frequency increment resolution of 1 hertz ... IE each freq bin is 1 Hertz apart
incr_freq := sample_rate / number_of_samples
nyquist_limit_index := int(number_of_samples / 2)
这是您可以遍历数组complex_fft的方法(在go not r中)
for index_fft, curr_complex := range complex_fft { // we really only use half this range + 1
if index_fft <= nyquist_limit_index && curr_freq >= min_freq && curr_freq < max_freq {
curr_real = real(curr_complex) // pluck out real portion of complex number
curr_imag = imag(curr_complex) // ditto for imaginary portion
curr_mag = 2.0 * math.Sqrt(curr_real*curr_real+curr_imag*curr_imag) / number_of_samples
curr_theta = math.Atan2(curr_imag, curr_real)
curr_dftt := discrete_fft{
real: 2.0 * curr_real,
imaginary: 2.0 * curr_imag,
magnitude: curr_mag,
theta: curr_theta,
}
随着时间的流逝,您重复上述将下一组4096个样本馈入fft api调用的过程,因此您收集了一组时域数组对及其对应的频率域表示形式
关于r - 如何将频谱图矩阵转换为WAV文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64194542/
我是一名优秀的程序员,十分优秀!