Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >清理产生的正弦伪影以实现平滑的频率转换

清理产生的正弦伪影以实现平滑的频率转换
EN

Stack Overflow用户
提问于 2022-04-18 00:35:32
回答 1查看 77关注 0票数 2

我是一个蟒蛇初学者,作为一个学习项目,我正在使用Wraase SC2-120方法做一个SSTV编码器。

对于那些不知道的人来说,SSTV是一种将图像作为声音通过无线电发送,并在接收端解码回图像的技术。Wraase SC2-120是多种编码方式之一,但它是支持颜色的更简单的编码方式之一。

我已经能够创建一个接收图像并将其转换为数组的系统。然后,获取该数组并为编码器所需的亮度和色度创建所需的值。

然后,我使用这个块为该方法创建一个1500 the 2300hz之间的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 def ChrominanceAsHertz(value=0.0):
    value = 800 * value
    value -= value % 128 # Test. Results were promising but too much noise
    value += 1500
    return int(value)

你可以忽略模数运算。这只是我玩数据“有趣”和实验的方式。

然后,我清理音频,以避免在同一个数组中有太多相同的值,并将它们的持续时间相加,以获得更清晰的声音。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cleanTone = []
cleanDuration = []

for i in range(len(hertzData)-1):
    # If the next tone is not the same
    # Add it to the cleantone array
    # with it's initial duration
    if hertzData[i] != hertzData[i+1]:
        cleanTone.append(hertzData[i])
        cleanDuration.append(durationData[i])
    # else add the duration of the current hertz to the clean duration array
    else:
        # the current duration is the last inserted duration
        currentDur = cleanDuration[len(cleanDuration)-1]
        # Add the new duration to the current duration
        currentDur += durationData[i]
        cleanDuration[len(cleanDuration)-1] = currentDur

我的数组处理可以使用一些工作,但这不是我现在在这里的原因。

结果是一个数组,其中没有连续的值是相同的,并且该音调的持续时间仍然是正确的。

然后使用这个块创建一个sinewave数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
audio = []
for i in range(len(cleanTone)):   
    sineAudio = AudioGen.SineWave(cleanTone[i], cleanDuration[i]) 
    for sine in sineAudio:
        audio.append(sine)

正弦波函数是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   def SineWave( freq=440, durationMS = 500, sample_rate = 44100.0 ):
    num_samples = durationMS * (sample_rate / 1000)
    audio = []
    for i in range(int(num_samples)):
        audio.insert(i, np.sin(2 * np.pi * freq * (i / sample_rate)))
    return audio

它的工作原理是预期的。它为我想要的频率和我想要的持续时间创造了一个正弦波。

问题是,当我创建.wav文件时,使用wave创建的正弦波并不能顺利转换。

我的意思是特写的截图。正弦波伪影

音频文件有这些巨大的尖叫和裂缝,因为这些工件,上面的方法产生,看它如何采取一个单一的频率和持续时间,而不考虑最后的音调结束,并开始一个新的。

我试图纠正这些问题的方法是重构这个SineWave方法,将整个数组作为一个数组,然后直接创建一个又一个的正弦波,希望得到一个干净的声音,但它仍然做了同样的事情。

我还尝试了“平滑”生成的音频数组,然后使用了来自这个职位的简单过滤操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 0.7 * audio[1:-1] + 0.15 * ( audio[2:] + audio[:-2] )

但结果再次令人不满意,器物仍然存在。

我也开始研究傅立叶变换,主要是FFT (快速傅立叶变换),但我对它们还不太熟悉,我还不知道我到底想做什么和编写代码。

为了使SSTV工作,频率的变化有时必须非常快。准确地说,0.3ms速度很快,所以我有点不知道如何做到这一点,而不会在这个过程中丢失太多的数据。

我的正弦波功能是在音调变化之间产生伪影,引起划痕和不需要的pops。怎么才能不这么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-18 08:23:08

你需要从一个波段转移到下一个波段。你必须从你结束前一阶段的阶段开始下一波。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def SineWave( freq=440, durationMS = 500, phase = 0, sample_rate = 44100.0):
    num_samples = int(durationMS * (sample_rate / 1000))
    audio = []

    for i in range(num_samples):
        audio.insert(i, np.sin(2 * np.pi * freq * (i / sample_rate) + phase))

    phase = (phase + 2 * np.pi * freq * (num_samples / sample_rate)) % (2 * np.pi)
    return audio, phase

在您的主循环中,从一个波段到另一个波段通过这个阶段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
audio = []
phase = 0

