草庐IT

方波上的android音频失真

coder 2023-11-18 原文

我发现我的智能手机 (android 4.2.2) 无法生成方波(我需要它使用音频输出作为数据传输的串行线)。 一开始我以为这是我的应用程序,但后来我做了很多重要的测试。这些是最新的测试。我希望你能找到这个现象的解释。

我生成了一个 wav 文件,里面有一个 500Hz 的方波。 我在安卓手机和苹果 iphone 上播放 wav 文件。 我用我的笔记本(连接到笔记本音频输入的音频线)记录和分析信号。

然后我用连接蓝牙收发器设备和笔记本音频输入的音频线重复了测试。智能手机通过蓝牙(一次一个)连接到蓝牙收发器设备。

注意:蓝牙收发设备是通过蓝牙接收音频数据并通过标准音频插孔输出音频的设备。

这是直接连接在音频插孔上的 iPhone 产生的信号:

这是蓝牙设备从 iphone 接收数据时产生的信号:

这是直接连接音频插孔的安卓设备产生的信号:

这是蓝牙设备从安卓智能手机接收数据时产生的信号:

易观分析:

-蓝牙设备引入了信号带宽的削减(在我看来可以接受)。

-iphone 的模拟部分非常好(它输出非常好的方波)

-Android 设备的模拟部分非常糟糕(即使它非常适合音乐播放)

-android 手机发送到蓝牙设备的数据不正确,实际上获取的信号与从iphone 获取的数据不同。

我将智能手机恢复为出厂默认设置,但问题并未解决。 我也尝试安装 kitkat custom rom 但问题仍然存在。 我也尝试过使用 Nexus 5 (android 5) 和 samsung S4 mini (android 4.2.2 就像我的一样),它们就像 iphone。

我怀疑问题与 DTS 工作室声音有关(我尝试禁用它并以不同的方式设置它但没有成功)。 DTS 似乎是我的手机和三星 s4 mini 之间唯一的软件差异。

问题:我可以理解我的安卓设备的模拟部分不如 iphone,我也可以假设我的安卓设备的模拟部分坏了......但我不明白为什么我不当我插入蓝牙收发设备时得到相同的结果。

最佳答案

为什么要使用方波?这是要求吗?方波在数字系统中是有意义的,但作为模拟信号,它具有各种令人讨厌的特性(如果我记得的话,就像无限频谱)。为什么不在手机音频系统设计的人类可听范围内使用两种音调?

有许多信号和调制技术可用于通过模拟或音频 channel 发送数据。您看过以下任何内容吗?

How could you transfer data over an audio line?

Audio Modem: data over sound

Transfering data using audio signal in android

第三个链接描述了使用 Frequency-shift keying在安卓系统中。这看起来是一个非常好的解决方案。 FSK 的维基百科页面包含以下关于音频 FSK 的评论

Audio frequency-shift keying (AFSK) is a modulation technique by which digital data is represented by changes in the frequency (pitch) of an audio tone, yielding an encoded signal suitable for transmission via radio or telephone. Normally, the transmitted audio alternates between two tones: one, the "mark", represents a binary one; the other, the "space", represents a binary zero. ... AFSK has the advantage that encoded signals will pass through AC-coupled links, including most equipment originally designed to carry music or speech.

关于方波上的android音频失真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29778771/

有关方波上的android音频失真的更多相关文章

  1. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  2. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  3. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  4. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  5. ruby-on-rails - Ruby - 如何从 ruby​​ 上的 .pfx 文件中提取公钥、rsa 私钥和 CA key - 2

    我有一个.pfx格式的证书,我需要使用ruby​​提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o

  6. 带有 attr_accessor 的类上的 Ruby instance_eval - 2

    我了解instance_eval和class_eval之间的基本区别。我在玩弄时发现的是一些涉及attr_accessor的奇怪东西。这是一个例子:A=Class.newA.class_eval{attr_accessor:x}a=A.newa.x="x"a.x=>"x"#...expectedA.instance_eval{attr_accessor:y}A.y="y"=>NoMethodError:undefinedmethod`y='forA:Classa.y="y"=>"y"#WHATTT?这是怎么回事:instance_eval没有访问我们的A类(对象)然后它实际上将它添加到

  7. ruby-on-rails - rails 上的 ruby : radio buttons for collection select - 2

    我有一个集合选择:此方法的单选按钮是什么?谢谢 最佳答案 Rails3中没有这样的助手。在Rails4中,它是collection_radio_buttons. 关于ruby-on-rails-rails上的ruby:radiobuttonsforcollectionselect,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/18525986/

  8. ruby - 将命令行上的变量传递给 Cucumber 测试 - 2

    我正在尝试将cucumber项目的用户名和密码置于版本控制之外。有没有办法在命令行上手动将用户名和密码等变量传递给Cucumber脚本?我的备份计划是将它们放在一个YML文件中,然后将该文件添加到gitignore,这样它们就不会被置于版本控制中。 最佳答案 所以,我看到了您对铁皮人的评论,答案是肯定的。cucumberPASSWORD=my_passwordPASSWORD被设置为环境变量,您可以通过将其引用为ENV['PASSWORD']来使用它的值。例如,browser.text_field(:id=>'pwd').setEN

  9. ruby - 将哈希值保存到 Ruby 上的文件 - 2

    我刚刚迈出了编程的第一步。我刚刚完成了CodeAcademy的另一门类(class)。这次我被要求创建一个小电影目录。这是我的问题:如何在文件中保存/加载带有电影标题和评级的哈希值而不是自己的代码?下面是代码现在的样子(几句葡萄牙语,但您可以忽略它:movies={Memento:3,Primer:4,Ishtar:1}puts"Oquevocêgostariadefazer?"puts"--Digite'add'paraadicionarumfilme."puts"--Digite'update'paraatualizarumfilme."puts"--Digite'display'

  10. ruby - 在 RUBY 上的 PADRINO 框架上使用 RSPEC 进行测试的教程 - 2

    我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa

随机推荐