我正在尝试测试位于 Octave 信号包中的 specgram 函数,但我对 specgram 的输入/输出变量有点困惑。我想要做的是能够将频谱图数据放入一个数组中,该数组将显示频率开始和停止时的频率和时间长度。
请参阅下面的示例代码:我试图让数组显示 t1 的长度为 7hz,t2 为 12hz,t3 为 2hz。我该怎么做呢?
我正在使用 ubuntu 12.04 和 Octave 3.2.4 以及信号包 1.0.11
% combines sig with spectra plot
clear all,clc,tic;
fs=1000;
t1=linspace(0,2*pi,fs/0.1); %need to round off no decimals
t2=linspace(0,2*pi,fs/0.3); %need to round off no decimals
t3=linspace(0,2*pi,fs/0.6); %need to round off no decimals
%Create signal in different arrays
y1=sin(7*t1);
y2=sin(12*t2);
y3=sin(2*t3);
%append arrays to test specgram
yt = [y1 y2 y3];
%plot(yt) %will show combined plot
%Spectrum section
yts=specgram(yt',20,500, 2,1); …Run Code Online (Sandbox Code Playgroud) 我的信号是由具有 N 个像素和间距 p 的线性光电二极管阵列检测到的静态 1D 模式。
FFT 到频谱后,我将沿 X 轴得到什么单位?
F = round(fftshift(abs(fft2(A))))
Run Code Online (Sandbox Code Playgroud)
其中 A 是图像。
我正在研究数字图像处理中的对比度拉伸。我不明白零频率分量。我搜索了它,但我无法理解它,请参阅有关零频率分量的一些文档。
我有一些我很想绘制的复杂数据(设定频率周围的小带宽),但我对如何继续解释在特定范围内采样的复杂信号感到有些困惑。
因此,例如,这是我编写的代码(以及我对问题的相当糟糕的尝试),因此我有一个干净的示例来试验人工信号,该示例生成 78 KHz 波的复杂表示。我想要做的是得到一个以 120 KHz 为中心,跨度从 70 到 170 KHz 的图,模拟真实接收器的窄采样范围。
import numpy as np
import matplotlib.pyplot as plt
#sampling rate, samples/second; 100 KHz
rate = 100*10**3
#sample spacing in time, seconds/sample
interval = np.true_divide(1, rate)
#length of the fourier transform
n = 256
#time vector
t = np.linspace(0.0, n*interval, n)
#frequency of artificial signal; 78 KHz
f = 78*10**3
#complex signal
s = np.exp(1j*2*np.pi*f*t)
#dft of the data
dft = np.fft.fft(s)
#frequency bins
x = np.fft.fftfreq(n, d=interval) …Run Code Online (Sandbox Code Playgroud) 我有时间相关的数据,我想对其执行傅立叶变换。数据位于http://pastebin.com/2i0UGJW9。问题是数据不是均匀间隔的。为了解决这个问题,我尝试对数据进行插值,然后执行快速傅立叶变换。
import numpy as np
from scipy.fftpack import fft, fftfreq, fftshift
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt
x = np.linspace(min(times), max(times), len(times))
y = interp1d(times, data)(x)
yf = fft(y)
xf = fftfreq(len(times), (max(times)-min(times))/len(times))
xf = fftshift(xf)
yplot = fftshift(yf)
plt.figure()
plt.plot(xf, 1.0/len(times) * np.abs(yplot))
plt.grid()
plt.show()
Run Code Online (Sandbox Code Playgroud)
然而,这给出了以零为中心的单个尖峰,而不是预期的频率图。我怎样才能得到这个以给出准确的结果?
我正在 android 中做声音分析器应用程序。我可以使用 AudioTrack Api 生成 18 khz 到 20 khz 的超声波。我可以使用 AudioRecord Api 录制音频。但我不知道如何计算麦克风输入数据的频率。我看到了多个问题如何从fft结果中获取频率?并使用 FFT 和 Complex 类获取频率 wav 音频它没有给出正确的频率。请帮助我。对不起,我的沟通。
这是我的频率计算代码
int bufferSizeInBytes = 1024;
short[] buffer = new short[bufferSizeInBytes];
class Recording extends Thread {
@Override
public void run() {
while (true) {
bufferReadResult = audioInput.read(buffer, 0, bufferSizeInBytes); // record data from mic into buffer
if(bufferReadResult > 0){
calculate();
}
}
}
public void calculate() {
DoubleFFT_1D fft1d = new DoubleFFT_1D(bufferSizeInBytes);//using JTransforms lib
double[] fftBuffer …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Python 中找到 Hankel 变换的任何现有实现(实际上我更喜欢两个 2d 径向对称函数的对称傅立叶变换,但它可以很容易地简化为 hankel 变换)。
我确实了解hankelpython 模块,但它需要 lambda 函数进行输入,而我只有一维数组。
有什么想法吗?
下面是什么算法?
我从以下源代码中了解到的是:
dir 是FFT的方向:forward=1,inverse=-1。x 是真实的部分y 是虚部什么是m在这里吗?
如果x= {1, 1, 1, 1, 0, 0, 0, 0}, and, y= {0,0,0,0,0,0,0,0,0}, 的值是m多少?
//Inplace 1D FFT
public static void FFT1D(int dir, int m, ref double[] x, ref double[] y)
{
long nn, i, i1, j, k, i2, l, l1, l2;
double c1, c2, tx, ty, t1, t2, u1, u2, z;
/* Calculate the number of points */
nn = 1;
for (i = 0; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Accelerate 框架将一些 python numpy 代码移植到 Swift。
在python中我写
import numpy as np
frames = np.array([1.0, 2.0, 3.0, 4.0])
fftArray = np.fft.fft(frames, len(frames))
print(fftArray)
Run Code Online (Sandbox Code Playgroud)
输出是:
[10.+0.j -2.+2.j -2.+0.j -2.-2.j]
Run Code Online (Sandbox Code Playgroud)
所以在 Swift 中,我试图像这样计算 FFT:
import Foundation
import Accelerate
func fftAnalyzer(frameOfSamples: [Float]) {
// As above, frameOfSamples = [1.0, 2.0, 3.0, 4.0]
let analysisBuffer = frameOfSamples
let frameCount = frameOfSamples.count
var reals = [Float]()
var imags = [Float]()
for (idx, element) in analysisBuffer.enumerated() {
if idx % 2 == 0 {
reals.append(element)
} …Run Code Online (Sandbox Code Playgroud)