for i in range(len(cleanTone)):   
    sineAudio, phase = AudioGen.SineWave(cleanTone[i], cleanDuration[i], phase)
    for sine in sineAudio:
        audio.append(sine)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71909443

复制
相关文章
Arcgis中图像裁剪
使用arcmap对数据进行剪裁,Arcgis中的裁剪分为很多种,有矢量裁剪矢量,矢量裁剪栅格,栅格裁剪栅格。本文主要操作,掩膜裁剪(矢量裁剪栅格)和clip 裁剪。
Twcat_tree
2023/01/18
2.4K0
在 React 中缩放、裁剪和缩放图像
在本文中,我们将了解如何使用 Cropper.js 在 React Web 应用中裁剪图像。尽管我们不会将这些图像上传到远程服务器进行存储,但是很容易就能完成这个任务。
疯狂的技术宅
2020/02/26
6.4K0
在 React 中缩放、裁剪和缩放图像
CSS 3.0中裁剪图像的特效
在有CSS 3.0之前裁剪图片实现也是颇有难度的,现在我们有了两个非常方便简单的属性可以实现裁剪,那就是object-fit和object-position,这两个属性可以让我们改变图片的大小,但是不影响图片的长宽比,利用它我们可以实现一个如下的特效。
越陌度阡
2020/11/26
1.1K0
CSS 3.0中裁剪图像的特效
用Vue.js在浏览器中裁剪图像[每日前端夜话0x86]
Cropping Images In The Browser With Vue.js
疯狂的技术宅
2019/06/20
4.2K0
用Vue.js在浏览器中裁剪图像[每日前端夜话0x86]
图像裁剪
PNG (460, 460) RGB {'srgb': 0, 'gamma': 0.45455, 'dpi': (96, 96)} None
裴来凡
2022/05/29
1.7K0
图像裁剪
使用pycaffe解析mean.binaryproto中的均值图像并显示
用Caffe框架训练图像相关的视觉任务时候,在预处理的时候会先求图像的均值,这个均值其实是整个数据集的图像均值,Caffe中提供了一个工具来计算数据集的均值,该工具就是compute_image_mean,只要调用一下,就会生成一个mean.binaryproto文件。
OpenCV学堂
2020/05/13
1.9K0
图像随机裁剪
算法:图像随机裁剪是从1张图像随机裁剪200张图像,裁剪出图像的大小为 60x60,IoU大于等于th=0.5的裁剪框用红色标出,其它裁剪框用蓝色标出,IoU比对原始区域用绿框标出。
裴来凡
2022/05/29
1.5K0
图像随机裁剪
图像任意裁剪
算法:图像任意裁剪是将图像裁剪成若干任意大小图像。 文献:LHL, 李红林. (2011). 基于投影法实现矩形窗口的任意曲线裁剪 random clipping of curves in rectangular windows based on the projection method. 云南民族大学学报:自然科学版, 20(2). Kurtz, B. D. , & Claiborne, S. J. . (1999). Efficient method for clipping numerous objects against an arbitrary clipping path. US. 链接:https://www.gaitubao.com/
裴来凡
2022/05/29
2.1K0
图像任意裁剪
OpenCV中图像的读取,显示与保存
相关函数:cv2.imread()、cv2.imshow()、cv2.imwrite()
py3study
2020/01/19
2.9K0
图像主体裁剪
import cv2 import numpy as np image=cv2.imread('C:/Users/xpp/Desktop/Lena.png') img=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) ret,thresh=cv2.threshold(img,230,255,cv2.THRESH_BINARY_INV) contours,hierarchy=cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_
裴来凡
2022/05/29
1.3K0
图像主体裁剪
几何变换--图像裁剪
几何变换包括:缩放、旋转、平移等。这些变换一般用于校正图像处理引起的空间失真,或者通过将图像配准到一个预定义的坐标系统中用于规范化该图像(例如,将一幅航拍图像配准到一个特定的地图投影中,或者在立体视觉中对两幅互相配对的图像进行整形,使得行与外极限)。
FPGA开源工作室
2019/10/29
1.6K0
几何变换--图像裁剪
图像处理在工程中的应用
传感器 图像处理在工程和科研中都具有广泛的应用,例如:图像处理是机器视觉的基础,能够提高人机交互的效率,扩宽机器人的使用范围;在科研方面,相关学者把图像处理与分子动力学相结合,实现了多晶材料、梯度结构等裂纹扩展路径的预测,具体见深度学习在断裂力学中的应用,以此为契机,偷偷学习一波图像处理相关的技术,近期终于完成了相关程序的调试,还是很不错的,😄~ 程序主要的功能如下:1、通过程序控制摄像头进行手势图像的采集;2、对卷积网络进行训练,得到最优模型参数;3、对采集到的手势进行判断,具体如下图所示: 附:
联远智维
2022/01/20
2.3K0
图像处理在工程中的应用
使用opencv读入并显示一幅彩色图像,灰度化并显示,用canny算子得到图像边缘并显示
要求步骤: 1.读入彩色图像,并显示; 2.将彩色图像灰度化,并显示; 3将灰度图像,用Canny边缘算子得到图像边缘,并显示。
川川菜鸟
2021/10/18
1.2K0
python图像处理-图片裁剪
本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地方也欢迎指出,在此先行谢过。
叶子陪你玩
2020/03/12
1.7K0
vb中adodc连接sql(如何用vb打印Access数据)
本文实例讲述了使用ADODB.Connection连接access数据库的方法,驱动类型版本为:Microsoft.Jet.OLEDB.4.0。在VB的数据库操作中,连接数据库是第一步,也是最基本的,本文所述的这个例子,对于初学者学习如何在VB中连接Access数据库有着很好的借鉴参考价值。
全栈程序员站长
2022/08/01
2.1K0
jQuery 图像裁剪插件Jcrop
Jcrop简介 Jcrop 是一个功能强大的 jQuery 图像裁剪插件,结合后端程序(例如:PHP)可以快速的实现图片裁剪的功能。 Jcrop是一款免费的软件,采用MIT License发布。
静默虚空
2018/01/05
1.8K0
jQuery 图像裁剪插件Jcrop
PHP 图像居中裁剪函数
使用方法:image_center_crop(source, width, height, target);
用户8099761
2023/05/11
1.5K0
在图像的傅里叶变换中,什么是基本图像_傅立叶变换
大家好,又见面了,我是你们的朋友全栈君。 从现代数学的眼光来看,傅里叶变换是一种特殊的积分变换。它能将满足一定条件的某个函数表示成正弦基函数的线性组合或者积分。在不同的研究领域,傅里叶变换具有多种不同的变体形式,如连续傅里叶变换和离散傅里叶变换。 傅立叶变换属于调和分析的内容。”分析”二字,可以解释为深入的研究。从字面上来看,”分析”二字,实际就是”条分缕析”而已。它通过对函数的”条分缕析”来达到对复杂函数的深入理解和研究。从哲学上看,”分析主义”和”还原主义”,就是要通过对事物内部适当的分析达到增进对其本质理解的目的。比如近代原子论试图把世界上所有物质的本源分析为原子,而原子不过数百种而已,相对物质世界的无限丰富,这种分析和分类无疑为认识事物的各种性质提供了很好的手段。 在数学领域,也是这样,尽管最初傅立叶分析是作为热过程的解析分析的工具,但是其思想方法仍然具有典型的还原论和分析主义的特征。”任意”的函数通过一定的分解,都能够表示为正弦函数的线性组合的形式,而正弦函数在物理上是被充分研究而相对简单的函数类,这一想法跟化学上的原子论想法何其相似!奇妙的是,现代数学发现傅立叶变换具有非常好的性质,使得它如此的好用和有用,让人不得不感叹造物的神奇: 1. 傅立叶变换是线性算子,若赋予适当的范数,它还是酉算子; 2. 傅立叶变换的逆变换容易求出,而且形式与正变换非常类似; 3. 正弦基函数是微分运算的本征函数,从而使得线性微分方程的求解可以转化为常系数的代数方程的求解.在线性时不变的物理系统内,频率是个不变的性质,从而系统对于复杂激励的响应可以通过组合其对不同频率正弦信号的响应来获取; 4. 著名的卷积定理指出:傅立叶变换可以化复杂的卷积运算为简单的乘积运算,从而提供了计算卷积的一种简单手段; 5. 离散形式的傅立叶变换可以利用数字计算机快速的算出(其算法称为快速傅立叶变换算法(FFT)). 正是由于上述的良好性质,傅里叶变换在物理学、数论、组合数学、信号处理、概率、统计、密码学、声学、光学等领域都有着广泛的应用。 傅立叶变换在图像处理中有非常非常的作用
全栈程序员站长
2022/09/27
1.5K0
点击加载更多

相似问题

在LazyList中显示之前的裁剪图像

115

我想在Access列中显示图像,但无法访问

10

我想在容器的装饰图像中显示图像

28

OpenCV裁剪图像并显示去除裁剪的原始图像

12

我想在图像加载之前在ios中显示活动指示器。

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文