usrp n321产生2fsk波形c代码
时间: 2024-01-12 16:04:08 浏览: 116
以下是使用USRP N321产生2FSK波形的C代码示例:
```c
#include <uhd.h>
#include <math.h>
#include <complex.h>
#define SAMPLING_RATE 1e6
#define CARRIER_FREQ 100e3
#define FREQ_DEVIATION 50e3
int main(int argc, char** argv)
{
uhd_usrp_handle usrp;
uhd_stream_args_t stream_args = UHD_STREAM_ARGS_DEFAULT;
uhd_streamer_handle streamer;
uhd_tx_metadata_t metadata;
double complex sample;
float sample_buf[2];
int samples_per_period;
int num_periods;
int i, j;
// Create USRP object
uhd_usrp_make(&usrp, "");
// Set sampling rate
uhd_usrp_set_rx_rate(usrp, SAMPLING_RATE, 0);
uhd_usrp_set_tx_rate(usrp, SAMPLING_RATE, 0);
// Set center frequency
uhd_usrp_set_rx_freq(usrp, CARRIER_FREQ, 0);
uhd_usrp_set_tx_freq(usrp, CARRIER_FREQ, 0);
// Set antenna
uhd_usrp_set_rx_antenna(usrp, "RX2", 0);
uhd_usrp_set_tx_antenna(usrp, "TX/RX", 0);
// Set gain
uhd_usrp_set_rx_gain(usrp, 0, 0);
uhd_usrp_set_tx_gain(usrp, 0, 0);
// Create streamer object
uhd_usrp_get_tx_stream(usrp, &stream_args);
uhd_usrp_open_tx_stream(usrp, &stream_args, &streamer);
// Calculate number of samples per period
samples_per_period = round(SAMPLING_RATE / (2 * FREQ_DEVIATION));
// Generate FSK signal
for (i = 0; i < 2; i++)
{
// Set frequency deviation
if (i == 0)
{
metadata.start_of_burst = true;
metadata.end_of_burst = false;
metadata.has_time_spec = false;
metadata.has_time_spec = false;
uhd_tx_metadata_set_time_now(&metadata);
uhd_tx_metadata_set_start_time(&metadata, uhd_tx_metadata_get_time_now(&metadata) + uhd_time_from_ticks(1, SAMPLING_RATE));
uhd_tx_metadata_set_time_spec(&metadata, uhd_tx_metadata_get_start_time(&metadata));
uhd_tx_metadata_set_sob(&metadata, true);
uhd_tx_metadata_set_eof(&metadata, false);
uhd_tx_metadata_set_has_time_spec(&metadata, true);
}
else
{
metadata.start_of_burst = false;
metadata.end_of_burst = true;
metadata.has_time_spec = false;
metadata.has_time_spec = false;
uhd_tx_metadata_set_time_now(&metadata);
uhd_tx_metadata_set_start_time(&metadata, uhd_tx_metadata_get_time_now(&metadata) + uhd_time_from_ticks(1, SAMPLING_RATE));
uhd_tx_metadata_set_time_spec(&metadata, uhd_tx_metadata_get_start_time(&metadata));
uhd_tx_metadata_set_sob(&metadata, false);
uhd_tx_metadata_set_eof(&metadata, true);
uhd_tx_metadata_set_has_time_spec(&metadata, true);
}
for (j = 0; j < samples_per_period; j++)
{
// Set sample value
sample = cos(2 * M_PI * (CARRIER_FREQ + pow(-1, i) * FREQ_DEVIATION) * j / SAMPLING_RATE) + I * sin(2 * M_PI * (CARRIER_FREQ + pow(-1, i) * FREQ_DEVIATION) * j / SAMPLING_RATE);
sample_buf[0] = crealf(sample);
sample_buf[1] = cimagf(sample);
// Send sample to USRP
uhd_streamer_send(streamer, sample_buf, 2, &metadata, 0.1);
}
}
// Close streamer object
uhd_usrp_close_tx_stream(usrp, &streamer);
// Cleanup
uhd_usrp_free(usrp);
return 0;
}
```
该示例使用USRP N321生成2FSK信号,其中包括设置采样率、中心频率、频率偏移和天线增益等参数,并使用uhd_streamer_send函数将样本发送到USRP。注意,在生成FSK信号时,需要通过交替更改频率偏移来产生两个不同的频率。
阅读全文