是否有任何通用形式的短时傅里叶变换,其中相应的逆变换内置于SciPy或NumPy或其他任何东西?
specgram在matplotlib中有pyplot 函数,它调用ax.specgram()哪些调用mlab.specgram()调用_spectral_helper():
Run Code Online (Sandbox Code Playgroud)#The checks for if y is x are so that we can use the same function to #implement the core of psd(), csd(), and spectrogram() without doing #extra calculations. We return the unaveraged Pxy, freqs, and t.
但
这是一个辅助函数,它实现了204#psd,csd和谱图之间的通用性.它 并不意味着在mlab之外使用
不过,我不确定这是否可以用来做STFT和ISTFT.还有什么,或者我应该翻译这些MATLAB函数吗?
我知道如何编写自己的临时实现; 我只是在寻找功能齐全的东西,它可以处理不同的窗口函数(但是有一个合理的默认值),完全可以与COLA windows(istft(stft(x))==x)完全颠倒,由多人测试,没有一个一个错误,处理结束和零填充,实际输入的快速RFFT实现等.
我是matlab和FFT的新手,想要了解Matlab FFT示例.现在我有两个主要问题:
1)为什么x轴(频率)结束于500?我怎么知道没有更多的频率或者它们被忽略了?
2)我怎么知道频率在0到500之间?FFT不应该告诉我,频率在哪些限制范围内?FFT是否仅在没有频率的情况下返回幅度值?
谢谢你的提示!
考虑以1000 Hz采样的数据.形成一个信号,其中包含幅度为0.7和120 Hz的幅度为1的正弦波的50 Hz正弦曲线,并使用一些零均值随机噪声对其进行破坏:
Fs = 1000; % Sampling frequency
T = 1/Fs; % Sample time
L = 1000; % Length of signal
t = (0:L-1)*T; % Time vector
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
y = x + 2*randn(size(t)); % Sinusoids plus noise
plot(Fs*t(1:50),y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)')
Run Code Online (Sandbox Code Playgroud)

转换到频域,通过快速傅立叶变换(FFT)找到有噪信号y的离散傅立叶变换:
NFFT = 2^nextpow2(L); % Next power of …Run Code Online (Sandbox Code Playgroud) 我使用fft2来计算MATLAB中灰度图像的傅里叶变换.
绘制结果大小的常用方法是什么?
我目前正在尝试使用Android实现一些代码,以检测何时通过手机的麦克风播放多个特定的音频范围.我已经使用AudioRecord类设置了类:
int channel_config = AudioFormat.CHANNEL_CONFIGURATION_MONO;
int format = AudioFormat.ENCODING_PCM_16BIT;
int sampleSize = 8000;
int bufferSize = AudioRecord.getMinBufferSize(sampleSize, channel_config, format);
AudioRecord audioInput = new AudioRecord(AudioSource.MIC, sampleSize, channel_config, format, bufferSize);
Run Code Online (Sandbox Code Playgroud)
然后读入音频:
short[] audioBuffer = new short[bufferSize];
audioInput.startRecording();
audioInput.read(audioBuffer, 0, bufferSize);
Run Code Online (Sandbox Code Playgroud)
执行FFT是我陷入困境的地方,因为我在这方面的经验很少.我一直在尝试使用这个类:
然后我发送以下值:
Complex[] fftTempArray = new Complex[bufferSize];
for (int i=0; i<bufferSize; i++)
{
fftTempArray[i] = new Complex(audio[i], 0);
}
Complex[] fftArray = fft(fftTempArray);
Run Code Online (Sandbox Code Playgroud)
这可能很容易让我误解了这个课程是如何工作的,但是返回的值跳到了整个地方,即使在沉默中也不代表一致的频率.是否有人知道执行此任务的方法,或者我是否过于复杂化以尝试仅抓取少量频率范围而不是将其绘制为图形表示?
我fft在numpy中使用了函数,导致了一个复杂的数组.如何获得准确的频率值?
我想将声音的音高绘制成图形.
目前我可以绘制幅度.下图是由返回的数据创建的getUnscaledAmplitude():

AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream(file)));
byte[] bytes = new byte[(int) (audioInputStream.getFrameLength()) * (audioInputStream.getFormat().getFrameSize())];
audioInputStream.read(bytes);
// Get amplitude values for each audio channel in an array.
graphData = type.getUnscaledAmplitude(bytes, 1);
public int[][] getUnscaledAmplitude(byte[] eightBitByteArray, int nbChannels)
{
int[][] toReturn = new int[nbChannels][eightBitByteArray.length / (2 * nbChannels)];
int index = 0;
for (int audioByte = 0; audioByte < eightBitByteArray.length;)
{
for (int channel = 0; channel < nbChannels; channel++)
{
// Do the byte to sample conversion. …Run Code Online (Sandbox Code Playgroud) 我正在使用android项目.我需要FFT算法来处理android加速度计数据.在android sdk中有FFT库吗?
我正在拍摄jpg图像并使用numpy的fft2来创建/保存新图像.但是它会抛出此错误
"IOError: cannot write mode F as JPEG"
Run Code Online (Sandbox Code Playgroud)
PIL中的CMYK和JPEG文件有问题吗?
p = Image.open('kibera.jpg')
bw_p = p.convert('L')
array_p = numpy.asarray(bw_p)
fft_p = abs(numpy.fft.rfft2(array_p))
new_p = Image.fromarray(fft_p)
new_p.save('kibera0.jpg')
new_p.histogram()
Run Code Online (Sandbox Code Playgroud) 确定什么即时试图做的是一种音频处理软件,频率会起到足够长的时间(几毫秒)我知道我得到了一个积极的匹配,可以检测常见频率.我知道我需要使用FFT或东西simiral但在数学这个领域我吸,我没有在网上搜索,但没找不到只能做这样的代码.
我试图获得的目标是使自己成为通过声音发送数据的自定义协议,每秒需要非常低的比特率(5-10bps),但我在传输端也非常有限,因此接收软件需要能够自定义(不能使用实际的硬件/软件调制解调器)我也希望这只是软件(除声卡外没有其他硬件)
非常感谢您的帮助.