问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

单频正弦波模拟信号PCM二进制折叠编码怎么实现,很急的,拜托高手了

发布网友 发布时间:2022-04-27 11:13

我来回答

1个回答

热心网友 时间:2023-10-06 19:06

这是我写的一个C++实现方案,希望对你有帮助
#include <iostream>
#include <cmath>
using namespace std;

int main(){
const int sect = 8; //将输入输出的范围分为8段.

const int startingVol[sect+1] = {0,16,32,64,128,256,512,1024,2048};
// 每段的起始值

const int quanIntvl[sect] = {1,1,2,4,8,16,32,64};
//将每大段内为16个小段后,依次对应的每个小段之间的间隔
//如64与32之间的大段分为16段,每小段之间的间隔为2

int pcmCode[sect] = {0,0,0,0,0,0,0,0}; // 8位的PCM编码。

int startPoint; //计算量化后的值时使用到的每大段起始值数组的下标

int finePoint; //计算量化后的值时使用到的每小段间隔数组的下标

const double pi=3.14159265358979;

int quanValue; // 最后量化出来得到的值

int quanError; //量化引起的误差

for(double j=0;j<=20;j++) {

int sampleValue = 300*sin((j/10)*pi)+500*sin((j/3)*pi)-400*sin((j/8)*pi); //几个sin函数叠加产生一个虚拟的波形

int pcmInd = 0; //表示第几位编码

int low = 0;

int high = sect;

int mid;

int loopInd1 = 0; //编码第二到第三位所使用的循环次数

int loopInd2 = 0; //编码第四到第八位所使用的循环次数

(sampleValue >= 0) ? (pcmCode[pcmInd] = 0) : (pcmCode[pcmInd] = 1); //获取PCM编码的第一位,即采样值的符号

sampleValue = abs(sampleValue); //将采样值取为其绝对值,以保证后面程序的顺利运行

//其余位编码的获取采用二分搜索
//首先编码第2到第4位
while(loopInd1 < 3) //因为知道输入分为8段,所以设定二分搜索的循环次数为3次即可将第2到第4位编码完成
{
mid = (low + high)/2;

if(sampleValue < startingVol[mid])
{
pcmCode[++pcmInd] = 0;
high = mid;
startPoint = mid - 1 ;

}
else
{
pcmCode[++pcmInd] = 1;
low = mid;
startPoint = mid;
}

loopInd1++;
}

//编码剩下的4位

low = 0;

high = 16; //每段内平均分为16个小段

//仍然使用二分搜索
while(loopInd2 < 4)
{
mid = (low + high)/2;

//在程序运行中显示下列语句来使得编码过程更加直观
quanValue = startingVol[startPoint] + mid * quanIntvl[startPoint];

cout<<startingVol[startPoint]<<" + "<<quanIntvl[startPoint]<<" * "<<mid<<" = "
<<quanValue <<" ? "<<sampleValue<<endl;

if(sampleValue < startingVol[startPoint] + mid * quanIntvl[startPoint])
{
pcmCode[++pcmInd] = 0;
high = mid;
finePoint = mid -1;
}

else if(sampleValue > startingVol[startPoint] + mid * quanIntvl[startPoint])
{
pcmCode[++pcmInd] = 1;
low = mid;
finePoint = mid;
}
else
{
finePoint = mid;
break;
}

loopInd2++;

}

quanValue = startingVol[startPoint] + finePoint * quanIntvl[startPoint];

if((sampleValue-quanValue)>=quanIntvl[startPoint] / 2)
{
quanValue += quanIntvl[startPoint] / 2;
}
else if((quanValue-sampleValue)>=quanIntvl[startPoint] / 2)
{
quanValue -= quanIntvl[startPoint] / 2;
}
//对量化结果进行最后的调整以更加靠近采样值

quanError = abs( sampleValue - quanValue);
cout<<"采样值: "<<sampleValue<<endl;
cout<<"最终值: "<<quanValue<<endl;
cout<<"实际误差: "<<quanError<<endl;
cout<<"PCM编码为: ";

for(int i = 0; i < 8; i++)

{
cout<<pcmCode[i]<<" ";
}

cout<<endl;

}

return 0;
}
单频正弦波模拟信号PCM二进制折叠编码怎么实现,很急的,拜托高手了

