标签: spectrogram

Spectrogram C++库

对于我目前在C++/Qt中的项目,我需要一个库(LGPL是首选),它可以根据信号(基本上是双精度数组)计算频谱图.我已经使用Qwt作为GUI部分.

有什么建议?谢谢.

c++ fft scientific-computing spectrum spectrogram

23
推荐指数
2
解决办法
1万
查看次数

MATLAB'谱图'参数

我是MATLAB的初学者,我应该对EEG信号进行频谱分析,绘制功率谱密度和频谱图.我的信号是10几秒长,一个采样频率160 Hz,总共1600 samples有一些关于如何在MATLAB中找到函数参数的问题,包括:

pwelch (x, window, noverlap, nfft, fs);

spectrogram (x, window, noverlap, F, fs);
Run Code Online (Sandbox Code Playgroud)

那么我的问题是在哪里找到参数的值window,noverlap我不知道它们的用途.

matlab signal-processing spectrogram

17
推荐指数
2
解决办法
4万
查看次数

如何将.wav文件转换为python3中的频谱图

我试图从python3中的.wav文件创建一个频谱图.

我希望最终保存的图像看起来与此图像类似:

我尝试过以下方法:

这个堆栈溢出帖子: 波形文件的谱图

这篇文章有点奏效了.运行后,我得到了

但是,此图表不包含我需要的颜色.我需要一个有颜色的光谱图.我尝试修补这些代码尝试添加颜色但是在花费了大量时间和精力之后,我无法理解它!

然后我尝试了教程.

当我尝试使用错误TypeError运行它时,此代码崩溃(在第17行):'numpy.float64'对象不能被解释为整数.

第17行:

samples = np.append(np.zeros(np.floor(frameSize/2.0)), sig)
Run Code Online (Sandbox Code Playgroud)

我试图通过施法修复它

samples = int(np.append(np.zeros(np.floor(frameSize/2.0)), sig))
Run Code Online (Sandbox Code Playgroud)

而且我也试过了

samples = np.append(np.zeros(int(np.floor(frameSize/2.0)), sig))    
Run Code Online (Sandbox Code Playgroud)

然而,这些都没有最终奏效.

我真的想知道如何将我的.wav文件转换为带有颜色的光谱图,以便我可以分析它们!任何帮助,将不胜感激!!!!!

请告诉我你是否希望我提供有关我的python版本,我尝试过的内容或我想要实现的内容的更多信息.

python audio numpy matplotlib spectrogram

14
推荐指数
3
解决办法
4万
查看次数

如何以与pylab的specgram()相同的方式绘制频谱图?

在Pylab中,该specgram()函数为给定的幅度列表创建频谱图,并自动为频谱图创建窗口.

我想生成频谱图(瞬时功率由下式给出Pxx),通过在其上运行边缘检测器对其进行修改,然后绘制结果.

(Pxx, freqs, bins, im) = pylab.specgram( self.data, Fs=self.rate, ...... )
Run Code Online (Sandbox Code Playgroud)

问题是每当我尝试Pxx使用imshow或甚至修改修改时NonUniformImage,我都会遇到下面的错误消息.

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/image.py:336:UserWarning:非线性轴不支持图像.warnings.warn("非线性轴不支持图像.")

例如,我正在使用的代码的一部分在下面.

    # how many instantaneous spectra did we calculate
    (numBins, numSpectra) = Pxx.shape

    # how many seconds in entire audio recording
    numSeconds = float(self.data.size) / self.rate


    ax = fig.add_subplot(212)
    im = NonUniformImage(ax, interpolation='bilinear')

    x = np.arange(0, numSpectra)
    y = np.arange(0, numBins)
    z = Pxx
    im.set_data(x, y, z)
    ax.images.append(im) 
    ax.set_xlim(0, numSpectra)
    ax.set_ylim(0, numBins)
    ax.set_yscale('symlog') # see http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.set_yscale …
Run Code Online (Sandbox Code Playgroud)

python audio matplotlib spectrogram

13
推荐指数
1
解决办法
2万
查看次数

