導航:首頁 > 文檔加密 > vc5509語音加密編碼

vc5509語音加密編碼

發布時間:2022-10-06 03:24:27

A. 說明TMS320 VC 5509A的MMC介面和USB介面,主要應用在哪些方面

按照DSP常識介紹、開發環境、內部寄存器、外設、開發實例的順序展開。並按照DSP系統設計的一般流程,以一個音頻處理DSP系統為例,從原理圖

B. CCS8.0中沒有TMS320VC5509A可以用TMS320C5509A代替嗎

①、關於以上這【CCS8.0中沒有TMS320VC5509A可以用TMS320C5509A代替嗎】?

②、向上述兩款數字信號處理器因型號的不同,建議還是別代替了,原因是,兩款處理器型號不同的話,內部的信號程序處理和引腳功能可能略有不同,所以一定要查好兩款晶元的背景資料後,對比一下就明白了。僅供參考

C. 單片機對講機原理

方案一 以單片機為核心處理器的DMR對講機方案(MSP430F149+AMBE1000)
1.工作原理
發射時,由麥克送來的模擬語音經CSP1027進行A/D轉換,由聲碼器AMBE1000進行語音壓縮,交單片機MSP430F149進行協議填充組幀,送到CC1101進行調制後發射。接收時,由CC1101解調出來的碼流經MSP430F149進行幀恢復,交由聲碼器進行解壓,數據經CSP1027進行D/A轉換為模擬語音信號。
2.關鍵器件
微控制器採用TI公司的MSP430F149,它是16位超低功耗、混合信號微控制器,採用「馮·諾依曼」結構,可用JTAG(一種標准測試介面)進行模擬調試。
晶元的電源電壓為(1.8~3.6)V,在RAM數據保持方式下耗電僅0.1uA,活動模式耗電250 uA/MIPS(每秒百萬條指令數)。運算時由於本單片機採用16位RISC(精簡指令集計算機),一個時鍾周期可以執行一條指令,而傳統的單片機要12個時鍾周期才執行一條指令。工作在8MHz的晶振頻率時,指令速度可達8MIPS,而同樣這個指令速度,16位處理器比8位處理器高遠不止兩倍。
概述
聲碼器AMBE1000在國內已有產品,價格比較合理。CC1101的靈敏度為-116dBm(1.2kbps,1%數據包誤碼率,工作在433MHz時),與國內的對講機可用靈敏度-120dBm相比偏低,但符合歐盟的CE標准規定小於-107dBm.另外,射頻模塊的功率輸出僅12dBm(16mW),所以本方案僅適用短距離范圍的通信。提高靈敏度可考慮用器件ADF7021作為射頻模塊。
方案二 以DSP+MCU為核心處理器的對講機方案
1.工作原理
方案以MSP430為中心系統來完成數據的收、發控制等工作,系統採用MSP430中 USART模塊的SPI同步通信模式。在接收過程中,首先接收來自射頻晶元的FSK數據,解調後由MSP430將數據幀的同步域、尾域、ID域以及命令位元組去除後,數據發至C5402進行去壓縮處理,數據交AIC23進行D/A轉換為語音信號。在發送過程中,首先由AIC23進行A/D轉換,數據交C5402將語音壓縮,再由微控制器MSP430進行協議填充,加上頭域、尾域、ID域以及命令位元組形成數據幀,然後控制射頻模塊將數據發送。
2.關鍵器件
TMS320C5402是TI公司於1996年推出的一種定點DSP晶元,採用先進的修正哈佛結構和8匯流排結構,使處理器的性能大大提高。其獨立的程序和數據匯流排允許同時訪問程序存儲器和數據存儲器,實現高速並行操作。如,可以在一條指令中同時執行3次讀操作和1次寫操作。TMS320C5402的運行速度為40MIPS,指令周期為25ns.此外,還可以在數據匯流排與程序匯流排之間相互傳送數據。從而使處理器具有單個周期內同時執行算術運算、邏輯運算、位移操作、乘法累加運算以及訪問程序、數據存儲等強大功能。
概述
採用DSP方案時,免去選用語音晶元聲碼器的煩惱,提高了數字對講機對語音處理的能力,可讓語音編碼的演算法盡量優化,從而使對講機語音信號的處理更具通用性和擴展性。本方案是以DSP為開發平台,經過連續可變斜率增量(CVSD)調制編解碼得到語音信號的清晰度和自然度好,但軟體開發工作量大。CC1000不支持4FSK調制與解調,本方案不適用於DMR與dPMR協議。另外CC1000的接收可用靈敏度為-110dBm,國內對講機廠家可能嫌低。
方案三 以單片機為核心處理器的dPMR對講機方案(CMX618+CMX7141)
1.工作原理
發射時,麥克送來的模擬語音經CMX618內部進行增益調節,A/D轉換和壓縮處理,然後通過SPI(串列外圍設備介面)進入CMX7141基帶處理器,在微控制器LPC2138的控制和管理下經CMX7141晶元內部進行信道編碼,dPMR協議棧打包,數字濾波以及4FSK調制,調制編碼後的語音數據經CMX7141晶元的MOD1/2管腳分別輸出給外部的發射VCO和壓控溫補參考時鍾,經兩點調制輸出射頻載波給發射功放,並到天線輸出。
接收時,CMX7141對基於超外差射頻接收模塊送來的4FSK解調信號在微控制器LPC2138的控制和管理下進行4FSK解調,dPMR拆包,信道解碼,最終得到語音編碼數據,經SPI串口送給CMX618進行語音解壓縮並恢復語音信號。
2.關鍵器件
語音編解碼片CMX618是CML微電子(新加坡)私人有限公司的產品,晶元由音頻壓縮/解壓器、RALCWI編解碼器、前向糾錯編解碼器和其他特殊功能模塊幾部分組成。
RALCWI是一種魯棒的先進的復雜性波形插入技術,與其他語音編解碼技術不同,它使用獨有的信號分解和參數編碼方法,可確保在較高的壓縮率下有較好的語音質量。
在聲碼器中,採用RALCWI技術實現的語音質量與編碼速率在4kbps以上的標准聲碼器話音質量相當。
概述
本方案優點是開發時的靈活性高,模擬與數字可雙模設計,且同一個硬體開發平台能滿足不同的數字對講機標准,支持多種語音聲碼器,射頻的接收靈敏度可做得較高達到-118dBm(誤碼率為1%時)。發射功率0.5W,功率容易提升。
缺點是前期的軟體開發成本高並有一定難度,射頻模塊ATB010隻支持dPMR的EN301,166標准,不支持DMR.
方案四 以MCU+DSP的DMR對講機方案(MSP430FG4619+VC5510)
1.工作原理
發射時,由麥克送來的模擬語音經模數轉換器AD73311采樣成數字信號,AMBE2000對語音數字信號進行壓縮編碼,數字信號由VC5510進行DMR通信協議填充組成幀信號和4FSK的調頻波成形,最後由微控制器MCU進行D/A轉換,送往射頻模塊進行發射調制,實現發射。
接收時,MCU將射頻模塊送來已解調數據進行A/D轉換,經VC5510進行拆幀,交AMBE2000進行解壓,數據由AD73311數模轉換為語音信號。
微控制器MSP430FG4619是整個系統的控制中心,人機介面如鍵盤、顯示器與MCU直接連接。微控制器實現對射頻模塊的控制,包括基帶信號的發送與接收、射頻頻率點的控制、信道檢測等,MCU還負責DMR協議的高層信令控制、人機介面的互通等。
另外,請注意微控制器還要完成基帶信號的AD/DA轉換功能。
2.關鍵器件
AMBE2000TM聲碼器是美國語音公司DVSI推出的一款適應性強、高性能、單晶元的語音壓縮編解碼器。它能在低速率下提供優良的語音質量,並實現了實時的、全雙工的標准設定的AMBE語音壓縮軟體演算法。
大量的評估顯示,這款聲碼器具有在一般數據速率下提供同數字蜂窩系統一樣性能的能力。AMBE在2.4kbps速率下保持自然語音質量和清晰度,由於AMBE演算法復雜性低,所以它能夠完全集成在成本低、功耗低的晶元上。
概述
方案簡單,實用。
軟體開發中,微控制器和數字處理器的程序對DMR協議的分層必須有清晰的概念,正確的程序設計是硬體實現的保證。聲碼器的選用有較大的餘地。
方案五 以ARM+DSP的DMR對講機方案
1.工作原理
發射時,由麥克送來的話音信號由數模轉換器AD73311進行采樣,數據由聲碼器進行壓縮,OMAP5910內的DSP與ARM對壓縮的數據進行協議添加與控制,形成4FSK波形,數模轉換器AIC23將4FSK數字波形模擬化後進行射頻調制,調頻載波由天線發射。
接收時,射頻模塊對接收的模擬信號進行解調,模擬信號交AIC23進行數字化處理,OMAP5910對接收到的數據進行信道解碼和拆幀,幀信號交聲碼器進行解壓,數據由AD73311還原為模擬語音信號。
2.關鍵器件
OMAP5910是一款嵌入式雙核處理器,它集成了高性能的ARM925、TMS320C55x DSP核和已經得到的廣泛應用的各種介面與外設,具有較強的處理能力、較低的功耗和較高的信價比。ARM處理器內核用於DMR協議的處理與系統控制,DSP內核用於完成數字信號的實時處理。
OMAP5910及其設計套件具有多個目標應用市場,提供多媒體功能、改善人機界面並延長電池壽命。
概述
從技術上講,雙核處理器方案與前面介紹的DSP+MCU相比,可以降低系統體積,減少電路的復雜性,對通信協議能作較好的兼容,升級空間大。聲碼器的應用有可選國產晶元的餘地。
缺點是前期的軟體開發工作量大,ARM與DSP間的協調工作要深入研究,以免浪費處理器的資源。此外,由於OMAP的功能十分強大,該平台還可以有更多的應用,如加入視頻、娛樂等功能。
方案六
1.工作原理
發射時,麥克送來的模擬語音經WM8758B進行A/D轉換,送到SCT3252進行壓縮處理,經SCT3252進行dPMR協議處理後送到WM8758B的D/A轉換單元調製成4FSK信號,經兩點調制輸出射頻載波給發射功放,送天線輸出。
接收時,WM8758B對射頻模擬信號進行A/D轉換,送到SCT3252進行4FSK解調,dPMR拆包,信道解碼,最終得到語音編碼數據,經解碼處理後把語音數據送到WM8758B進行D/A轉換,經由外部放大電路送入喇叭還原成話音。
2.關鍵器件
SCT3252是上海士康公司生產的語音編解碼及dPMR協議棧處理晶元。具有較好的語音質量及較高的接收靈敏度(可達-126dBm)。
概述
本方案的特點是語音編解碼及dPMR協議棧都集成在SCT3252中,大大減少了控制單元MCU的工作量,另外SCT3252為LQFP100封裝,焊接方便。整個方案簡單,軟體升級的空間大。本方案可以實現數模兼容,通過開關可方便進行數字與模擬通信之間的切換。
WM8758B只起模數轉換作用,廠家認為,把它集成進SCT3252是指日可待的事。

