Matlab實(shí)現(xiàn)讀寫txt文件數(shù)據(jù)與進(jìn)制轉(zhuǎn)換
前言
本文中讀與寫的txt數(shù)據(jù)格式適用于一行一個(gè)數(shù)據(jù)的情況,其他情況請(qǐng)自行結(jié)合修改。如下圖所示:
讀txt文件
讀txt中的十進(jìn)制數(shù)據(jù)到MATLAB
%% 此代碼用于讀取TXT文件的十進(jìn)制數(shù)據(jù)到MATLAB % 指定txt文件路徑 file_path = 'F:\Add Window_and_FFT Module Design\Vivado_project\rtl\data_decimal.txt';%單引號(hào)中放文件地址 % 讀取txt文件 data = load(file_path)';%根據(jù)需要加單引號(hào)轉(zhuǎn)置 disp('讀取數(shù)據(jù)完成');
讀txt數(shù)據(jù)的其他進(jìn)制數(shù)據(jù)轉(zhuǎn)為十進(jìn)制到MATLAB
修改txt的讀取地址,修改txt中的數(shù)據(jù)進(jìn)制txt_radix,修改txt中數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制位數(shù)bits
默認(rèn)是有符號(hào)數(shù)轉(zhuǎn)換,無符號(hào)時(shí)注釋掉標(biāo)注部分。
%% 讀txt數(shù)據(jù)的其他進(jìn)制數(shù)據(jù)轉(zhuǎn)為十進(jìn)制到MATLAB %讀取地址與參數(shù)設(shè)置 txtdatacell = textscan(fopen( 'F:\Add Window_and_FFT Module Design\Vivado_project\rtl\bin_Signal.txt'),'%s'); txt_radix = 2 ; %讀取的txt數(shù)據(jù)的進(jìn)制 bits = 16; % 信號(hào)對(duì)應(yīng)的二進(jìn)制位數(shù),讀取補(bǔ)碼數(shù)據(jù)時(shí)使用 %用于存儲(chǔ)數(shù)據(jù)的變量聲明 txtdata = txtdatacell{1}; length_txtdata = length(txtdata);% txt中的數(shù)據(jù)個(gè)數(shù) decdata = zeros(length_txtdata,1); %讀取主體部分 for i=1:length_txtdata decdata(i) = base2dec( txtdata{i},txt_radix ); %將所有進(jìn)制數(shù)轉(zhuǎn)換為無符號(hào)十進(jìn)制數(shù) %begin:無符號(hào)時(shí)注釋此部分 if(decdata(i)>= 2^(bits-1)) % 如果補(bǔ)碼對(duì)應(yīng)的十進(jìn)制結(jié)果大于等于一半 decdata(i)=base2dec(txtdata{i},txt_radix )-2^bits;% 轉(zhuǎn)換為負(fù)數(shù) end %end:無符號(hào)時(shí)注釋此部分 end disp('讀取轉(zhuǎn)換完成');
讀txt內(nèi)容到MATLAB
txtdatacell = textscan(fopen( 'F:\Add Window_and_FFT Module Design\Vivado_project\rtl\bin_Signal.txt'),'%s'); txtdata = txtdatacell{1}; disp('讀取完成');
寫txt文件
總:將MATLAB生成的10進(jìn)制數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制和radix進(jìn)制寫入txt
此代碼包含了生成信號(hào)數(shù)據(jù),輸出十進(jìn)制txt,輸出其他進(jìn)制txt。后兩小節(jié)的"分"為該總部分的一小部分。
%本代碼用于將MATLAB生成的十進(jìn)制數(shù)據(jù)轉(zhuǎn)為radix進(jìn)制生成txt文件,radix可設(shè)為2的次方,如:2 4 8 16... %根據(jù)需要設(shè)置生成信號(hào)和參數(shù)設(shè)置部分,修改寫txt主體部分文件輸出地址 %參數(shù)設(shè)置中radix表示將Signal轉(zhuǎn)換成該進(jìn)制數(shù)據(jù),默認(rèn)生成10進(jìn)制和radix進(jìn)制的兩個(gè)txt數(shù)據(jù) %工作區(qū)中Signal是txt中對(duì)應(yīng)的十進(jìn)制數(shù)據(jù);radix_data_cell是txt中對(duì)應(yīng)的其他進(jìn)制數(shù)據(jù) clear all;close all;clc; %清理工作區(qū),關(guān)閉所有窗口,清空文本 %% 信號(hào)生成與參數(shù)設(shè)置 %生成信號(hào) fs = 128; %采樣率 f_Signal = 5; %信號(hào)頻率 Signal_N = 128; %信號(hào)點(diǎn)數(shù) t = 0:1/fs:(Signal_N-1)/fs; %取Signal_N點(diǎn)信號(hào)觀察 scale = 2^15; %擴(kuò)大倍數(shù) Signal1 = cos(2*pi*f_Signal*t)*scale; Signal = round(Signal1)';%取整 %參數(shù)設(shè)置 bits = 16; %信號(hào)被量化后的二進(jìn)制位數(shù) radix = 2; %轉(zhuǎn)換成'2的次方進(jìn)制可選'的數(shù)據(jù)輸出,如:2 4 8 16... radix_bitnum = log2(radix);%進(jìn)制對(duì)應(yīng)的二進(jìn)制位數(shù),例16進(jìn)制對(duì)應(yīng)4位二進(jìn)制 Converte_bits = ceil(bits/radix_bitnum);%信號(hào)轉(zhuǎn)換成radix進(jìn)制的位數(shù),如14bits二進(jìn)制可轉(zhuǎn)為4位十六進(jìn)制數(shù) %% 寫txt主體部分 %將生成的十進(jìn)制數(shù)據(jù)寫入txt文件中 fid=fopen('F:\Add Window_and_FFT Module Design\Vivado_project\rtl\data_decimal.txt','w'); for i = 1:numel(Signal)-1 fprintf(fid, '%8d\r\n', Signal(i)); end fprintf(fid, '%8d', Signal(end)); fclose(fid); disp('十進(jìn)制數(shù)據(jù)已寫入到txt文件。'); %將生成的進(jìn)制數(shù)據(jù)寫入txt文件中 % 初始化一個(gè) cell 數(shù)組用于存儲(chǔ)轉(zhuǎn)換后的進(jìn)制字符串 radix_data_cell = cell(length(Signal), 1); % 循環(huán)處理每個(gè)元素 for i=1:length(Signal) if (Signal(i) == 2^(bits-1)) radix_data_cell{i}= dec2base((Signal(i)-1),radix,Converte_bits);%補(bǔ)碼范圍不包括+2^(bits-1) else radix_data_cell{i}= dec2base(Signal(i)+(Signal(i)<0)*2^bits,radix,Converte_bits);%(Signal(i)<0用于量化為負(fù)數(shù)補(bǔ)碼的情況 end end % 打開一個(gè)文本文件以寫入模式 fid = fopen('F:\Add Window_and_FFT Module Design\Vivado_project\rtl\data_radix.txt', 'w'); % 循環(huán)遍歷 cell 數(shù)組并將每個(gè)元素寫入文件 for i = 1:numel(radix_data_cell)-1 fprintf(fid, '%s\n', radix_data_cell{i}); end fprintf(fid, '%s', radix_data_cell{end}); %fprintf(fid,';'); %最后一行分號(hào)結(jié)尾 % 關(guān)閉文件 fclose(fid); disp('其他進(jìn)制數(shù)據(jù)已寫入到txt文件。');
分:將MATLAB中十進(jìn)制數(shù)據(jù)以’radix進(jìn)制’數(shù)據(jù)格式寫入txt文件
%% 將MATLAB中十進(jìn)制數(shù)據(jù)以'radix進(jìn)制'數(shù)據(jù)格式寫入txt文件 Signal = decdata;%修改decdata為需要轉(zhuǎn)換的數(shù)據(jù),需要為整數(shù),用round等取整 bits = 16; %信號(hào)對(duì)應(yīng)的二進(jìn)制位數(shù) radix = 16; %轉(zhuǎn)換成'2的次方進(jìn)制可選'的數(shù)據(jù)輸出,如:2 4 8 16... radix_bitnum = log2(radix);%進(jìn)制對(duì)應(yīng)的二進(jìn)制位數(shù),例16進(jìn)制對(duì)應(yīng)4位二進(jìn)制 Converte_bits = ceil(bits/radix_bitnum);%信號(hào)轉(zhuǎn)換成radix進(jìn)制的位數(shù),如14bits二進(jìn)制可轉(zhuǎn)為4位十六進(jìn)制數(shù) % 初始化一個(gè) cell 數(shù)組用于存儲(chǔ)轉(zhuǎn)換后的進(jìn)制字符串 radix_data_cell = cell(length(Signal), 1); % 循環(huán)處理每個(gè)元素 for i=1:length(Signal) if (Signal(i) == 2^(bits-1)) radix_data_cell{i}= dec2base((Signal(i)-1),radix,Converte_bits);%補(bǔ)碼范圍不包括+2^(bits-1) else radix_data_cell{i}= dec2base(Signal(i)+(Signal(i)<0)*2^bits,radix,Converte_bits);%(Signal(i)<0用于量化為負(fù)數(shù)補(bǔ)碼的情況 end end % 打開一個(gè)文本文件以寫入模式 fid = fopen('F:\Add Window_and_FFT Module Design\Vivado_project\rtl\data_radix.txt', 'w'); % 循環(huán)遍歷 cell 數(shù)組并將每個(gè)元素寫入文件 for i = 1:numel(radix_data_cell)-1 fprintf(fid, '%s\n', radix_data_cell{i}); end fprintf(fid, '%s', radix_data_cell{end}); %fprintf(fid,';'); %最后一行分號(hào)結(jié)尾 % 關(guān)閉文件 fclose(fid); disp('其他進(jìn)制數(shù)據(jù)已寫入到txt文件。');
分:將MATLAB中十進(jìn)制數(shù)據(jù)寫入txt文件
%% 將生成的十進(jìn)制數(shù)據(jù)寫入txt文件中 Signal = decdata;%修改decdata為需要寫入txt的數(shù)據(jù) fid=fopen('F:\Add Window_and_FFT Module Design\Vivado_project\rtl\data_decimal.txt','w'); for i = 1:numel(Signal)-1 fprintf(fid, '%8d\r\n', Signal(i)); end fprintf(fid, '%8d', Signal(end)); fclose(fid); disp('十進(jìn)制數(shù)據(jù)已寫入到txt文件。');
讀txt數(shù)據(jù)進(jìn)制轉(zhuǎn)換后寫入新的txt
將上面小節(jié)的讀txt數(shù)據(jù)的其他進(jìn)制數(shù)據(jù)轉(zhuǎn)為十進(jìn)制到MATLAB和分:將MATLAB中十進(jìn)制數(shù)據(jù)以'radix進(jìn)制'數(shù)據(jù)格式寫入txt文件組合即可實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換。修改對(duì)應(yīng)參數(shù)設(shè)置與地址。
到此這篇關(guān)于Matlab實(shí)現(xiàn)讀寫txt文件數(shù)據(jù)與進(jìn)制轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Matlab讀寫txt與進(jìn)制轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ros項(xiàng)目調(diào)試:vscode下配置開發(fā)ROS項(xiàng)目的詳細(xì)教程
這篇文章主要介紹了ros項(xiàng)目調(diào)試:vscode下配置開發(fā)ROS項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08C++有符號(hào)和無符號(hào)之間的轉(zhuǎn)換問題
在開發(fā)中經(jīng)常會(huì)遇到有符號(hào)和無符號(hào)之間的轉(zhuǎn)換問題,如果不清楚問題根源,很難解決bug,今天小編通過本文給大家分享c++有符號(hào)無符號(hào)轉(zhuǎn)換問題,需要的朋友參考下2021-07-07如何將編譯過的C++庫迅速部署在Visual?Studio新項(xiàng)目中
本文介紹在Visual?Studio中,通過屬性表,使得一個(gè)新建解決方案中的項(xiàng)目可以快速配置已有解決方案的項(xiàng)目中各類已編譯好的C++第三方庫的方法,感興趣的朋友跟隨小編一起看看吧2024-05-05