How should I generate a Matlab code for tenttone using the following information
2 次查看(过去 30 天)
显示 更早的评论
TENTTONE Generates a triangularly shaped tone.
% S = TENTTONE(F,FS,LEN,PHASE) generates signal vector S that represents
% the samples of a triangularly shaped tone with frequency F in [Hz] and
% duration LEN in [sec]. Parameter FS determines the assumed underlying
% sampling frequency in [Hz]. Parameter PHASE is an optional argument
% that allows an explicit specification of a phase shift. Parameter
% PHASE defaults to zero if omitted.
%
% EXAMPLE: FS=8000; S=tenttone(440,FS,0.5,pi/4);
% sound(0.9*S,FS);
%
% See also RECTTONE and SINETONE.
% check for optional parameter
if nargin<4; PHASE=0; end
if nargin<4; PHASE=0; end
2 个评论
回答(2 个)
Soumya Saxena
2017-1-27
I understand that you want to plot triangular wave forms. You may refer to the "sawtooth" function to plot a triangular wave. Please refer to the following documentation:
Another suggestion is to use "tripuls" function. For details you can refer to the following:
For examples on how to generate pulses, you may refer to this page:
0 个评论
Image Analyst
2017-1-27
编辑:Image Analyst
2017-1-27
Use linspace(). Here, I did half of it for you. I trust you can do the other half.
% Program to create a wave file with variable amplitude and pitch.
% Initialization / clean-up code.
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 20;
% Create the filename where we will save the waveform.
folder = pwd;
baseFileName = 'Test_Wave.wav';
fullFileName = fullfile(folder, baseFileName);
fprintf('Full File Name = %s\n', fullFileName);
% Set up the time axis:
Fs = 12000;
duration = 1; % seconds.
t = 1 : duration * Fs; % 2 seconds
% Set up the period (pitch, frequency):
T = 13; % Constant pitch if you use this.
% T = linspace(25, 8, length(t)); % Pitch changes if you use this.
% Create the maximum amplitude:
Amplitude = 32767 * ones(1, length(t));
% Make a ramp
halfWay = round(length(t) / 2);
Amplitude(1:halfWay) = linspace(0, 32767, halfWay);
% Construct the waveform:
y = int16(Amplitude .* sin(2.*pi.*t./T));
% y = abs(int16(Amplitude .* sin(2.*pi.*x./T)));
% Plot the waveform:
plot(t, y, 'b-');
title('Waveform', 'FontSize', fontSize);
xlabel('Time', 'FontSize', fontSize);
ylabel('Y', 'FontSize', fontSize);
grid on;
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
fprintf('Writing file %s...\n', fullFileName);
% Write the waveform to a file:
audiowrite(fullFileName, y, Fs);
% Play the sound as many times as the user wants.
playAgain = true;
counter = 1;
while playAgain
% Play the sound that we just created.
fprintf('Playing file %s %d times...\n', fullFileName, counter);
player = audioplayer(y, Fs);
play(player);
% Ask user if they want to play the sound again.
promptMessage = sprintf('You have played the sound %d times.\nDo you want to play the sound again?', counter);
titleBarCaption = 'Continue?';
button = questdlg(promptMessage, titleBarCaption, 'Yes', 'No', 'Yes');
if strcmpi(button, 'No')
playAgain = false;
break;
end
counter = counter + 1;
end
% Alert user that we are done.
message = sprintf('Done playing %s.\n', fullFileName);
fprintf('%s\n', message);
promptMessage = sprintf('Done playing %s.\nClick OK to close the window\nor Cancel to leave it up.', fullFileName);
titleBarCaption = 'Continue?';
button = questdlg(promptMessage, titleBarCaption, 'OK', 'Cancel', 'OK');
if strcmpi(button, 'OK')
close all; % Close down the figure.
end
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/176877/image.png)
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 AI for Audio 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!