将FFT转换为谱图

我有一个音频文件,我正在遍历文件,每步取512个样本,然后通过FFT.

我将数据输出为块514浮动(使用IPP的ippsFFTFwd_RToCCS_32f_I),其中实部和虚部交错.

我的问题是,一旦我拥有这些复杂数字,我该怎么办?目前我正在为每个价值做

const float realValue   = buffer[(y * 2) + 0];
const float imagValue   = buffer[(y * 2) + 1];
const float value       = sqrt( (realValue * realValue) + (imagValue * imagValue) );
Run Code Online (Sandbox Code Playgroud)

这提供了一些稍微有用的东西,但我更倾向于在0到1的范围内获得值.上面的问题是峰值最终会回到9或更多.这意味着事情会恶化饱和,然后光谱图的其他部分几乎不会出现,尽管当我通过试听的频谱图运行音频时它们看起来非常强大.我完全承认我不是100%确定FFT返回的数据是什么(除了它代表我传入的512个样本长块的频率值).特别是我的理解是缺乏compex数字代表什么.

任何建议和帮助将不胜感激!

编辑:只是为了澄清.我的一个大问题是,如果不知道比例是什么,返回的FFT值是没有意义的.有人能指出我制定这种规模吗?

Edit2:通过执行以下操作,我得到了非常好看的结果:

