小编vah*_*aha的帖子

将音频样本从时域转换为频域

作为一名软件工程师,我在处理信号处理问题时遇到了一些困难.我在这个领域没有多少经验.

我尝试做的是采用44100采样率对环境声音进行采样,并对固定尺寸的窗口进行采样,以测试是否存在特定频率(20KHz)且高于阈值.

根据如何使用C中的FFTW从PortAudio中提取样本中的频率信息,我将按照完美的答案执行此操作

从音频端口收集102400个样本(2320 ms),采样率为44100.样本值介于0.0和1.0之间

int samplingRate = 44100;
int numberOfSamples = 102400;
float samples[numberOfSamples] = ListenMic_Function(numberOfSamples,samplingRate);
Run Code Online (Sandbox Code Playgroud)

窗口大小或FFT大小为1024个样本(23.2 ms)

int N = 1024;
Run Code Online (Sandbox Code Playgroud)

窗口数是100

int noOfWindows = numberOfSamples / N;
Run Code Online (Sandbox Code Playgroud)

将样本拆分到noOfWindows(100)窗口,每个窗口的大小为N(1024)个样本

float windowSamplesIn[noOfWindows][N];
for i:= 0 to noOfWindows -1 
    windowSamplesIn[i] = subarray(samples,i*N,(i+1)*N);
endfor
Run Code Online (Sandbox Code Playgroud)

在每个窗口上应用汉宁窗函数

float windowSamplesOut[noOfWindows][N];
for i:= 0 to noOfWindows -1 
    windowSamplesOut[i] = HanningWindow_Function(windowSamplesIn[i]);
endfor
Run Code Online (Sandbox Code Playgroud)

在每个窗口上应用FFT(在FFT函数内完成复数转换)

float frequencyData[noOfWindows][samplingRate/2]; 
for i:= 0 to noOfWindows -1 
    frequencyData[i] = RealToComplex_FFT_Function(windowSamplesOut[i], samplingRate);
endfor
Run Code Online (Sandbox Code Playgroud)

在最后一步中,我使用此链接中实现的FFT函数:http://www.codeproject.com/Articles/9388/How-to-implement-the-FFT-algorithm ; 因为我无法从头开始实现FFT功能.

我不能确定的是,当给FFT输入N(1024)个样本时,samplingRate/2(22050)分贝值作为输出返回.这是一个FFT功能吗?

据我所知,由于奈奎斯特频率,我最多可以检测到一半的采样率频率.但是,每个频率的分贝值是否可以达到samplingRate/2(22050)Hz? …

audio signal-processing fft fftw audio-processing

6
推荐指数
1
解决办法
4141
查看次数

如何在GNOME中以编程方式设置自定义文件夹图标?

因为我知道一个简单的API调用处理在Windows中设置自定义文件夹图标,所以我寻找一种API方法来在Linux中设置自定义文件夹图标.

但在这个帖子中,我看到没有这样的方式.另外,我了解到每个桌面环境都有自己的方式来设置自定义文件夹图标.在那里清楚地描述了KDE的方式.

对于GNOME,我寻找类似的方式; 但是从属性面板设置文件夹的图标时没有创建文件.我认为在用户家中或/等的某个地方应该有一个类似注册表的文件.

如果你痛苦我,我会很高兴的.谢谢.

linux desktop gnome

5
推荐指数
1
解决办法
1929
查看次数

标签 统计

audio ×1

audio-processing ×1

desktop ×1

fft ×1

fftw ×1

gnome ×1

linux ×1

signal-processing ×1