我一直在做一个通过声波发送数据的项目。我实现这一点的方法是在频域中对数据进行脉冲编码,然后创建一个包含该信息的独特声波。我已经使用python绘制了它,这给了我:
import scipy as sp
import math
import numpy as np
from scipy import signal
from scipy import fft
import matplotlib.pyplot as plt
paynowString = "00020101021126380009SG.PAYNOW010100211+658128992803010520400005303702545800.005802SG59006009Singapore620401006304"
characters = []
def split(word):
return [char for char in word]
characters = split(paynowString)
print(characters)
ascii_characters = [ord(char) for char in characters]
print(ascii_characters)
positive_x_domain = np.zeros(9*len(ascii_characters))
rhs = []
xr = list(positive_x_domain)
for i in range(len(ascii_characters)):
rhs = rhs + xr[i*9:(i*9+9)]+[ascii_characters[i]]
positive_x_domain = rhs + xr[(i+9)*9:]
positive_x_domain = np.asarray(positive_x_domain)
print(positive_x_domain)
negative_x_domain = np.flip(positive_x_domain)
print(negative_x_domain)
origin = np.array([0])
x_domain = np.concatenate((negative_x_domain, origin), axis = None)
x_domain = np.concatenate((x_domain, positive_x_domain), axis = None)
print(x_domain)
plt.plot(np.arange((-(len(x_domain)-1)/2), ((len(x_domain)-1)/2)+1), x_domain)
plt.margins(0.1, 0.1)
plt.xlabel('Time [samples]')
plt.ylabel('Amplitude')
plt.grid(True)
plt.show()在此之后,这给出了一个表示频域的图:

然后,我将傅立叶变换应用于频率图,以获得:
sound_wave = fft.ifft(x_domain)
plt.plot((-(len(x_domain)-1)/2), (((len(x_domain)-1)/2)+1), sound_wave)
plt.margins(0.1, 0.1)
plt.xlabel('Time [samples]')
plt.ylabel('Amplitude')
plt.axis([-0.1, 2500, -0.1, 1])
plt.grid(True)
plt.show()
#end of sending the sound wave这给了我另一个表示声波的图表:

然而,我试图得到一个周期性的声波,我无法从这张图中得到它。根据我的理解,如果正负频率在y轴上反射,即在频域的正、负x轴上的脉冲大小相同,那么傅立叶变换后产生的声波就是周期性的。
是我的理解有问题,还是我的代码有问题?如果是这样,我如何才能确保由傅立叶逆变换产生的声波是周期性的,并且是可播放的?谢谢!
发布于 2021-08-01 09:44:11
我希望你知道,FFT(快速傅立叶变换)和FT(傅立叶变换)在算法上有一些不同的东西。这意味着,FFT没有像FT那样扩展算法。您可以在链接中查看详细信息:https://en.wikipedia.org/wiki/Fourier_transform
也许我应该逐一解释一下。您的声音(模拟数据)从麦克风(转换为数字数据)。然后,您需要使用FFT和IFT来消除噪声。但您应该这样做,您应该对数据应用低、高、低-高或其他过滤器。
如果您获得对称模拟数据并对数据应用滤波器,则它们应该是相同的。
https://stackoverflow.com/questions/68608497
复制相似问题