D. 跪求一個VC++編寫的文件夾加密軟體代碼(要完整代碼 o(∩_∩)o...)

// AesCodeDlg.cpp : implementation file
//

#include "stdafx.h"
#include "AesCode.h"
#include "AesCodeDlg.h"

#include "Aes.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA

// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAesCodeDlg dialog

CAesCodeDlg::CAesCodeDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAesCodeDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CAesCodeDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CAesCodeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAesCodeDlg)
DDX_Control(pDX, IDC_EnDeProg, m_prog);
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAesCodeDlg, CDialog)
//{{AFX_MSG_MAP(CAesCodeDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BAesEn, OnBAesEn)
ON_BN_CLICKED(IDC_BAesDe, OnBAesDe)
ON_BN_CLICKED(IDC_BFile, OnBFile)
ON_BN_CLICKED(IDC_BFileEn, OnBFileEn)
ON_BN_CLICKED(IDC_BFileDe, OnBFileDe)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAesCodeDlg message handlers

BOOL CAesCodeDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here
SetDlgItemText(IDC_EAesEn,"0123456789abcdef");
EnDe_filename="";
m_prog.SetRange(0,100);
m_prog.SetPos(0);
return TRUE; // return TRUE unless you set the focus to a control
}

void CAesCodeDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.

void CAesCodeDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}

// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CAesCodeDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
////////////////////////////////////////////////////////////////////////////////////////////////
//Aes字元串加密
void CAesCodeDlg::OnBAesEn()
{
// TODO: Add your control notification handler code here
unsigned char inBuff[25],ouBuff[25];
memset(inBuff,0,25);
memset(ouBuff,0,25);

Aes aes(24,(unsigned char*)"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf\x10\x11\x12\x13\x14\x15\x16\x17");

GetDlgItemText(IDC_EAesEn,(char*)inBuff,24);
if(strlen((char*)inBuff)>16)MessageBox("本例只能加密16位元組的字元串,大於截斷");

aes.Cipher(inBuff,ouBuff); //因為輸出為16個位元組,每個位元組用兩個字母或數字表示。
CString str="",strTmp; //實際輸出是32個字母或數字,否則ASCII碼值超出127的會變成亂碼。
for(int i=0;i<16;i++)
{
strTmp.Format("%02x",ouBuff[i]); //其實相當於把ouBuff的ASCII值這個數字以16進制的形式輸出
str+=strTmp;
}
//MessageBox(str,"加密後");
SetDlgItemText(IDC_EAesEn,str);
}
////////////////////////////////////////////////////////////////////////////////////////////////
//Aes字元串解密
void CAesCodeDlg::OnBAesDe()
{
// TODO: Add your control notification handler code here
unsigned char inBuff[33],ouBuff[25]; //還是要注意32個字元的字元串需要用33個位元組來存儲,
//因為有個結束符,太惡心了
memset(inBuff,0,32);
memset(ouBuff,0,25);

Aes aes(24,(unsigned char*)"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf\x10\x11\x12\x13\x14\x15\x16\x17");
GetDlgItemText(IDC_EAesEn,(char*)inBuff,33);
unsigned char temp[25];
for(int j=0;j<16;j++)
{
temp[j]=char2num(inBuff[2*j])*16+char2num(inBuff[2*j+1]);// 將字元字面表示的16進制ASCII碼值轉換成真正的ASCII碼值
}

aes.InvCipher(temp,ouBuff);//"dda97ca4......ec0d7191"

SetDlgItemText(IDC_EAesDe,CString(ouBuff));
}

