Tag: 信号处理

谷歌应用引擎如何操纵图像数据? 你如何操纵像素数据?

我希望能够访问低级像素数据,以使用GAE完成信号处理算法(它消除了BufferedImages和Java.awt.image类的使用) 您可以通过以下方式访问图像数据: ImagesService imagesService = ImagesServiceFactory.getImagesService(); Image oldImage = ImagesServiceFactory.makeImageFromBlob(blobKey); byte[] imageData = oldImage.getImageData(); 所以这是问题所在: 彩色图像有4个波段(aRGB)但是当你得到图像数据时它是一个1D字节的数组。 1)GAE如何将图像数据存储到字节中? (我想它只是把2D数据放到一维数组中,它是灰度的吗?) 2)你如何操纵图像的各个色带和像素?

使用FFT计算频率时的值错误

我的错频率,我不明白为什么我得到错误的值。因为我按照指令计算后跟stackoverflow。 我使用了来自http://introcs.cs.princeton.edu/java/97data/FFT.java.html的 FFT和http://introcs.cs.princeton.edu/java/97data/Complex.java中的复合体。 HTML audioRec.startRecording(); audioRec.read(bufferByte, 0,bufferSize); for(int i=0;i<bufferSize;i++){ bufferDouble[i]=(double)bufferByte[i]; } Complex[] fftArray = new Complex[bufferSize]; for(int i=0;i<bufferSize;i++){ fftArray[i]=new Complex(bufferDouble[i],0); } FFT.fft(fftArray); double[] magnitude=new double[bufferSize]; for(int i=0;i<bufferSize;i++){ magnitude[i] = Math.sqrt((fftArray[i].re()*fftArray[i].re()) + (fftArray[i].im()*fftArray[i].im())); } double max = 0.0; int index = -1; for(int j=0;j<bufferSize;j++){ if(max < magnitude[j]){ max = magnitude[j]; index = j; } } final […]

非log 2的快速傅里叶变换

我想用Java实现快速傅里叶变换以进行和弦识别,但我并不是真的得到它。 它说样本的数量应该是2的幂,那么对于没有等于2的幂的样本数量的歌曲,我们该怎么办呢? 我也想了解STFT。

如何混合PCM音频源(Java)?

这就是我现在正在使用的内容: for (int i = 0, numSamples = soundBytes.length / 2; i < numSamples; i += 2) { // Get the samples. int sample1 = ((soundBytes[i] & 0xFF) << 8) | (soundBytes[i + 1] & 0xFF); // Automatically converts to unsigned int 0…65535 int sample2 = ((outputBytes[i] & 0xFF) << 8) | (outputBytes[i + 1] […]

使用Goertzel算法检测频率

我正在尝试编写一个程序,用于使用Goertzel算法检测频率。 然而,当我将算法应用于我从AudioRecord read()方法获得的数据时,幅度不会在目标频率上达到峰值(.ie:它通常在低频上达到峰值)。 我误会了什么吗? protected void detect() { double[] dbSample = new double[bufferSize]; short[] sample = new short[bufferSize]; max_magnitude = 0; while(isRecording){ int bufferReadResult = recorder.read(sample,0,bufferSize); for (int j=0;j<bufferSize&&j<bufferReadResult;j++) { dbSample[j] = (double)sample[j]; } } int freq=0; while(freq<=20000){ Goertzel g = new Goertzel(RECORDER_SAMPLE_RATE,freq,bufferSize); g.initGoertzel(); for(int i=0;imax_magnitude){ max_magnitude = magnitude; detect_freq = freq; } g.resetGoertzel(); freq+=50; […]

Android信号分析+一些filter

因为世界杯是主要的体育赛事而且Vuvuzelas是世界上最令人讨厌的声音,所以我有一个想法,通过阅读这个新的来明确地删除它们( http://www.popsci.com/diy/article/2010- 06 / simple-software-can-filter-out-vuvuzela-whine )告诉我们声音的频率为233Hz + 466,932,1864Hz。 我已经自己制作了很多Android应用程序,但从未接触过信号分析和过滤部分,所以这里有几个问题,我不是要求精确的答案,而是可能需要链接和教程来找到可以解决的问题。 我猜一款新的Android手机拥有CPU和电源来进行实时过滤。 1)如何拦截来自Jack麦克风的声音 – Line-IN插头 – (我打算用Jack到Jack插头将电视连接到我的手机上)。 我的问题是完全软件和编码,我有所有的电线和适配器插入一个插孔到我的Android手机线路IN。 2)是否有一些傅里叶分析库,我可以查看网络上的Java库并将它们导入我的Android项目吗? 我真的很抱歉,因为我的问题看起来不准确,但我认为那会很棒。 谢谢您的回答。

汉宁(冯汉恩)的窗口

public short[] HanningWindow(short[] signal_in ,int pos ,int size) { for (int i= pos; i < pos+size; i++) { signal_in[i] = (short) ((signal_in[i]) * ( 0.5 * (1-Math.cos( (2 * Math.PI * i) / (size – 1))))) ; } return signal_in; } 我试图用它 pos = (ring+delay*frame_rate*frame_size)%(frame_size*(frame_rate+1)); num = record.read(lin,pos,frame_size); GGSpecSub tempSpecSub = new GGSpecSub(); lin = […]

在Java中组合多个声音流

我有许多以PCM(PCM_SIGNED 8000.0 Hz,16位,单声道,2字节/帧,小端)编码的语音声音流,我想通过网络发送。 为了节省带宽,我目前使用JSpeex对流进行编码。 然而,为了节省更多带宽,我希望(如果可能的话)在使用JSpeex进行编码之前将这些多个流组合成单个流。 我的DSP知识非常缺乏,我想知道如何在Java中组合流?

MFCC与Java线性和对数滤波器

我正在用Java实现MFCC算法。 在Java中有三角形滤波器和MFCC的示例代码。 这是链接: MFCC Java但是我应该遵循用Matlab编写的代码: MFCC Matlab 我的问题是, 在Matlab代码中它讨论了线性和对数滤波器,但在Java代码中没有任何关于它的内容 。 我应该测量对数和线性滤波器的性能,但是我实现了Java代码并且没有任何相关内容。 另外我不明白Java代码中的这些fbins和cbins是什么?

如何实现均衡器

我知道有很多关于均衡器的问题,但是我没有得到我正在寻找的东西。 我想要做的是一个均衡器,用于修改音频样本,如: equalizer.eqAudio(audiosamples, band, gain) 我不确定这是否是我想要的确切接口,因为我在实现它们方面对DSP知之甚少(我使用filter,限制器,压缩器但没有制造它们)。 所以谷歌搜索我读到我必须对样本进行FFT,这样我得到每个频率范围的数据而不是幅度,按照我想要的方式处理它,然后进行FFT的反转,这样我再次得到音频样本的结果。 我寻找了这个FFT的实现,并找到了JTransform for Java。 该库具有称为离散余弦变换(DCT)的FFT相关算法的实现。 我的问题是: 好吧,我是以正确的方式吗? 由于FFT给出了有关频率的数据,我应该将一大块样本传递给FFT算法。 这个块一定要多大? 是否有一本关于DSP编程的好书可以解释均衡器? 谢谢!