(sampleValue &gt;= 0) ? (pcmCode[pcmInd] = 0) : (pcmCode[pcmInd] = 1); //获取PCM编码的第一位,即采样值的符号 sampleValue = abs(sampleValue); //将采样值取为其绝对值,以保证后面程序的顺利运行 //其余位编码的获取采用二分搜索 //首先编码第2到第4位 while(loopInd1 &lt; ...

什么是波分复用(WDM)技术?

波分复用(WDM)技术是一种在光纤通信中广泛应用的技术,它允许在同一根光纤中同时传输多个不同波长的光信号。这些光信号在发送端通过复用器合并,然后在光纤中传输,最后在接收端通过解复用器分离并恢复成原始信号。WDM技术极大地提高了光纤的传输容量,是现代光通信网络扩容的重要手段。通过这项技术,光纤通信系统能够支持更高的数据传输速率和更多的信道,满足日益增长的通信需求。波分复用(WDM)技术是一种在同一光纤中并行传输多个波长的光信号的技术,可以显著提高光纤网络的传输容量和效率。光派通信在波分传输设备领域拥有丰富的产品线和行业经验,能够为客户提供高质量的DWDM、CWDM等波分设备产品和解决方案,满足不同...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
临汾尧庙历史渊源 剑仆契约现在在哪可以玩如何下载 剑与契约手游交易 开封梧桐里售楼热线是多少? 100平水电改造多少钱 我昨天才用MuMu模拟器玩剑仆契约手游的,请问剑仆契约手游的剑仆娘要怎 ... 胶体蓄电池 中国邮政快递员一个月能挣5000-8000是真的吗? 重庆医科大学录取分数线是多少 我昨天才用MuMu模拟器玩剑仆契约手游的,请问剑仆契约手游的剑仆娘要怎 ... PCM的管道检测 pcm格式的文件能删吗,占内存 PCM格式的视频文件怎么播放,或者转换格式 2PCM齿辊式破碎机和2PGC齿辊式破碎机有什么区别? 什么是PCM 目的是什么它分哪几个步骤 摄像机中有一个是线性PCM2声道是什么,是双声道吗 led显示屏维修这个工作怎么样 珠海市前山有修led灯的师傅吗 谁知道珠海LED显示屏厂家,哪家的售后服务比较好? 微软surface pro4怎么切换平板模式 surface怎么退出ipad模式 surface pro 4怎么切换电脑模式 surface book 怎么切换模式? U盘的内存,在电脑里。和实际看到的不一样 扩容U盘如何显示出真实的内存? 怎么看U盘有多大内存? 江苏事业单位考的公基怎么复习? 江苏公务员考试真题看了对考试有用吗? 2016年江苏公务员考试真题及答案下载? 奥特曼打屁股 LPCM与PCM的区别 通信原理pcm的码元速率和带宽 钢材上的pcm怎么念了 pcm 编译码芯片中的用到哪些滤波器?这些滤波器的带宽设置是如何考虑 的 为什么多声道功放上总是显示数字音频输入是2声道的PCM码? 停机了怎么办? 请问停机怎么办理 什么动作有助于长高 15岁 15岁长高? 15岁长高的科学方法是什么? 15岁怎么长高 15岁增高的办法有哪些? 15岁男生在家做些什么锻炼可以快速长高? 木槿花韩式自助烤肉的烤肉好不好吃 木槿花韩式料理怎么样 木槿花韩式自助烤肉在美团怎么下单 木槿花烤肉怎么样 西安的韩国自助烧烤,青瓦台、韩都里、木槿花,哪个更好些? 帮忙给一家韩国烤肉店取名? 帮忙给一家韩国烤肉店取名
  • 焦点

最新推荐

猜你喜欢

热门推荐