////////////////////////////////////////////////////////////////////////////////////////////////
//字元ASCII碼值到字元字面值的轉換 如 '0'轉換成0, 'a'轉換成10
int CAesCodeDlg::char2num(char ch)
{
if(ch>='0'&&ch<='9')return ch-'0';
else if(ch>='a'&&ch<='f')return ch-'a'+10;
return -1;
}
////////////////////////////////////////////////////////////////////////////////////////////////
//文件選擇框
void CAesCodeDlg::OnBFile()
{
// TODO: Add your control notification handler code here
CFileDialog fdlg(1,NULL,NULL,OFN_HIDEREADONLY ,"All Files(*.*)|*.*||");
if(IDOK!=fdlg.DoModal())return;
EnDe_filename=fdlg.GetPathName();
SetDlgItemText(IDC_EFile,EnDe_filename);
}
////////////////////////////////////////////////////////////////////////////////////////////////
//Aes文件加密
void CAesCodeDlg::OnBFileEn()
{
// TODO: Add your control notification handler code here
if(EnDe_filename=="")return;
FILE* finput;
FILE* foutput;
finput=fopen((LPCTSTR)EnDe_filename,"rb");
if(!finput)
{
MessageBox("文件打開錯誤","出錯",MB_OK);
return;
}
fseek(finput,0,SEEK_END);
long lFileLen=ftell(finput); //ftell()函數返迴文件位置指示符的當前值,即如果現在是在文件結尾,則這個值就是文件長度
fseek(finput,0,SEEK_SET);
long blocknum=lFileLen/16;
long leftnum=lFileLen%16;
EnDe_filename+=".en";
foutput=fopen((LPCTSTR)EnDe_filename,"wb");
if(!foutput)
{
MessageBox("文件打開錯誤","出錯",MB_OK);
fclose(finput);
return;
}
unsigned char inBuff[25],ouBuff[25];
Aes aes(16,(unsigned char*)"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf");
for(long i=0;i<blocknum;i++)
{
fread(inBuff,1,16,finput); //讀取16個對象,每個對象的長度是1位元組
aes.Cipher(inBuff,ouBuff);
fwrite(ouBuff,1,16,foutput);
m_prog.SetPos(int(100*i/blocknum)); //加密進度條進度設置
}
if(leftnum)
{
memset(inBuff,0,16);
fread(inBuff,1,leftnum,finput);
aes.Cipher(inBuff,ouBuff);
fwrite(ouBuff,1,16,foutput);
}
fclose(finput);
fclose(foutput);
MessageBox("加密成功!");
SetDlgItemText(IDC_EFile,EnDe_filename);
m_prog.SetPos(0);
}
////////////////////////////////////////////////////////////////////////////////////////////////
//Aes文件解密
void CAesCodeDlg::OnBFileDe()
{
// TODO: Add your control notification handler code here
if(EnDe_filename=="")return;
FILE* finput;
FILE* foutput;
finput=fopen((LPCTSTR)EnDe_filename,"rb");
if(!finput)
{
MessageBox("文件打開錯誤","出錯",MB_OK);
return;
}
fseek(finput,0,SEEK_END);
long lFileLen=ftell(finput); //ftell()函數返迴文件位置指示符的當前值,即如果現在是在文件結尾,則這個值就是文件長度
fseek(finput,0,SEEK_SET);
long blocknum=lFileLen/16;
long leftnum=lFileLen%16;
EnDe_filename+=".de";
foutput=fopen((LPCTSTR)EnDe_filename,"wb");
if(!foutput)
{
MessageBox("文件打開錯誤","出錯",MB_OK);
fclose(finput);
return;
}
unsigned char inBuff[25],ouBuff[25];
Aes aes(16,(unsigned char*)"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf");
for(long i=0;i<blocknum;i++)
{
fread(inBuff,1,16,finput); //讀取16個對象,每個對象的長度是1位元組
aes.InvCipher(inBuff,ouBuff);
fwrite(ouBuff,1,16,foutput);
m_prog.SetPos(int(100*i/blocknum)); //加密進度條進度設置
}
if(leftnum)
{
MessageBox("文件可能已損壞或非經aes加密過");
}
fclose(finput);
fclose(foutput);
MessageBox("解密成功!");
SetDlgItemText(IDC_EFile,EnDe_filename);
m_prog.SetPos(0);
}
要源程序和全部代碼給我郵箱我給你發過去。