size_t count2   = 0;
size_t max2     = kFFTSize + 2;
while( count2 < max2 )
{
    const float realValue   = buffer[(count2) + 0];
    const float imagValue   = buffer[(count2) + 1];
    const float value   = (log10f( sqrtf( (realValue * realValue) + (imagValue * …
Run Code Online (Sandbox Code Playgroud)

c++ fft spectrogram intel-ipp

12
推荐指数
4
解决办法
9938
查看次数

使用 linux 命令行从 WAV/RIFF 获取频谱

如何生成包含 wav/riff 声音文件频率频谱的文件?我想使用 linux 命令行。

我知道很酷的 sox 函数来生成 png 频谱图

sox sound.wav -n spectrogram
Run Code Online (Sandbox Code Playgroud)

但我不需要频率频谱的视觉表示。我只想在数据文件中获取频谱,以便我可以处理它们。我相信必须有使用 sox 的选项。Sox 需要在绘制数据之前生成该数据。如何得到这个?

不确定,也许第二个解决方案是将 wav 文件导出到 dat 文件中。来自 dat 文件的每个样本都是膜在某一时刻的位置的度量。所以这不是频谱。

sox sound.wav file.dat
Run Code Online (Sandbox Code Playgroud)

如何将这些膜位置转换为我需要的光谱?

谢谢。

linux audio spectrum sox spectrogram

11
推荐指数
3
解决办法
1万
查看次数

使用fftw和window函数生成正确的谱图

对于项目,我需要能够从.WAV文件生成频谱图.我已经读过以下应该做的事情:

  1. 获得N(变换大小)样本
  2. 应用窗口功能
  3. 使用样本进行快速傅里叶变换
  4. 规范化输出
  5. 生成频谱图

在下图中,您可以看到两个使用汉宁窗函数的10000 Hz正弦波谱图.在左侧,您可以看到由audacity生成的谱图,右侧是我的版本.你可以看到我的版本有更多的线/噪音.这是不同箱子的泄漏?如何获得像大胆产生的清晰图像.我应该做一些后期处理吗?我还没有做任何规范化,因为不完全了解如何这样做.

在此输入图像描述

更新

我发现教程解释了如何在c ++中生成频谱图.我编译了源代码,看看我能找到什么差异.

说实话,我的数学非常生疏,所以我不确定规范化在这里做了什么:

    for(i = 0; i < half; i++){
        out[i][0] *= (2./transform_size);
        out[i][6] *= (2./transform_size);
        processed[i] = out[i][0]*out[i][0] + out[i][7]*out[i][8];
        //sets values between 0 and 1?
        processed[i] =10. * (log (processed[i] + 1e-6)/log(10)) /-60.;
    }
Run Code Online (Sandbox Code Playgroud)

在这之后我得到了这个图像(顺便说一下,我把颜色颠倒了):

在此输入图像描述

然后我看一下我的声音库和教程之一提供的输入样本的差异.我的方式更高,所以我手动归一化是将其除以因子32767.9.然后我去看看这个看起来相当不错的图片.但除以这个数字似乎是错误的.我希望看到一个不同的解决方案.

在此输入图像描述

这是完整的相关源代码.

void Spectrogram::process(){
    int i;
    int transform_size = 1024;
    int half = transform_size/2;
    int step_size = transform_size/2;
    double in[transform_size];
    double processed[half];
    fftw_complex *out;
    fftw_plan p; …
Run Code Online (Sandbox Code Playgroud)

c++ fft fftw spectrogram

10
推荐指数
2
解决办法
6198
查看次数

什么是频谱图,如何设置其参数?

我试图绘制我的时域信号的谱图:

N=5000;
phi = (rand(1,N)-0.5)*pi;
a = tan((0.5.*phi));
i = 2.*a./(1-a.^2);
plot(i);
spectrogram(i,100,1,100,1e3);
Run Code Online (Sandbox Code Playgroud)

问题是我不明白参数和应该给出的值.我正在使用这些值,我参考了MATLAB的在线文档spectrogram.我是MATLAB的新手,我只是没有理解.任何帮助将不胜感激!

matlab signal-processing fft spectrogram

10
推荐指数
1
解决办法
2万
查看次数

在java中使用FFT创建.wav的谱图

经过研究和大量的试验和错误,我已经到了一个点,我可以构建一个谱图,我认为它具有正确和错误的元素.

1.首先,我将.wav文件读入字节数组并仅提取数据部分.

2.我将字节数组转换为双数组,取左右声道的平均值.我还注意到1个通道的1个样本由2个字节组成.所以,4个字节变为1个双精度.

3.对于某个窗口大小为2的功率,我从这里应用FFT 并得到频域的幅度.这是谱图图像的垂直条带.

4.我使用相同的窗口大小重复执行此操作并重叠整个数据并获得频谱图.

以下是将.wav读入双数组的代码

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;

public class readWAV2Array {

    private byte[] entireFileData;

    //SR = sampling rate
    public double getSR(){
        ByteBuffer wrapped = ByteBuffer.wrap(Arrays.copyOfRange(entireFileData, 24, 28)); // big-endian by default
        double SR = wrapped.order(java.nio.ByteOrder.LITTLE_ENDIAN).getInt();
        return SR;
    }

    public readWAV2Array(String filepath, boolean print_info) throws IOException{
        Path path = Paths.get(filepath);
        this.entireFileData = Files.readAllBytes(path);

        if (print_info){

        //extract format
        String format = new …
Run Code Online (Sandbox Code Playgroud)

java signal-processing fft spectrogram

10
推荐指数
1
解决办法
3275
查看次数

在python中计算.wav文件的频谱图

我正在尝试.wav使用Python 从文件中计算出频谱图。为了做到这一点,我遵循此处的说明。我首先.wav使用librosa库读取文件。在链接中找到的代码可以正常工作。该代码是:

sig, rate = librosa.load(file, sr = None)
sig = buf_to_int(sig, n_bytes=2)
spectrogram = sig2spec(rate, sig)
Run Code Online (Sandbox Code Playgroud)

和功能sig2spec:

def sig2spec(signal, sample_rate):

# Read the file.
# sample_rate, signal = scipy.io.wavfile.read(filename)
# signal = signal[0:int(1.5 * sample_rate)]  # Keep the first 3.5 seconds
# plt.plot(signal)
# plt.show()

# Pre-emphasis step: Amplification of the high frequencies (HF)
# (1) balance the frequency spectrum since HF usually have smaller magnitudes compared to LF
# (2) avoid numerical …
Run Code Online (Sandbox Code Playgroud)

python audio numpy spectrogram librosa

10
推荐指数
1
解决办法
1579
查看次数