使用numpy进行简单卷积的意外结果

丹尼尔

我已经有一段时间没有做过DSP了,但是我没想到我对基本知识的掌握会走这么远。我有一个脚本,在其中将复杂的指数音调进行卷积。我希望其结果是转移的语气。我的结果是非常出乎意料的-我得到3种音调,但没有一个达到我期望的频率。有人可以解释为什么我得到这些结果吗?

这是脚本。

import sys
import numpy
import math
import scipy
from pylab import *

def gen_tone(f, fs, length):
    t = linspace(0, length, length * fs)
    return cos(2.0 * pi * f * t)

def gen_exp(f, fs, length):
    t = linspace(0, length, length * fs)
    return numpy.exp(1.0j * 2 * pi * f * t)

def plot_fft(f, fs):
    FFT = abs(scipy.fft(f, 1024)) / f.size
    figure()
    plot(FFT)

f100 = gen_tone(8000, 44100, 1)
f200j = gen_exp(1000, 44100, 1)

res = scipy.signal.fftconvolve(f100, f200j, 'full')

plot_fft(f100, 44100)
plot_fft(f200j, 44100)
plot_fft(res, 44100)

show()
沃伦·韦克瑟(Warren Weckesser)

您正在使用频移属性(例如,请参见http://ocw.usu.edu/Electrical_and_Computer_Engineering/Signals_and_Systems/5_6node6.html;向下滚动到标有“频移属性”的部分。)即,如果的傅立叶变换f(t)F(w),则进行傅立叶变换。的f(t)*exp(j*w0*t)F(w - w0)表达f(t)*exp(j*w0*t)是逐点相乘f(t)exp(j*w0*t)卷积。

要查看您期望的结果,请替换为:

res = scipy.signal.fftconvolve(f100, f200j, 'full')

res = f100 * f200j

如果您按以下方式修改绘图功能,则更容易看到结果:

def plot_fft(f, fs):
    FFT = abs(fft(f, 1024)) / f.size
    freq = fftfreq(1024, 1.0/fs)
    ndx = freq.argsort()
    figure()
    plot(freq[ndx], FFT[ndx])
    grid(True)

并添加

from scipy.fftpack import fft, fftfreq

在脚本的顶部。

您会看到,在的FFT图中的-8000和8000处的峰在的FFT图f100中移至-7000和9000 res

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

意外的卷积结果

来自分类Dev

卷积运算的意外结果

来自分类Dev

tensorflow 卷积结果到 numpy

来自分类Dev

用NumPy对对称数组进行卷积:为什么将结果移位?

来自分类Dev

numpy any()的意外结果

来自分类Dev

Python:使用Numpy进行简单的数组操作

来自分类Dev

使用VHDL对信号进行卷积

来自分类Dev

使用 Keras 进行特征卷积

来自分类Dev

使用.loc进行分配的Pandas Dataframe产生意外结果

来自分类Dev

使用ProcessPoolExcecutor进行多处理会产生意外结果

来自分类Dev

使用Python和Numpy将RGB图像与custon neighbout内核进行卷积

来自分类Dev

numpy.dot的意外结果

来自分类Dev

使用简单的JSON数组进行Doctrine查询结果

来自分类Dev

使用Eclipse(Java)进行简单算术的奇怪结果

来自分类Dev

使用Rails进行简单搜索-在单独页面上搜索结果

来自分类Dev

kdb简单表联接意外结果

来自分类Dev

使用 Numpy 进行矩阵运算的更简单方法

来自分类Dev

仅使用NumPy的Python图像卷积

来自分类Dev

Python 中使用 Numpy 的卷积层

来自分类Dev

使用偶数大小的内核进行图像卷积

来自分类Dev

使用fft进行系统输出的线性卷积

来自分类Dev

使用keras以零均值进行卷积

来自分类Dev

使用for循环opencv python对图像进行卷积

来自分类Dev

如何使用傅立叶级数进行卷积

来自分类Dev

PHP简单数学结果导致意外结果

来自分类Dev

使用简单程序进行字符串比较的意外打印输出

来自分类Dev

NumPy数组上带有+ =的意外结果

来自分类Dev

numpy random.shuffle的意外结果

来自分类Dev

numpy傅立叶变换产生意外结果