E. VC 簡單加密!

#include <stdio.h>
#include <string.h>void main()
{
char a[50] = "加密~!中英文都要支持!越簡單越好!";//原文
char b[50];
char key[5] = "abcd\0";//密鑰
int i, j; printf("原文:%s\n\n", a);
printf("密鑰:%s\n\n", key); for (i = 0; i < strlen(a); i ++)
{
for (j = 0; j < 4; j ++)
{
b[i] = a[i] ^ key[j];//將每一個原文字元跟密鑰字元異或
}
}
b[i] = 0;//結束字元串

printf("加密後:%s\n\n", b); for (i = 0; i < strlen(a); i ++)
{
for (j = 3; j >= 0; j --)
{
b[i] = b[i] ^ key[j];
}
}
printf("解密後:%s\n\n", a);
}

F. TMS320VC5509APGE與TMS320VC5509A什麼區別

TMS320VC5509A是指一個系列的電路,它們都具有相同的外設、RAM容量等等。TMS320VC5509APGE是器件的具體型號,PGE是指晶元封裝,這個應該是144腳扁平貼片,4邊出長引腳。
其它的還有AGHH後綴的,代表BGA封裝,就是在晶元底部出錫球引腳。
這兩種晶元的調試方法、功能、RAM容量、外設等全部一樣,只是管腳封裝數量、排布順序不一致而已。(多出的管腳一般都是電源、地)
一般來說,購買器件時說明是TMS320VC5509APGE,就包含了封裝信息,不會買錯。如果只提TMS320VC5509A,那麼就需要補充封裝信息,否則買到的晶元焊不上,無法使用。

G. 使用高級語言(C、C++、C#語言)實現一個加密/解密程序,調試並通過該程序。

同意一樓的看法,要不你就要赫夫曼編碼原理吧,這個比較簡單,實現也比較容易;根據字元出現的頻率作為字元權值,利用Huffman演算法進行處理,形成Huffman樹,得到Huffman碼,利用Huffman碼對字元進行加密,已二進制的形式存儲到磁碟。 再利用Huffman碼對加密後的文件解密。

#include<stdio.h>

typedef struct LNode{ /*-------------鏈表-------------------*/

int data;

struct LNode *next;

}LNode,*Linklist;

typedef struct Character{ /*-------------字元結構體-------------*/

char data; /*--------------字元值----------------*/

int frequency; /*-------------字元出現頻率-----------*/

}Character;

typedef struct HTNode{ /*-------------哈夫曼接點-------------*/

char data; /*-------------接點值-----------------*/

unsigned int weight; /*--------------權值------------------*/

unsigned int parent,lchild,rchild;

}HTNode,*HuffmanTree;

Linklist L; /*-------------鏈表頭接點--------------*/

Character T[256]; /*-----存放信息中出現的字元(不含漢字)----*/

HuffmanTree HT; /*--------------存放哈夫曼接點--------------*/

char *HC[257],*HA[256]; /*------HC中緊密存放哈夫曼編碼,HA中按字元值位置存放該字元的編碼,如A存放於HA中第65號元---*/

int len=0; /*-------------信息中出現的字元數量-----------*/

int s1,s2;

int i,j;

char ch;

char Infile[10],Outfile[10],decfile[10]; /*------分別為源信息文件,加密後的2進制文件(解密源文件),解密後的文件------*/

FILE *fp,*fin,*fout;

void Create_L(int n) /*------對有n接點建一條帶頭接點的鏈表(頭插法)-----*/

{

int i;

Linklist p,k;

L=(Linklist)malloc(sizeof(LNode));

k=L;

for(i=1;i<=n;i++)

{

p=(Linklist)malloc(sizeof(LNode));

p->next=NULL;

p->data=i;

k->next=p;k=p;

}

}

void Init() /*-------初始化,統計Infile中的字元數目len及每個字元出現的頻率------*/

{ /*-------將這len個字元存於T[0]到T[len-1]中,然後按頻率值將這len個字元按升序排列------*/

void QuickSort(Character A[],int p,int r);

printf("Input the Infilename:\n");

scanf("%s",Infile);

if((fp=fopen(Infile,"r"))==NULL)

{

printf("Cannot open Infile!\n");

exit(0);

}

for(i=0;i<256;i++)

{

T[i].data=i;

T[i].frequency=0;

}

while(!feof(fp))

{

ch=fgetc(fp);

T[ch].frequency++;

}

for(i=0,j=0;i<256;i++)

{

while(!T[i].frequency&&i<256)

T[i++].data=0;

if(i<256)

T[j++]=T[i];

}

len=j;

Create_L(len);

QuickSort(T,0,len-1);

fclose(fp);

}

void QuickSort(Character A[],int p,int r) /*--------冒泡法對A數組元素按頻率升序排列---------*/

{

Character t;

for(i=p;i<r;i++)

for(j=p;j<r-i;j++)

if(A[j].frequency>A[j+1].frequency)

{

t=A[j]; A[j]=A[j+1]; A[j+1]=t;

}

}

void Select() /*------------取出鏈表的前兩個權值最小的元素,將新增元素按升序規則插於鏈表-------*/

{

Linklist p,q;

int w,t;

p=L->next;

s1=p->data;

q=p->next;

s2=q->data;

w=HT[s1].weight+HT[s2].weight;

q->data=i;

L->next=q;

free(p);

while(q->next)

{

if(w>HT[q->next->data].weight)

{ t=q->data;q->data=q->next->data;q->next->data=t;}

q=q->next;

}

}

void HuffmanCoding(int n) /*-------對n種字元進行編碼存於*HA[257]中---------*/

{

int m,c,f,start;

int lencd;

HuffmanTree p;

char *cd;

if(n<=1) return;

m=2*n-1;

HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));

for(p=HT+1,i=1;i<=n;++i,++p)

{

p->data=T[i-1].data;

p->weight=T[i-1].frequency;

p->parent=0;

p->lchild=0;

p->rchild=0;

}

for(;i<=m;++i,++p)

{

p->data=0;

p->weight=0;

p->parent=0;

p->lchild=0;

p->rchild=0;

}

for(i=n+1;i<=m;++i)

{

Select();

HT[s1].parent=i;

HT[s2].parent=i;

HT[i].lchild=s1;

HT[i].rchild=s2;

HT[i].weight=HT[s1].weight+HT[s2].weight;

}

cd=(char *)malloc(n*sizeof(char));

for(start=0;start<n;start++) cd[i]='\0';

for(i=1;i<=n;++i)

{

start=0;

for(c=i,f=HT[i].parent;f!=0;f=HT[f].parent,c=HT[c].parent)

{

if(HT[f].lchild==c)

cd[start++]='0';

else

cd[start++]='1';

}

lencd=start;

HC[i]=(char *)malloc((lencd+1)*sizeof(char));

ch=HT[i].data;

HA[ch]=(char *)malloc((lencd+1)*sizeof(char));

for(start=lencd-1,j=0;start>=0;start--)

{

HC[i][j]=cd[start];

j++;

}

HC[i][j]='\0';

strcpy(HA[ch],HC[i]);

}

free(cd);

}

void Encrytion() /*-------按HA中的編碼把Infile文件中的每一個字元翻譯成2進制文件存於outfile文件中----*/

{

printf("Input the outfilename:\n");

scanf("%s",Outfile);

if((fout=fopen(Outfile,"a"))==NULL)

{

printf("Cannot open outfile!\n");

exit(0);

}

if((fin=fopen(Infile,"r"))==NULL)

{

printf("Cannot open Infile in the Encrytion!\n");

exit(0);

}

while(!feof(fin))

{

ch=fgetc(fin);

fputs(HA[ch],fout);

}

fclose(fin);

fclose(fout);

}

void Decryption() /*--------對存於outfile文件中的密文解碼,從哈夫曼樹的根接點按0,1分別選擇左右子樹,

直到葉子接點,輸出葉子接點值-----*/

{

int m=2*len-1;

if((fin=fopen(Outfile,"r"))==NULL)

{

printf("Cannot open sourcefile!\n");

exit(0);

}

printf("Input the decfile!\n");

scanf("%s",decfile);

if((fout=fopen(decfile,"a"))==NULL)

{

printf("Cannot open decfile!\n");

exit(0);

}

while(!feof(fin))

{

i=m;

while(HT[i].lchild&&HT[i].rchild)

{

ch=fgetc(fin);

if(ch=='0') i=HT[i].lchild;

else if(ch=='1') i=HT[i].rchild;

else

{

printf("END!\n");

exit(0);

}

}

printf("%c",HT[i].data);

fprintf(fout,"%c",HT[i].data);

}

fclose(fin);

fclose(fout);

}

/*----------------主函數----------------------*/

void main()

{

void Init(); /*---------------聲明部分-------------------*/

void HuffmanCoding(int n);

void Encrytion();

void Decryption();

Init(); /*--------------初始化函數------------------*/

HuffmanCoding(len); /*--------------編碼函數--------------------*/

Encrytion(); /*--------------加密函數--------------------*/

Decryption(); /*--------------解密函數--------------------*/

}

H. tms320vc5509a型dsp的cpu採用什麼寄存器

一般的方法是1.
先在模擬器模式下調通應用程序,
這里要注意把gel文件的一些初始化配置搬移到應用程序中2.
用十六進制轉換工具hex55.exe把.out文件轉換成.hex文件或者.bin文件(.bin文件需要8bit
memory)3.
編寫flash燒寫程序,
並把步驟2中生成的.hex文件以數組的形式包含到flash燒寫程序中或者直接讀取.bin文件.
4.
flash燒寫完畢後,
配置boot
mode管腳啟動

I. VC++ DES加密了一段字元 怎麼把這個加密後得到的密文轉換為16進制

charszOutput[512]={0};
for(inti=0;i<len;i++){
sprintf(szOutput+i*2,"%.2x",(unsignedchar)out[i]);
}

閱讀全文

與vc5509語音加密編碼相關的資料

熱點內容
程序員用得到數字區嗎 瀏覽:172
python求商 瀏覽:475
ipad能用c語言編譯器嗎 瀏覽:559
軟泥解壓球最新版 瀏覽:996
4萬程序員辭職創業 瀏覽:757
thinkingphp 瀏覽:595
安卓相冊移動文件夾 瀏覽:4
耳朵清潔解壓聲控99的人都睡得著 瀏覽:203
叉車出租網站源碼 瀏覽:872
共享單車的app是什麼 瀏覽:406
不帶gui的伺服器什麼意思 瀏覽:371
金剛經及PDF 瀏覽:100
php中冒號 瀏覽:356
php5432 瀏覽:350
命令在哪使用 瀏覽:170
php獲取網頁元素 瀏覽:706
為什麼需要硬體驅動編譯 瀏覽:883
pm編程怎樣看導柱孔對不對稱 瀏覽:136
農業大學選課找不到伺服器怎麼辦 瀏覽:649
路由配置網關命令 瀏覽:933